НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
«ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра ЕОМ
Звіт
лабораторної роботи №3
«Програмування задач лінійної структури. Обчислення виразів»
з дисципліни:
«Засоби системного програмування»
Львів-2013
Мета: вивчити способи задання констант та змінних в Асемблері та набути навиків використання арифметичних команд над даними різного розміру.
ЗАВДАННЯ
Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу і зберігає результат в пам’яті.Вхідні операнди А, В, С, D, E, F вважати беззнаковими і довжиною в байтах, згідно з індексу; К – константа, довжина якої визначається значенням(згідно варіанту). Для її опису слід використати директиву EQU.
За допомогою Debug, відслідкувати правильність виконання програми (продемонструвати результати проміжних та кінцевих обчислень).
Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї.
Дати відповідь на контрольні запитання.
ВАРІАНТ ЗАВДАННЯ:
А, В, С, D, E, F - беззнакові операнди, довжиною в байтах, згідно з індексу,
значення К подано у 16-му форматі.
19
X=(A4-B3-K)*D1+E4/F2
311
Алгоритм виконання:
1.1 Послідовність операцій
1. A4-B3
2. (1)-K
3. (2)*D1
4. E4/F2
5. (3) + (4)
1.2 Послідовність виконання
1. Виконати віднімання 3 байти від 4-х, результат – 4 байти
2. Віднімання 2 байти від 4-х, результат – 4 байти
3. Множення 4 байти на 1 байт, результат – 4 байти
4. Ділення 4 байти на 2 байти, результат – 2 байти
5. Додавання 4 байт + 2 байта, результат – 4 байта
6. Запис результату – 4 байти.
Текст програми:
.MODEL SMALL
.STACK 100h
.DATA
K EQU 311d
A dd 99558888h
B dd 00ff9999h
D db 11h
E dd 11223344h
F dw 1234h
Temp1 dd 0h
Temp2 dd 0h
Temp3_l dd 0h
Temp3_h dd 0h
Temp4 dd 0h
X_l dd 0h
X_h dd 0h
.CODE
mov ax,@data
mov ds,ax
mov ax, word ptr [A]
mov bx, word ptr[B]
sub ax,bx
mov word ptr [Temp1],ax
mov ax, word ptr [A+2]
mov bx, word ptr [B+2]
sbb ax,bx
mov word ptr [Temp1+2],ax
mov ax, word ptr [Temp1]
mov bx,K
sub ax,bx
mov word ptr [Temp2],ax
mov ax, word ptr [Temp1+2]
mov word ptr [Temp2+2],ax
mov bl,D
mov bh,00
mov ax, word ptr [Temp2]
mul bx
mov word ptr [Temp3_l],ax
mov word ptr [Temp3_l+2],dx
mov ax, word ptr [Temp2+2]
mul bx
add ax,word ptr [Temp3_l+2]
mov word ptr [Temp3_l+2],ax
adc dx,0
mov word ptr [Temp3_h],dx
mov ax, word ptr [E]
mov dx, word ptr [E+2]
div F
mov Temp4,ax
mov ax,word ptr [Temp3_l]
add ax,Temp4
mov X_l,ax
mov ax,word ptr[Temp3_l+2]
adc ax,word ptr[Temp4+2]
mov X_l+2,ax
mov ax,word ptr [Temp3_h]
mov X_h,ax
mov ah,4Ch
int 21h
end
Результати виконання програми:
Висновки: виконавши дану лабораторну роботу, я вивчив способи задання констант та змінних в Асемблері та набув навиків використання арифметичних команд над даними різного розміру.