Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по Ассемблеру.docx
Скачиваний:
12
Добавлен:
09.11.2018
Размер:
125.1 Кб
Скачать
    1. Написание головной подпрограммы

Главная подпрограмма вызывается системой, однако в стек адрес возврата не записывается. Чтобы вернуться в операционную систему, нужно выполнить команду, находящуюся в самом начале так называемого программного префикса. Программным префиксом (PSP) называется область памяти размером 256 байт, используемая для хранения переменных окружения, командной строки, некоторых других данных и предшествующая в памяти сегменту кода:

Номер сегмента PSP система записывает в регистр DS. Смещение первой его команды всегда равно нулю.

В начале работы главной подпрограммы необходимо записать в стек адрес первой команды PSP: сначала DS, а затем ноль. Тогда команда RET в конце головной подпрограммы извлечет этот адрес из стека и следующей выполнится команда возврата в операционную систему.

Поскольку при старте программы в DS находится номер сегмента PSP, в DS необходимо явно записать номер сегмента данных. Это делают так:

MOV AX, Dseg

MOV DS, AX

Поэтому головную процедуру пишут обычно так:

Main PROC FAR

PUSH DS ; Занесение DS в стек

MOV AX, 0 ; Обнуление AX

PUSH AX ; Занесение нуля в стек

MOV AX, Dseg ; Настройка DS на сегмент данных

MOV DS, AX

RET

Main ENDP

Пример программы на ассемблере

Приведем пример программы, вычисляющей сумму трех чисел: X,Y,Z и записывающей результат в переменную RES.

; Сегменты не более 64 килобайт

.MODEL SMALL

; Сегмент стека

Sseg SEGMENT STACK ‘stack’

DB 256 DUP (?)

Sseg ENDS

; Сегмент данных

Dseg SEGMENT ‘data’

X DB 3

Y DB 5

Z DB 7

RES DB ?

Dseg ENDS

; Сегмент кода

Cseg SEGMENT ‘code’

ASSUME CS:Cseg, DS:Dseg, SS:Sseg

; Процедура добавления Z к сумме X и Y в AL и записи результата в RES

Sumres PROC NEAR

ADD AL, Z

MOV RES, AL

RET

Sumres ENDP

; Головная подпрограмма

Main PROC FAR

; Подготовимся к возврату в операционную систему

PUSH DS

MOV AX, 0

PUSH AX

; Настроим DS на наш сегмент данных

MOV AX, Dseg

MOV DS, AX

; Делаем вычисления

MOV AL, X

ADD AL, Y

CALL Sumres

; Передача управления первому оператору в PSP

RET

Main ENDP

Cseg ENDS

END Main

    1. Подготовка программ к выполнению

Программы на ассемблере подготавливаются к выполнению в 2 этапа: ассемблирование и компоновка. Ассемблирование выполняется программой tasm.exe с помощью команды DOS:

Tasm имя_файла.asm

Выходным файлом является файл с расширением obj. На этапе компоновки к нему обычно присоединяются различные библиотеки, однако для учебных программ это не нужно и компоновка выполняется командой:

Tlink имя_файла.obj

Результатом является exe-файл, который доступен для запуска и отладки.

    1. Отладка программ в Turbo Debugger

Для отладки полученного exe-файла необходимо выполнить команду DOS:

Td имя_файла.exe

Произойдет запуск отладчика и загрузка exe-файла в него. На сообщение об отсутствии дополнительной отладочной информации следует нажать ОК. Рассмотрим области окна отладчика (рис.4.1):

Окно кода

В нем отображаются команды, их адреса и машинные коды.

Окно значений регистров

Окно значений битов регистра FLAGS

Окно данных

Отображает содержимое сегмента данных.

Окно стека

Отображает содержимое стека

Рис. 4.1. Структура окна отладчика Turbo Debugger

При открытии окна отладчика окно данных отображает начало PSP, так как DS в этот момент указывает именно туда. Но при перенастройке DS в команде MOV DS, AX это окно не меняет содержимого. Чтобы отобразить в нем сегмент данных после выполнения этой команды, необходимо перейти в это окно (с помощью мыши или клавиши Tab), нажать комбинацию клавиш Ctrl+G, в появившемся окне ввести ds:0 и нажать Enter.

Для выполнения программы по шагам предназначены клавиши F7 и F8. Разница между ними заключается в обработке команды CALL. Нажатие F7 приводит к переходу на первую команду вызываемой подпрограммы, а нажатие F8 – к переходу к следующей за CALL команды вызывающей подпрограммы. Комбинация клавиш Ctrl+F2 позволяет заново начать выполнение программы с ее первой команды. Клавиша F4 позволяет выполнить программу до текущей строки.

В соответствующих окнах также можно просматривать содержимое регистров и стека.