Главная » Все файлы » Просмотр файлов из архивов » Документы » Конспект лекций по курсу Ассемблер (Алещенко)

Конспект лекций по курсу Ассемблер (Алещенко) (Раздаточный материал), страница 7

2016-04-08СтудИзба

Описание файла

Файл "Конспект лекций по курсу Ассемблер (Алещенко)" внутри архива находится в папке "Ассемблер". Документ из архива "Раздаточный материал", который расположен в категории "". Всё это находится в предмете "ассемблер" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве МАИ. Не смотря на прямую связь этого архива с МАИ, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "ассемблер" в общих файлах.

Онлайн просмотр документа "Конспект лекций по курсу Ассемблер (Алещенко)"

Текст 7 страницы из документа "Конспект лекций по курсу Ассемблер (Алещенко)"

RET

Есть другая возможность: запомнить адрес возврата с использованием стека и организовать возврат командами переходов.

При вызове процедуры следует учитывать параметры, передаваемые процедуре, и ее расположение относительно точки вызова, т.е. тип перехода в команде CALL определяется автоматически, например (для процедуры p).

P

CALL P

Если это – близкий вызов (NEAR), то производятся следующие действия:

Stack := AB, IP := offset P

где АВ – адрес возврата, т.е. эффективный адрес команды, следующей за вызовом;

Дальний вызов (FAR) обеспечивает действия:

Stack := CS, Stack := AB, CS := seg P, IP := offset P

Если описание процедуры находится в сегменте ниже команды вызова, то следует указать атрибут перехода оператором PTR. Например,

CALL FAR PTR P; дальний вызов P

Расположение процедур в сегменте

  1. Внутренние процедуры находятся в одном сегменте с вызывающей программой.

При этом возможны 3 варианта расположения:

а) Все процедуры размещены раньше основной (вызывающей) программы, которая может быть также оформлена в виде процедуры.

Например:

Text SEGMENT ‘code’

ASSUME CS: text, DS: data, SS: stack

A1 PROC

RET

A1 ENDP

Main PROC

MOV AX, data

MOV DS, AX

CALL A1

MOV AX, C400h

INT 21h

Main ENDP

Text ENDS

Data SEGMENT

Data ENDS

Stack SEGMENT ‘stack’

Stack ENDS

END Main

б) все процедуры – ниже точки вызова.

в) процедуры – внутри основной процедуры, возможно даже, что процедура внутри другой процедуры (хотя никакой выгоды это не даёт)

Например,

Main PROC

CALL A1

MOV AX, C400h

INT 21h

A1 PROC

RET

A1 ENDP

Main ENDP

Text ENDS

2) Внешние процедурырасполагаются в других сегментах или в других файлах.

Например, текст основной программы находится в файле P.asm

Text SEGMENT public ‘code’

; объединение модулей последовательно

; в общий сегмент

ASSUME CS: text, DS: data, SS: stack

EXTRN stop: proc; объявление внешнего имени

Main PROC

CALL Stop

Main ENDP

Text ENDS

Data SEGMENT

Data ENDS

Stack SEGMENT ‘stack’

Stack ENDS

END Main

Исходный текст процедуры находится в файле P1.asm

Text SEGMENT public ‘code’

ASSUME CS: text

PUBLIC stop; объявление имени доступным извне

Stop proc

ret

stop ENDP

text ENDS

END ; конец файла без точки входа

Объединение этих файлов происходит на шаге компоновки, т.е. требуется раздельная трансляция. Например, для MASM

MASM/ZI PR

MASM/ZI P1

где ZI – опция, позволяющая поместить в объектный файл полную информацию о номерах строк и символах исходного модуля (ИМ).

После образования PR.obj и P1.obj их нужно скомпоновать в единый загрузочный файл

LINK/C0 PR P1, COMPOZ

где С0 – опция, передающая в загрузочный файл символьную информацию, позволяющую отладчику CV выводить на экран полный текст ИМ, включая метки и комментарии.

Модуль COMPOZ.exe готов к исполнению.

Можно подключить процедуру из библиотеки. Для этого перед сегментами ИМ помещается директива

INCLUDE {имя файла библиотеки}

Например, для подключения файла IO.asm следует записать

INCLUDE IO.asm

S SEGMENT ‘stack’

S ENDS

D SEGMENT ‘data’

D ENDS

C SEGMENT ‘code’

ASSUME CS:C, SS:S, DS:D

Begin: …

C ENDS

END Begin

Передача параметров между процедурами (организуется по желанию программиста)

  1. Передача параметров через регистры МП

Передавать значения фактических параметров можно через регистры МП по желанию программиста. Например,

; процедура вычисления AX := max {AX, BX}

max proc far

CMP AX, BX

JGE Max1

MOV AX, BX

Max1: RET

max endp

; в основной процедуре

MOV AX, A ; подготовка параметров

MOV BX, B ; к вызову процедуры

CALL max

MOV C, AX ; сохранение результата

  1. Передача параметров по ссылке означает передачу адреса (имени) ячейки памяти, соответствующей фактическому параметру (передача именованного значения из ассемблера в Pascal). Для этого можно использовать имя ячейки памяти или загрузить адрес перед вызовом процедуры в регистр (BX, BP, SI или DI, т.к. в процедуре можно использовать эти регистры для адресации ).

