Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler 01.doc
Скачиваний:
19
Добавлен:
09.11.2019
Размер:
727.04 Кб
Скачать

1. Команда jmp.

1.1. Одна из команд, обычно используемых для передачи управления - команда JMP. Эта команда выполняет безусловный переход, т.е. обеспечивает передачу управления при любых обстоятельствах.

Создать файл exjump.asm и записать в него следующую программу в COM-формате:

.286

TITLE EXJUMP (COM) Организация цикла с помощью JMP

CODESG SEGMENT PARA 'Code'

ASSUME CS:CODESG,DS:CODESG,SS:CODESG

ORG 100H

MAIN PROC NEAR

MOV AX,01 ;Инициализация АХ

MOV BX,01 ;Инициализация ВХ

MOV CX,01 ;Инициализация СХ

A20: ADD AX,01 ;Прибавить 01 к АХ

ADD BX,AX ;Прибавить АХ к ВХ

SHL CX,1 ;Удвоить СХ

JMP A20 ;Переход на А20

MAIN ENDP

CODESG ENDS

END MAIN

В этой программе выполняется цикл. Начало цикла имеет метку, в данном случае А20: - двоеточие обозначает, что метка находится внутри процедуры (В данном случае MAIN) в сегменте кода. В конце цикла находится команда JMP A20, указывающая на то, что управление должно быть передано команде с меткой А20. Обратите внимание, адресная метка в операнде команды указывается без двоеточия. Данный цикл не имеет выхода и приводит к бесконечному выполнению - такие циклы обычно не используются.

Адрес А20 указывает на первый байт команды ADD AX,01. Двоеточие в метке А20 означает тип метки - NEAR.

1.2. Просмотреть листинг программы с помощью текстового редактора LEXICON и записать его в отчет. Определить код команды JMP и ее операнд. Операнд команды, размером в один байт, представляет отрицательное число. Преобразовать операнд в двоичную и перевести число из отрицательного в положительное, затем обратно преобразовать число в шестнадцатиричную систему счисления. Полученное число вычесть из содержимого командного указателя, которое устанавливается после выполнения команды JMP (IP=0112). Объяснить полученный результат.

1.3. Используйте отладчик DEBUG для пошагового выполнения COM-модуля и просмотрите несколько повторений цикла. Когда регистр АХ будет содержать 08, ВХ и СХ увеличатся до 24Н (36) и 80Н (128) соответственно. Для выхода из отладчика используйте команду Q.

2. Команда loop.

2.1. Команда LOOP применяется когда требуется прерывание выполняемого цикла. Эта команда использует начальное значение в регистре СХ. В каждом цикле команда LOOP автоматически уменьшает содержимое регистра СХ на 1. Пока значение в СХ не равно нулю, управление передается по адресу, указанному в операнде, и если в СХ будет 0, управление переходит на следующую после LOOP команду.

2.2. Записать в текстовом редакторе NORTON следующую программу:

.286

TITLE EXLOOP (COM) Организация цикла командой LOOP

CODESG SEGMENT PARA 'Code'

ASSUME CS:CODESG,DS:CODESG,SS:CODESG

ORG 100H

BEGIN PROC NEAR

MOV AX,01 ;Инициализация АХ

MOV BX,01 ;Инициализация ВХ

MOV DX,01 ;Инициализация DХ

MOV CX,10 ;Число циклов

A20: INC AX ;Прибавить 01 к АХ

ADD BX,AX ;Прибавить АХ к ВХ

SHL DX,1 ;Удвоить DХ

LOOP A20 ;Уменьшить СХ и повторить цикл,

;если не нуль

RET ;Завершить работу

BEGIN ENDP

CODESG ENDS

END BEGIN

Эта программа завершается после десяти циклов. Команда MOV инициализирует регистр СХ значением 10. Так как команда LOOP использует СХ, то в программе для удвоения начального значения 1 вместо регистра СХ используется DX. Кроме того для увеличения АХ на 1 используется команда INC.

2.3. Выполнить ассемблирование программы exloop.asm с получением листинга. Просмотреть листинг в текстовом редакторе и записать его в отчет. Определить операнд команды LOOP. Операнд является отрицательным числом, перевести его в положительное число. Из содержимого командного указателя после выполнения команды LOOP вычесть операнд. Объяснить полученный результат.

2.4. Выполнить компоновку и преобразование COM-файл. Для трассировки всех десяти циклов используйте отладчик DEBUG. Определите, какое значение будет в регистрах АХ, ВХ и DX когда значение в регистре СХ уменьшится до нуля. Определите, как изменяется содержимое регистра СХ при выполнении команды LOOP. Определите, как изменяется содержимое командного указателя IP при выполнении

команды LOOP.

2.5. Для выхода из отладчика введите команду Q.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]