
- •Тема Основи програмування на мові асемблер та знайомство з програмним забезпеченням (відладчиками)
- •Теоретичні відомості
- •1.1 Особливості архітектури мікропроцесора типу Intel 80х86
- •Головні регістри мп Intel 8086 та їх призначення
- •1.2 Організація обчислень та узагальнена архітектура комп’ютера ibm pc
- •1.3 Основи програмування на мові асемблер та її синтаксис. Позначки, коди команд, операнди та директиви
- •1.4. Перетворення програми з тексту на мові асемблера у виконуваний модуль
- •1.5. Основи роботи з програмою afd
- •1.6. Основи роботи з програмою td
- •2. Порядок виконання роботи
- •4. Контрольні питання:
- •Сегментація програми. Сегменти коду, даних та стеку. Їх розташування в пам’яті еом. Директиви мови асемблера segment та ends.
2. Порядок виконання роботи
1. Знайти транслятор і файли afd.exe та td.exe.
Проаналізувати текст програми 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
Якщо відсутній файл lab1.asm, то підготовити його за допомогою додатка Блокнот
Відтранслювати програму у файлі lab1.asm за допомогою MASM. Створити об'єктнbй файл і файл лістингу.
Створити за допомогою 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
Сформувати лістинг, об’єктний та виконуваний код для програми lab1.asm; останній записати у файл lab1_1.asm.exe та lab1_2.exe
Запустити програму lab1_1.asm.exe та lab1_2.exe на обробку. Переконайтеся в тому, що вона коректно виконується (комп’ютер не «підвісає»).
Завантажити програму lab1_1.asm.exe та lab1_2.exe до відладчика AFD та крок за кроком виконати всі її команди. Після виконання кожної команди аналізувати стан кожного з регістрів процесора.
Завантажити програму lab1_1.asm.exe та lab1_2.exe до відладчика TD та крок за кроком виконати всі її команди. Після виконання кожної команди аналізувати стан кожного з регістрів процесора.
3. Зміст звіту
1. Послідовність дій, які потрібно виконати для компіляції асемблерної програми. Розглянути два випадка: компіляцію com-програми та компіляцію exe-програми.
2. Таблиця з трьох колонок. До першої занести початковий код асемблерної програми файлу lab1.asm, до другої - її машинні коди, а до третьої - стан усіх регістрів процесору після її виконання.
3. Висновки за роботою.