Міністерство освіти і науки
Національний університет “Львівська політехніка”
Кафедра ЕОМ
/
Звіт
з лабораторної роботи № 4
з дисципліни: “Засоби системного програмування”
на тему: “Програмування задач лінійної структури. Обчислення виразів”
Мета лабораторної роботи
Вивчити способи задання констант та змінних в Асемблері та набути навиків використання арифметичних команд над даними різного розміру.
Теоретичні відомості
Асемблер допускає два основні методи визначення даних: через вказування довжини даних та за їх значенням. В першому випадку використовуються директиви визначення даних, а у другому безпосереднє значення або директива EQU.
Розглянемо основний формат визначення даних:
[ім’я] Dn вираз
- Ім’я елемента даних не є обов’язковим але якщо в програмі є посилання на деякий елемент, те це робиться за допомогою імені.
- Для визначення елементів даних є наступні директиви:
DB (байт)
DW (слово – 2 байти)
DD (подвійне слово – 4 байти),
DQ (8 байт)
DT (10 байт).
Вираз може містити константу, наприклад: FLD1 DB 25,
або знак питання для невизначеного значення, наприклад: FLDB DB ?
Вираз може містити кілька констант, розділених комами й обмеженими тільки довжиною рядка:
FLD3 DB 11, 12, 13, 14, 15, 16, ...
Асемблер визначає ці константи у вигляді послідовності сусідніх байт. Звертання за FLD3 вказує на першу константу 11, за FLD3+1 - на другу 12. (FLD3 можна представити як FLD3+0).
Наприклад команда MOV AL,FLD3+3 завантажує в регістр AL значення 14 (0Eh).
Вираз допускає також повторення константи в наступному форматі:
[ім’я] Dn кількість повторень DUP (вираз) ...
Індивідуальне завдання
Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу і зберігає результат в пам’яті.Вхідні операнди А, В, С, D, E, F вважати беззнаковими і довжиною в байтах, згідно з індексу; К – константа, довжина якої визначається значенням(згідно варіанту). Для її опису слід використати директиву EQU.
За допомогою Debug, відслідкувати правильність виконання програми (продемонструвати результати проміжних та кінцевих обчислень).
Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї.
Дати відповідь на контрольні запитання.
12
X=K+B4/C2-D2*F2-E1
7055E0AC
Код програми
.MODEL SMALL
.STACK 100h
.DATA
K_low EQU 0E0ACh
K_high EQU 7055h
B4 dd 1215842Ah
C2 dw 1548h
D2 dw 3523h
E1 db 72h
F2 dw 1284h
Temp1 dw 0h ;B4/C2
Temp2 dd 0h ;D2*F2
Temp3 dq 0h ;K+Temp1
Temp4 dq 0h ;Temp3-Temp2
X dq 0h ;Temp4-E1
.CODE
start:
mov ax,@data
mov ds,ax
mov ax, word ptr [B4]
mov dx, word ptr [B4+2]
div C2
mov Temp1, ax
mov ax, D2
mul F2
mov word ptr [Temp2], ax
mov word ptr [Temp2+2], dx
mov ax, K_low
add ax, Temp1
mov word ptr [Temp3], ax
mov ax, K_high
adc ax, 0
mov word ptr [Temp3+2], ax
mov ax, 0
adc ax, 0
mov word ptr [Temp3+4], ax
mov ax, word ptr [Temp3]
sub ax, word ptr [Temp2]
mov word ptr [Temp4], ax
mov ax, word ptr [Temp3+2]
sbb ax, word ptr [Temp2+2]
mov word ptr [Temp4+2], ax
mov ax, word ptr [Temp3+4]
sbb ax, word ptr [Temp2+4]
mov word ptr [Temp4+4], ax
mov ax, word ptr [Temp4]
mov dl, E1
mov dh, 0
sub ax, dx
mov word ptr [X], ax
mov ax, word ptr [Temp4+2]
mov word ptr [X+2], ax
mov ax, word ptr [Temp4+4]
mov word ptr [X+4], ax
mov ax, word ptr [Temp4+6]
mov word ptr [X+6], ax
mov ah, 4Ch
int 21h
end start
Результат виконання програми
/
Висновок
Я вивчив способи задання констант та змінних в Асемблері та набув навиків використання арифметичних команд над даними різного розміру.