Міністерство освіти і науки
Національний університет «Львівська політехніка»
Кафедра ЕОМ
Звіт
до лабораторної роботи № 4
з дисципліни: “ Засоби системного програмування”
на тему: “ Програмування задач лінійної структури.
Обчислення виразів.”
Мета роботи
• вивчити способи задання констант та змінних в Асемблері та набути навиків використання арифметичних команд над даними різного розміру.
Завдання
Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу і зберігає результат в пам’яті.Вхідні операнди А, В, С, D, E, F вважати беззнаковими і довжиною в байтах, згідно з індексу; К – константа, довжина якої визначається значенням(згідно варіанту). Для її опису слід використати директиву EQU.
За допомогою Debug, відслідкувати правильність виконання програми (продемонструвати результати проміжних та кінцевих обчислень).
Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї.
Дати відповідь на контрольні запитання.
Варіанти завдання:
А, В, С, D, E, F - беззнакові операнди, довжиною в байтах, згідно з індексу, значення К подано у 16-му форматі.
Індивідуальне завдання(Варіант 10):
№
Вираз
K
10
X=A4-B4/C2+K+E2*F1
2310
Код програми (файл lab.asm)
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
A dd 11112222h
B dd 12345678h
C dw 3333h
E dw 3233h
F db 11h
K EQU 2310h
temp1 dw 0 ;5B06
temp2 dd 0 ;35563
temp3 dd 0 ;1110 C71C
temp4 dq 0 ;11141C7F
X dq 0 ;11143F8F
.CODE
start:
mov ax,@data
mov ds,ax
; ділення temp1=B/C
mov ax, word ptr B
mov dx, word ptr [B+2]
div C
mov temp1, ax
; множення 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=A-temp1
mov ax, word ptr A
sub ax, temp1
mov word ptr temp3, ax
mov ax, word ptr [A+2]
sbb ax, 0 ;віднімання з можливим запозиченням
mov word ptr [temp3+2], ax
; для демонстрації в дебагері
mov ax, word ptr [temp3+2]
mov bx, word ptr temp3
; додавання temp4=temp3+temp2
mov ax, word ptr temp3
add ax, word ptr temp2
mov word ptr temp4, ax
mov ax, word ptr [temp3+2]
adc ax, word ptr [temp2+2]
mov word ptr [temp4+2], ax
adc word ptr [temp4+4], 0
; для демонстрації в дебагері
mov ax, word ptr [temp4+4]
mov bx, word ptr [temp4+2]
mov cx, word ptr temp4
; додавання X=temp4+K
mov ax, word ptr temp4
add ax, K
mov word ptr X, ax
mov ax, word ptr [temp4+2]
adc ax,0
mov word ptr [X+2], ax
mov ax, word ptr [temp4+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 = 1234567816 / 333316 = 5B0616
temp2 = E*F = 323316 * 1116 = 3556316
temp3 = A-B/C= A-temp1= 1111222216 - 5B0616 = 1110C71C16
temp4 = A-B/C+ E2*F1 = temp3-temp2=1110C71C16+3556316= 11141C7F16
X = temp4 + K = 11141C7F 16 + 231016 = 11143F8F16
Проміжні результати:
/
Рис.1. Змінна temp1, в регістрі ax - частка, в dx – залишок від ділення
/
Рис.2. Змінна temp2, старші байти в регістрі ax, а молодші байти в bx
/
Рис.3. Змінна temp3, старші байти в регістрі ax, а молодші в bx
/
Рис.4. Змінна temp4, старші байти в регістрі bx, молодші ax
/
Рис.5. Змінна Х, результат виразу, старші байти в регістрі bx, наймолодші сx
Висновок: в даній лабораторній роботі я отримав навики використання різних арифметичних команд над даними різного розміру і використав отримані знання для обчислення індивідуального завдання на мові Assembler.