Например, командой

LEA BX, B

CALL……

  1. Передача параметров через стек.

Передача параметров через регистры ограничена их небольшим количеством. Если параметров много (больше 5-ти), их передают через стек следующим образом:

- Основная программа записывает в стек фактические параметры (значения или адреса);

- В процедуре используются параметры, записанные в стек.

Например:

; вызов p(a1,…, ak)

PUSH a1

PUSH ak

CALL p

В процедуре можно использовать дополнительный указатель стека BP, но в начале процедуры следует сохранить значение BP, которое использовалось в вызывающей программе, т.е.

; начало процедуры Р

P proc

PUSH BP ; сохранение BP

MOV BP, SP ; настройка BP на вершину стека

Затем можно использовать базовую адресацию. Например, для близкого вызова

[BP + 2] – адрес возврата, занесенный в стек автоматически,

[BP + 4] – адрес последнего параметра ak.

До возврата из процедуры следует восстановить BP командой

POP BP

затем очистить стек от передаваемых параметров, чтобы он не перегружался при многократном вызове процедур, т.е. установить в SP значение, на 2*k больше, чем было после вызова процедуры.

Есть 2 возможности корректного возврата из процедуры.

а) корректировать SP в вызывающей программе

; конец процедуры

; в вызывающей программе

POP BP

CALL p

RET

ADD SP, 2*k ; коррекция SP

P ENDP

б) использовать команду возврата с восстановлением стека, имеющую вид для близкого вызова

RET {cnt}

где {cnt} – счетчик (константное выражение ), размером слово.

Команда выполняет следующие действия:

IP := Stack SP := SP + {cnt}

Тогда конец процедуры имеет вид:

POP BP

RET 2*k

p ENDP

Для дальнего вызова процедуры команда возврата имеет вид

RET {cnt}

и выполняет следующие действия:

IP := Stack CS := Stack SP := SP + {cnt}

При таком возврате из процедуры в вызывающей программе дополнительные действия не требуются.

  1. Проблема сохранения регистров при обращении к процедуре

Чтобы процедура не портила значения регистров, которые использовались в вызывающей программе, требуется в тексте процедуры перед использованием какого-либо регистра сохранить его «старое» значение в стеке, а в конце процедуры все сохраненные значения восстановить.

Например, если в процедуре будет использоваться регистр CH, то его следует сохранить в стеке, но стек запоминает только со слова, поэтому в процедуре будет фрагмент:

PUSH CX ; сохранение «старого» CX

MOV CX, 0 ; использование CX в процедуре

; перед выходом из процедуры

POP CX ; восстановление «старого» CX

Таким образом, получится обобщенная схема близкой (NEAR) процедуры с параметрами, передаваемыми через регистры и через стек



{имя проц} proc



PUSH BP для обслуживания

mov BP, SP стека



PUSH сохранение регистров,

используемых в процедуре



тело проц.



РОР ... восстановление регистров



РОР ВР восстановление BP


RET {cnt}



{имя проц} ENDP

Основные средства обработки программ на ЯА

Программные пакеты MASM и TASM



Процесс подготовки и отладки программы на ЯА включает в себя этапы подготовки исходного модуля (ИМ), трансляции, компоновки и отладки.

  1. Подготовка исходного модуля (текста программы) может выполняться с помощью любого текстового редактора. Файл с исходным текстом должен иметь расширение .ASM.

Следует использовать редакторы, формирующие выходной файл в формате ASCII без дополнительных символов, которые вставляют специализированные текстовые редакторы (например, MS Word). Рекомендуются редакторы Norton Editor, WordPad.

При работе в интегрированных средах можно пользоваться редакторами, строенными в эти среды. Например, программные пакеты фирмы Borland, такие как C, C++, Pascal, содержат средства создания ассемблерных программ и фрагментов.

  1. Трансляция ИМ состоит в преобразовании строк исходного языка в коды машинных команд и выполняется с помощью транслятора (ассемблера).

Можно пользоваться трансляторами

MASM фирмы Microsoft или

TASM фирмы Borland.

Ассемблеры различаются в основном в чести написания макросредств, но входной язык для всех ассемблеров одинаков. После трансляции образуется объектный модуль (ОМ), т.е. файл с расширением .OBJ.

Трансляторы вызываются командами MS DOS

MASM name

TASM name

где name – имя файла ИМ без расширения.

Ассемблер формирует ОМ с тем же именем, кроме того, формируются файлы:

­­- листинга .LST (list)

- перекрестных ссылок .CRF (Cross reference).

В команде ассемблирования можно указать путь к файлу или при помощи опций трансляции внести изменения.

Например,

MASM D:\SRC\bild

Здесь обрабатывается файл bild.asm из папки SRC.

Общий вид команды ассемблирования на примере MASM:

MASM {ИМ} [,{ОМ} [,{list}[,{cross}]]] [/{опции}]

Имена {ИМ} ,{ОМ} ,{list},{cross} могут указываться без расширения или с ним; можно отменить формирование одного из файлов или их группы. Т.К. порядок файлов фиксирован, то исключение из середины списка обозначается появление двух запятых подряд, а отключение конца списка обозначается точкой с запятой. Например,

TASM FIL1

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5168
Авторов
на СтудИзбе
438
Средний доход
с одного платного файла
Обучение Подробнее