Создание выполнимого файла, работа в отладчике,
Изучение оператора пересылки MOV
Целью работы является изучение возможностей отладчика AFD, работа в отладчике с дизассемблированной программой, изучение оператора пересылки MOV.
Создание ехе-файлаосуществляется в два этапа. Сначала исходный текст программы компилируется и в результате создается объектный файл. В данном случае компилятором является программа tasm.exe, результатом ее работы является файл с расширением "obj". Запуск программы tasmосуществляется следующим образом:
tasm <имя файла с исходным текстом>.
Так, если Вы создали файл с ассемблерной программой revek.asm, то результатом работы программы tasm revek(здесь revek является исходной информацией для tasm) будет файл revek.obj.Следующим шагом в создании ехе-файла является шаг компоновки. Компоновка будет осуществляться следующим образом:
tlink <имя объектного файла> - tlink revek.
В результате выполнения последней операции будет получен выполнимый файл revek.exe.
Оператор MOV
Оператор пересылки MOV (переслать, передать) осуществляет пересылку байта или слова из источника (src) в получатель (dst):
dst:=(src)
Форматы команды MOV:
1. MOV mem/reg, mem/reg ;
2. MOV reg, data ;
3.MOV mem/reg, data
MOV ac, mem ;
MOV mem, ac ;
6. MOV sreg, mem/reg ;
7. MOV mem/reg, sreg,
где ac - аккумулятор, mem - память,reg - регистр,sreg - сегментный регистр
Следует помнить, что пересылка возможна только между регистрами и между регистром и памятью (пересылка типа память-память здесь невозможна).
Пример использования оператора пересылки MOV:
№ пп | Оператор | |
1. | Mov ax, bx | ;пересылка содержимого регистра BX в AX. |
2. | Mov cx, 0e563 | ;число E563 записывается в регистр СХ. |
3. | Mov ver, 34ac или Mov [0037], 34ac | ;число 34AC заносится в память, в одном случае адрес слова памяти обозначен символической переменной VER, а во втором случае адрес памяти непосредственно указан в программе. В память при этом будет записано два байта т.е. записываемое слово будет размещено в двух ячейках памяти с адресами: 0037 и 0038. При этом младший байт AC будет размещен по младшему адресу, а старший байт 34 - по старшему, поэтому в окне отладчика Вы видите число 34AC как AC34. |
4. | Mov al, ver Или Mov al, [0037] | ;пересылка осуществляется из ячейки памяти с символическим адресом в регистр, т.е. содержимое ячейки памяти (один байт) с адресом 0037 будет занесено в однобайтовый регистр AL |
5. | Mov ver, al Или Mov [0037], al | ;осуществляется операция обратная выше описанной. |
6. | Mov ds, ax | ;инициализируется значение сегментного регистра DS. В сегментный регистр нельзя записать число, непосредственно указав его в команде MOV. Эту операцию выполняют, используя какой-либо промежуточный регистр или память. Так, чтобы записать в регистр SS число 3415 необходимо выполнить следующие действия: MOV AX, 3415h MOV SS, AX. |
7. | Mov [0046], es | ;содержимое сегментного регистра ES заносится в память. |
Ниже приводится текст программы, которую следует использовать в для работы в отладчике AFD.
Текст программы SL1
name ex | ||
assume cs:code,ds:dat,ss:stak | ||
stak segment word stack | ||
dw 100 dup(?) | ||
stk_top label word | ||
stak ends | ||
dat segment | ||
; резервирование места в памяти под строку символов, начальный адрес строки - ll | ||
ll db 'ПРИВЕТ учащимся DPTI !!!$' | ||
dat ends | ||
code segment | ;начало кодового сегмента | |
start proc far | ||
push ds | ||
mov ax,0 | ||
push ax | ||
mov ax,dat | ;инициализация ; сегментных ; регистров | |
mov ds,ax | ||
mov es,ax | ||
mov ax,600h | ;очистка экрана, | |
mov bh,41h | ;установка | |
mov cx,0 | ;цветового | |
mov dx,184fh | ;режима | |
int 10h | ||
mov ah,02 | ;установить положение курсора | |
mov bh,00 | ; на странице 0, | |
mov dh,12 | ; в строке 12, | |
mov dl,20 | ; в столбец 30 | |
int 10h | ; вызов прерывания BIOS | |
mov ah,09h | ;вывод на экран строки | |
lea dx,ll | ;символов, записанных по | |
int 21h | ;адресу ll | |
mov ah,00 | ;ожидание ввода символа с экрана | |
int 16h | ||
ret | ||
start endp | ||
code ends | ;конец кодового сегмента | |
end start |
Индивидуальные задания
1. В директории ASM (TASM) создать exe-файл SL1.EXE, используя готовый исходный текст программы из файла SL1.ASM. Для подготовки exe-файла необходимо запустить программы TASM - транслятор и TLINK - компоновщик (редактор связей). Создав exe-файл, запустите его на выполнение.
2. Запустить отладчик AFD.COM.
3. Ознакомится с командами отладчика (см. HELP, вызываемый по F4).
4. В отладчике AFD загрузить программу SL1 и выполнить ее. Результат выполнения программы посмотреть в альтернативном окне. Альтернативное окно вызывается по F6, если оно было установлено предварительно по команде < MO A ON >.
5. Заново загрузить программу и начать ее выполнение в пошаговом режиме до первой команды INT <n>. Наблюдать изменения в регистрах процессора.
6. Установить точку останова (break point) после первого оператора INT <n> . Продолжить выполнение программы до точки останова. Результат выполнения программы наблюдать в альтернативном окне.
7. Установить в программе SL1 точки останова после каждого оператора INT <n> и выполнить программу, наблюдая и комментируя результаты работы программы в альтернативном окне.
8. Записать команды и выполнить их в отладчике в пошаговом режиме:
а) занести в регистры число:
Вариант 1 | Вариант 2 | Вариант 3 | Вариант 4 | Вариант 5 |
CXß7F45h AHß124 BLß-17 | SIßA87h BLß77 BHß-126 | DIß3A72h AHß87h DLß- 87 | BPß6ACDh BLß192 CHß-103 | DXß7734h CLß184 AHß- 111 |
Вариант 6 | Вариант 7 | Вариант 8 | Вариант 9 | Вариант 10 |
AXßF4F5h CLß202 BHß-95 | CXßE5F1h DLßA7h ALß-57 | BXßDEA7h DHß137 ALß- 73 | SIßDDE2h BHß171 CLß-119 | DXßA3F9h BLß7Ah CHß-133 |
б) переслать содержимое одного регистра в другой:
Вариант 1 | Вариант 2 | Вариант 3 | Вариант 4 | Вариант 5 |
СXßDX | CXßSI | BXßDI | DXßBP | BXßDX |
Вариант 6 | Вариант 7 | Вариант 8 | Вариант 9 | Вариант 10 |
DXßCX | SIßAX | DXßDI | CXßBP | DIßSI |
в) переслать содержимое ячейки памяти с указанным адресом в регистр AL
Вариант 1 | Вариант 2 | Вариант 3 | Вариант 4 | Вариант 5 |
00Е6 | 00СЕ | |||
Вариант 6 | Вариант 7 | Вариант 8 | Вариант 9 | Вариант 10 |
003А |
По указанному выше адресу записать слово:
Вариант 1 | Вариант 2 | Вариант 3 | Вариант 4 | Вариант 5 |
79A1 | 00СЕ | |||
Вариант 6 | Вариант 7 | Вариант 8 | Вариант 9 | Вариант 10 |
003А |
г) переслать в регистр ВХ содержимое ячейки памяти с указанным адресом
д) переслать в память слово, адресуемое указанным в скобках регистром:
Вариант 1 | Вариант 2 | Вариант 3 | Вариант 4 | Вариант 5 |
12E4®( BX) | 3AF6®(DI) | AE37®( SI) | E058®(BP) | FA65®(SI) |
Вариант 6 | Вариант 7 | Вариант 8 | Вариант 9 | Вариант 10 |
33AD®(SI) | D78®(BX) | 67A3®(DI) | 8CFE®(SI) | C6D®(BX) |
е) инициализировать сегментные регистры:
Вариант 1 | Вариант 2 | Вариант 3 | Вариант 4 | Вариант 5 |
DS1C01 | ESAA12 | SSF12C | DS E3A4 | SSCDFE |
Вариант 6 | Вариант 7 | Вариант 8 | Вариант 9 | Вариант 10 |
DS7A31 | ESCC33 | ESAC53 | SSFF55 | DS34E7 |
Лабораторная работа № 2