Міністерство освіти та науки України
Національний університет «Львівська політехніка»
ЗВІТ
З лабораторної роботи №5
З дисципліни: «Засоби системного програмування»
На тему: «Програмування задач лінійної структури.
Обчислення цілочисельних виразів з використанням знакових даних»
Львів 2010
ЗАВДАННЯ:
Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу і зберігає результат в пам’яті.Вхідні операнди А, В, С, D, E, F вважати знаковими і довжиною в байтах, згідно з індексу; К – константа, довжина якої визначається значенням(згідно варіанту). Для її опису слід використати директиву EQU.
За допомогою Debug, відслідкувати правильність виконання програми (продемонструвати результати проміжних та кінцевих обчислень).
Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї.
Дати відповідь на контрольні запитання.
ВАРІАНТ ЗАВДАННЯ:
№
Вираз
K
7
X=A4/B2-C1*(D1+E2-K)
717
Лістинг програми:
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
K EQU 1815
A LABEL word
dd -1000000
B dw 2
C db -10
D db 15
E dw -10
Temp1 dw 00h
Temp2 dw 00h,00h
Res dw 00h
Temp3 dw 00h,00h
X dw 00h,00h
;X=A4/B2-C1*(D1+E2-K)
.CODE
go:
mov ax,@data
mov ds,ax
mov al,D
cbw
add ax,E
;Temp1 <- ax - K
sub ax, K
mov Temp1,ax
;#====================================[DIV]===============================;
;Temp2 <- A / B
xor cx,cx
xor bx,bx
test A+2,8000h
jnz inverF
mov cx,1 ;if A > 0
second:
test B,8000h
jnz inverS
mov bx,1 ;if B > 0
div_p:
mov ax,A+2
mov dx,1
mul dx
div B
mov Temp2+2,ax
mov ax,A
div B
mov Temp2,ax
mov Res,dx
sub bx,cx
jz next
jnz inverR
inverF:
mov ax, A
mov dx, A+2
not ax
not dx
add ax,1
adc dx,0
mov A,ax
mov A+2,dx
jmp second
inverS:
mov ax, B
not ax
add ax,1
mov B,ax
jmp div_p
inverR:
mov ax, Temp2
mov dx, Temp2+2
not ax
not dx
add ax,1
adc dx,0
mov Temp2,ax
mov Temp2+2,dx
jmp next
;#====================================[DIV]===============================;
;Temp3 <- C*Temp1
;#====================================[MUL]===============================;
next: mov al,C
cbw
;xor dx,dx
mov bx,ax
mov ax,Temp1
imul bx
mov Temp3,ax
mov Temp3+2,dx
;#====================================[MUL]===============================;
;X <- Temp2 - Temp3
clc
mov ax,Temp2
mov dx,Temp2+2
sub ax,Temp3
mov X,ax
sbb dx,Temp3+2
mov X+2,dx
mov ah,4Ch
int 21h
end go
Висновок і результати роботи програми:
Висновок: я навчився виконувати операції над цілими знаковими даними.
Використовувати стандартні функції для виконання цих операцій.