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

Цель работы

Научиться анализировать ход выполнения программы на языке Ассемблера при помощи отладчика TurboDebugger.

Исходное задание

title lab1- директива TITLE. служит того, чтобы вверху каждой страницы листинга печатался заголовок программы.

page ,132- директива PAGE указывает количество строк, распечатываемых на одной странице, и максимальное количество символов на одной строке.

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

my_stack segment stack 'stack'- организация сегмента для стековой памяти с именем

,«my_stack», с объединением с другими сегментами в процессе компоновки по типу STACK(сегмент во время выполнения команды будет частью стека). Элемент, заключенный в апострофы, используется для группирования относительных сегментов при компоновке.

db 64 dup('stack ')- определение 64 байт, содержащих ‘stack’.

my_stack ends- конец сегмента именем «my_stack».

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

dseg segment-организация сегмента с именем «dseg».

source db 01h,0afh,0fh,08-резервирование области памяти (4 байта) под именем ‘source’ и запись в нее чисел 01h,0afh,0fh,08h.

dest db 4 dup(?)- резервирование области памяти (4 байта) под именем ‘dest’ без инициализации.

dseg ends- конец сегмента именем «dseg».

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

cseg segment- организация сегмента с именем «сseg».

assume cs:cseg,ds:dseg,ss;my_stack-сообщает о содержании и назначении сегментных регистров:cs-для определения сегмента содержащего выполняемую программу,ds-для доступа к данным, ss-задает стековый сегмент.

entry proc far- точка входа процедуры «entry».

push ds-помещает в стек содержимое регистра ds.

xor ax,ax-реализует поразрядно операцию «исключающее или»,в итоге - обнуление регистра аx.

push ax-помещает в стек содержимое регистра ax.

mov ax,dseg- помещает содержимое dseg в регистр ax.

mov ds,ax- помещает содержимое регистра ax в регистр ds.

mov cx,4- помещает в регистр сx число 4.

mov bx,offset source ; or LEA bx,source-эквивалентные операции: поместить в регистр bx смещение переменной ‘source’.

mov di, offset dest ; or LEA di,dest- эквивалентные операции: поместить в регистр di смещение переменной ‘dest’.

again:

mov al,[bx]-помещает элемент таблицы source в младший байт регистра ax.

cmp al,0fh- сравнивает содержимое al c числом 0fh.

je e-если в результате операции cmp флаг сf=1 (сравниваемые числа оказались равны), то переходим к метке «е».

jb a-если в результате операции cmp флаг cf=1 (содержимое al оказалось меньше 0fh), то переходим к метке «a».

sub al,0fh- уменьшает содержимое al на 0fh.

jmp e- безусловный переход к метке «е».

a: add al,0fh- увеличивает содержимое al на 0fh.

e: mov [di],al-помещает содержимое al в таблицу dest.

inc bx-увеличивает значение регистра bx на 1.

inc di- увеличивает значение регистра di на 1.

loop again- уменьшает значение регистра cx на 1, и если его значение неравно 0 переходим к началу цикла (метка «again»).

Ret-возвращает управление вызывающей программе.

entry endp-точка выхода процедуры «entry».

cseg ends-конец сегмента именем «сseg».

end entry-конец исходного модуля.