Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №5(full).docx
Скачиваний:
6
Добавлен:
07.08.2019
Размер:
169.54 Кб
Скачать

I флаг прерывания if

T флаг перехвата TF

S флаг знака SF

Z флаг нуля ZF

A флаг дополнительного переноса AF

P флаг четности PF

C флаг переноса CF

Рис.5 Регистр флагов.

Есть одна неприятность у этих регистров, с ними нельзя работать непосредственно и кроме того они влияют на ход операций.

В правой нижней части располагается окно стека (Рис.6).

Рис. 6 Окно стека.

Окно стека поделено на две части. Слева - адрес, справа - значения, хранящиеся в соответствующих ячейках стека.

Для выполнения загруженных программ в меню Run существуют несколько пунктов. Перечислим наиболее важные.

Первый пункт - Run F9. Эффект такой же, если бы вы в командной строке DOS ввели debugger.com.

Trace into F7. Эта команда трассировки позволяет выполнять программу в пошаговом режиме. Это означает, что процессор, выполнив очередную команду программы, возвращается в Turbo Debugger, что позволяет пользователю следить за выполнением программы и даже вмешиваться в ход ее выполнения, например, изменяя значения регистров или данных.

Trace over F8. Эта команда трассировки аналогична предыдущей. Разница между ними заключается в следующем: если выполнить команду CALL addr с помощью Trace into, то Turbo Debugger перейдет по адресу addr. Если же выполнить ту же самую команду с помощью Trace over, то подпрограмма выполнится как одна команда до соответствующей команды возврата из подпрограммы RET и Turbo Debugger перейдет к следующей за CALL команде.

Листинг программы:

title LabRab1 ;директива для печати заголовка программы на каждой странице

;листинга

page ,132 ;директива управления форматом печати (132 символов в строке,66

; строк на странице;по умолчанию)

; ========================

my_stack segment stack 'stack' ;сегмент стека my_stack

db 64 dup('stack ') ;определение размера стека,стек размером 384 байт (6

;символов;по 1 байту каждый,64 повторений, 6*64)

my_stack ends ;закрываем описание сегмента стека

; ========================

dseg segment ;сегмент данных dseg

source db 01h,0afh,0fh,08h ;определяем массив source из 4-х байт с

; указанием значений; в 16 с/c

dseg ends ;закрываем описание сегмента данных

; ========================

cseg segment ;сегмент кода cseg

assume cs:cseg,ds:dseg,ss:my_stack ;ассоциация сегментов и сегментных

; регистров

entry proc far ;начало процедуры с именем entry, процедура дальняя (far)

push ds ;поместить в стек номер блока адреса возврата

Xor ax,ax ;обнуление регистра ax, логическая операция

;xor(искл.ИЛИ)

push ax ;поместить в стек смещение адреса возврата

mov ax,dseg

mov ds,ax ;загрузка через регистр ax указателя сегмента данных dseg в

;регистр ds

mov cx,4 ;в регистр-счетчик cx посылаем значение 4 (это кол-во

;итераций в цикле,т.к.таблица-массив содержит 4 байта);

mov bx,offset source ; or LEA bx,source ;адрес смещения переменной source

;загружается в регистр bx;

mov di, offset dest ; or LEA di,dest ;адрес смещения переменной dest

;загружается в регистр di;

again: ;метка

mov al,[bx] ;пересылаем в младшие 8 бит регистра ax (регистр al)

;значение байта,

;находящегося по адресу [bx]

cmp al,0fh ;сравнение содержимого регистра al со значением 0f

;(происходит вычитание 0f;из содержимого регистра al,

;операнды при этом не меняются)

je e ;команда условного перехода,перейти к метке e, если байт = 0f

;(по результату;предыдущей команды)

jb a ;команда условного перехода,перейти к метке a, если байт < 0f

sub al,0fh ;вычесть из содержимого регистра al значение 0f

jmp e ;команда передачи управления на метку e

a: add al,0fh ;добавить значение 0f к содержимому регистра al

e: mov [di],al ;переслать содержимое регистра al по адресу [di]

inc bx ;увеличить содержимое регистра bx на 1

inc di ;увеличить содержимое регистра di на 1

loop again ;повторить цикл, начиная с метки again

ret ;возврат из процедуры

entry endp ;закрываем описание процедуры entry

cseg ends ;закрываем описание сегмента кода cseg

end entry ;закрываем описание программы