МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет Львівська політехніка
Кафедра CАПР
До лабораторної роботи №8
З курсу “Архітектура комп’ютерів”
На тему:
“ Алгоритми виконання арифметичних операцій над багаторозрядними числами”.
Тема:
Алгоритми виконання арифметичних операцій над багаторозрядними числами
Мета:
Вивчити способи виконання арифметичних операцій над багаторозрядними числами.
__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Виконати завдання з лабораторної роботи №7. Дані вводити з клавіатури в ASCII форматі. Результати виводити на екран в десятковій системі числення. Передбачити неправильність введення чисел.
Для реалізації поставленого завдання була розроблена наступна програма:
.model tiny
.stack 256 ;б⥪ 256 Ў ©в
.code
org 100h
start:
mov ax,seg @data
mov ds,ax ;code segment initialize
mov dx,offset m1
mov ax,0900h
int 21h ;vuvodumo povidomlenna
;--------------------------------------
;Vvedenna
call StrtoInt
mov word ptr [dig1],ax
;--------------------------------------
call StrtoInt
mov word ptr [dig2],ax
;--------------------------------------
call StrtoInt
mov word ptr [dig3],ax
;--------------------------------------
call StrtoInt
mov word ptr [dig4],ax
;--------------------------------------
call StrtoInt
mov word ptr [dig5],ax
;--------------------------------------
call PrintCaret ;perevid karetku
;--------------------------
;clear registers
xor ax,ax
xor bx,bx
xor dx,dx
;--------------------------
;--------------------------
;pochatok obchuslenna
mov ax,word ptr[dig1]
mov bx,word ptr[dig2]
div bx
mov tempd,ax
mov ax,word ptr[dig3]
mov bx,word ptr[dig4]
mul bx
add ax,tempd
mov bx,word ptr[dig5]
sub ax,bx
;----------------------------
call Puts ;Vmist AX na ekran
mov ax,04c00h ;vuhid v dos
int 21h
puts:
push ax
mov bx,ax
xor si,si
mov ax,10000
mov word ptr [d],ax
mov cx,5 ;div digit to 10000,1000,100,10,1
n2:
xor dx,dx ;reset DX
mov ax,bx
div word ptr [d] ;dilumo na dilnuk
add al,'0'
mov byte ptr string[si],al
sub al,'0'
inc si
mul word ptr [d] ;mul na dilnuk
sub bx,ax
xor dx,dx
mov ax,word ptr [d]
div word ptr [ten]
mov word ptr [d],ax
loop n2 ;povt zukl
mov ax,0A0Dh
mov word ptr string[si],ax
inc si
inc si
mov al,24h
mov byte ptr string[si],al
mov dx,offset string
mov ax,0900h
int 21h
pop ax
ret
PrintCaret:
push ax
mov dx,offset crn
mov ax,0900h
int 21h
pop ax
ret
StrToInt: ;zcutyvanna strichku
mov dx,offset sm ;v DX vkaz steky
mov ah,0Ah
int 21h
call PrintCaret
xor cx,cx
mov cl,byte ptr ds:[dov]
cmp cx,0 ;perevirka strichku na nepr vvid
je error
xor si,si
xor bx,bx
xor dx,dx
mov di,cx
n1:
dec di
mov dl,byte ptr bs[di] ;read ASCII
sub dl,'0'
cmp dl,9 ;perevirka chu bilshe 9
ja error
mov ax,word ptr chn[si]
mul dx
add bx,ax
jc error
cmp dl,0
jne error
inc si
inc si
loop n1
mov ax,bx
ret
error:
mov dx,offset m2
mov ax,0900h
int 21h
jmp StrtoInt
dig1 dw 0
dig2 dw 0
dig3 dw 0
dig4 dw 0
dig5 dw 0
rez dw 0 ;rezultat
tempd dw 0 ;temp rez
sm db 6
dov db ?
bs db 6 dup (" ")
m1 db "Vvedit 5 zufr, enter nastypne dane",13, 10, 24h
m2 db "Pomulka!!!.Mojna vvodutu tilku zufru",13, 10, 24h
crn db 13,10,24h
chn dw 1,10,100,1000,10000
d dw 0
ten dw 10
string db 8 dup (" ")
end start
Висновок:
На протязі виконання лабораторної роботи я вивчив способи виконання арифметичних операцій над багаторозрядними числами, отримав практичні навички складання і налагодження програм з використанням різних арифметичних комадн команд, процесора і 8086 .