Міністерство освіти і науки
Національний університет «Львівська політехніка»
Кафедра ЕОМ
Звіт
до лабораторної роботи № 4
з дисципліни: “ Засоби системного програмування”
на тему: “ Програмування задач лінійної структури.
Обчислення виразів.”
Мета роботи
• вивчити способи задання констант та змінних в Асемблері та набути навиків використання арифметичних команд над даними різного розміру.
Завдання
Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу і зберігає результат в пам’яті.Вхідні операнди А, В, С, D, E, F вважати беззнаковими і довжиною в байтах, згідно з індексу; К – константа, довжина якої визначається значенням(згідно варіанту). Для її опису слід використати директиву EQU.
За допомогою Debug, відслідкувати правильність виконання програми (продемонструвати результати проміжних та кінцевих обчислень).
Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї.
Дати відповідь на контрольні запитання.
Варіанти завдання:
А, В, С, D, E, F - беззнакові операнди, довжиною в байтах, згідно з індексу, значення К подано у 16-му форматі.
Індивідуальне завдання(Варіант 27):
№
Вираз
K
27
X=A2*B1+C4/(K-E1*F1)
A77627
Код програми (файл lab.asm)
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
A dw 3333h
B db 11h
C dd 11112222h
E db 22h
F db 33h
K_low EQU 7627h
K_high EQU 7Ah
temp1 dw 0 ;5B06
temp2 dw 0 ;35563
temp3 dw 0 ;1110 C71C
temp4 dw 0 ;11141C7F
X dd 0 ;11143F8F
.CODE
start:
mov ax,@data
mov ds,ax
; множення temp1=A*B
mov al, byte ptr A
mul B
mov word ptr temp1,ax
mov al, byte ptr [A+1]
mul B
add word ptr [temp1+1], ax
adc byte ptr [temp1+3], 0 ;додавання можливого переносу в старший байт змінної
; для демонстрації в дебагері
mov ax, word ptr [temp1+2]
mov bx, word ptr temp1
; множення temp2=E*F
mov al, byte ptr E
mul F
mov word ptr temp2,ax
mov al, byte ptr [E+1]
mul F
add word ptr [temp2+1], ax
adc byte ptr [temp2+3], 0 ;додавання можливого переносу в старший байт змінної
; для демонстрації в дебагері
mov ax, word ptr [temp2+2]
mov bx, word ptr temp2
; віднімання temp3=K-temp2
mov ax, word ptr K_low
sub ax, temp2
mov word ptr temp3, ax
mov ax, word ptr K_high
sbb ax, 0 ;віднімання з можливим запозиченням
mov word ptr [temp3+2], ax
; для демонстрації в дебагері
mov ax, word ptr [temp3+2]
mov bx, word ptr temp3
; ділення temp4=C/temp3
mov ax, word ptr C
mov dx, word ptr [C+2]
div temp3
mov temp4, ax
; додавання X=temp1+temp4
mov ax, word ptr temp1
add ax, temp4
mov word ptr X, ax
mov ax, word ptr [temp1+2]
adc ax,0
mov word ptr [X+2], ax
mov ax, word ptr [temp1+4]
adc ax,0
mov word ptr [X+4], ax
; для демонстрації в дебагері
mov ax, word ptr [X+4]
mov bx, word ptr [X+2]
mov cx, word ptr X
mov ah,4Ch
int 21h
end start
end
Обчислення прикладу:
temp1 = B / C = 333316 * 1116 = 3666316
temp2 = E*F = 2216 * 3316 = 6C616
temp3 = K-temp2= 7A762716 - 6C616 = 7A6F6116
temp4 = C / temp3= 1111222216/7A6F6116= 2316
X = temp1+temp4= 3666316 + 248E3E1416 = 4C6116
Проміжні результати:
/
Рис.1. Змінна temp1, старші байти в регістрі ax, а молодші байти в bx
/
Рис.2. Змінна temp2, байти в регістрі ax.
/
Рис.3. Змінна temp3, байти в регістрі ax
/
Рис.4. Змінна temp4, старші байти в регістрі bx, молодші ax
/
Рис.5. Змінна Х, результат виразу, байти в регістрі
Висновок: в даній лабораторній роботі я отримав навики використання різних арифметичних команд над даними різного розміру і використав отримані знання для обчислення індивідуального завдання на мові Assembler.