Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабоаторна робота №7.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
261.12 Кб
Скачать

2. Порядок виконання роботи

1. Знайти транслятор і файли afd.exe та td.exe.

  1. Проаналізувати текст програми lab1.asm, зрозуміти зміст кожної з асемблерних команд. З’ясувати, як будуть змінюватися дані всіх регістрів процесору при виконанні кожної з них. Текст програми повинен мати такий вигляд:

Набрати представлену програму та зберегти з ім’ям lab1_1.asm.

Програма ілюструє основні елементи, властиві для програмам на мові Асемблера - складається з двох логічних сегментів data і code, логічний сегмент data розміщається в фізичному сегменті даних, який адресує регістр DS. Логічний сегмент кодів code розташовується у фізчному сегменті кодів, який адресує сегментний регістр CS.

Текст програми:

; програма lab1.asm

data SEGMENT byte

val1 db 3

val2 db 2

result db ?

data ENDS

code SEGMENT

ASSUME cs:code,ds:data

; директива assume інформує Асемблер, що в сегментному регістрі cs

; міститься адреса сегмента code (її в регістр cs помістив завантажувач),

; а в сегментному регістрі ds - адреса сегмента data

begin:

mov ax,data ; записать адресу сегмента data в регістр ax

mov ds,ax ; записать адресу сегмента data в регістр ds

;( це було "обіцяно" Асемблеру в директиві Assume)

mov al,val1 ; записать в регістр al значення змінної по адресі val1

add al,val2 ; до вмісту регістра al додать значення

; змінної по адресі val2, а результат записать в регістр al

mov result,al ; вміст регістра al присвоюється змінній по адресі result

; фактично реалізовано оператор result:=val1+val2

; ОСОБЛИВІСТЬ АСЕМБЛЕРА:

; якщо на мові Паскаль під ідентифікаторами result,val1 та val2

; звично розуміють значення змінних, то на мові Асемблера - це адреси

; змінних в сегменті даних

nop ; холоста команда процесора, в даному випадку

; використовується для зручності при роботі з налагоджувачем

mov ax,4c00h ; повернення в MS-DOS

int 21h

code ENDS

end begin

  1. Якщо відсутній файл lab1.asm, то підготовити його за допомогою додатка Блокнот

  2. Відтранслювати програму у файлі lab1.asm за допомогою MASM. Створити об'єктнbй файл і файл лістингу.

  3. Створити за допомогою LINK exe-файл.

Запустити AFD. За допомогою AFD (команда L) завантажити програму. Виконати програму по-командно (клавіша F1) до команди nop. Звернути увагу на зміну вмісту регістрів процесора та пам'яті після виконання кожної команди.

Набрати представлену програму та зберегти з ім’ям lab1_2.asm.

Текст програми:

title word

dat1 segment

a db 'Hello world1',10,13

b db 'Hello world2',10,13,'$'

c db '34'

dat1 endS

cod1 segment

assume cs:cod1, ds:dat1

start1: mov ax, dat1

mov ds, ax

xor ax, ax

mov ah, 09h

mov dx, offset a

int 21h

mov ah, 02h

mov dx, ‘c’

int 21h

mov ah,4Ch

int 21h

cod1 endS

end Start1

  1. Сформувати лістинг, об’єктний та виконуваний код для програми lab1.asm; останній записати у файл lab1_1.asm.exe та lab1_2.exe

  2. Запустити програму lab1_1.asm.exe та lab1_2.exe на обробку. Переконайтеся в тому, що вона коректно виконується (комп’ютер не «підвісає»).

  3. Завантажити програму lab1_1.asm.exe та lab1_2.exe до відладчика AFD та крок за кроком виконати всі її команди. Після виконання кожної команди аналізувати стан кожного з регістрів процесора.

  4. Завантажити програму lab1_1.asm.exe та lab1_2.exe до відладчика TD та крок за кроком виконати всі її команди. Після виконання кожної команди аналізувати стан кожного з регістрів процесора.

3. Зміст звіту

1. Послідовність дій, які потрібно виконати для компіляції асемблерної програми. Розглянути два випадка: компіляцію com-програми та компіляцію exe-програми.

2. Таблиця з трьох колонок. До першої занести початковий код асемблерної програми файлу lab1.asm, до другої - її машинні коди, а до третьої - стан усіх регістрів процесору після її виконання.

3. Висновки за роботою.