2591
.pdfjz ii3 |
|
jmp povtor_b2 |
|
ii3: |
|
mov field_b,0 |
;очистить поле |
mov field_b+1,0 |
|
mov field_b+2,0 |
|
mov field_b+3,0 |
|
povtor_b3: |
|
mov ah,09 |
; вывод сообщения 'Введите B3= ' |
mov osh_v,0 |
|
lea dx,s_b3 |
|
int 21h |
|
mov ah,0ah |
; ввод с клавиатуры значения B3 |
lea dx,vvod_b |
|
int 21h |
|
call ASCII_bin_b ; преобразование из кода ASCii в двоичный код mov b3,al
mov prom,0 call cursor cmp osh_v,0 jz ii4
jmp povtor_b3
ii4: |
|
mov field_b,0 |
;очистить поле |
mov field_b+1,0 |
|
mov field_b+2,0 |
|
mov field_b+3,0 |
|
povtor_w1: |
|
mov ah,09 |
; вывод сообщения 'Введите w1= ' |
mov osh_v,0 |
|
lea dx,s_w1 |
|
int 21h |
|
mov ah,0ah |
; ввод с клавиатуры значения w1 |
lea dx,vvod_w |
|
int 21h |
|
call ASCII_bin_w ; преобразование из кода ASCii в двоичный код mov word ptr w1,ax
91
mov prom,0 call cursor cmp osh_v,0 jz ii5
jmp povtor_w1
ii5: |
|
mov field_w,0 |
;очистить поле |
mov field_w+1,0 |
|
mov field_w+2,0 |
|
mov field_w+3,0 |
|
mov field_w+4,0 |
|
mov field_w+5,0 |
|
mov field_w+6,0 |
|
cmp x1,1 |
|
jz povtor_w2 |
|
cmp x1,2 |
|
jz ii6 |
|
povtor_w2: |
|
mov ah,09 |
; вывод сообщения 'Введите w2= ' |
mov osh_v,0 |
|
lea dx,s_w2 |
|
int 21h |
|
mov ah,0ah |
; ввод с клавиатуры значения w2 |
lea dx,vvod_w |
|
int 21h |
|
call ASCII_bin_w ; преобразование из кода ASCii в двоичный код mov word ptr w2,ax
mov prom,0 call cursor cmp osh_v,0 jz ii6
jmp povtor_w2
ii6: |
|
mov field_w,0 |
;очистить поле |
mov field_w+1,0 |
|
mov field_w+2,0 |
|
mov field_w+3,0 |
|
mov field_w+4,0 |
|
92
mov field_w+5,0 mov field_w+6,0
povtor_d1: |
|
mov ah,09 |
; вывод сообщения 'Введите d1= ' |
mov osh_v,0 |
|
lea dx,s_d1 |
|
int 21h |
|
mov ah,0ah |
; ввод с клавиатуры значения d1 |
lea dx,vvod_d |
|
int 21h |
|
call ASCII_bin_d ; преобразование из кода ASCii в двоичный код mov word ptr d1,ax
mov word ptr d1+2,dx mov word ptr promd,0 call cursor
cmp osh_v,0 jz ii7
jmp povtor_d1
ii7: |
|
mov field_d,0 |
;очистить поле |
mov field_d+1,0 |
|
mov field_d+2,0 |
|
mov field_d+3,0 |
|
mov field_d+4,0 |
|
mov field_d+5,0 |
|
mov field_d+6,0 |
|
mov field_d+7,0 |
|
mov field_d+8,0 |
|
cmp x1,2 |
|
jz povtor_d2 |
|
cmp x1,1 |
|
jz ii8 |
|
povtor_d2: |
|
mov ah,09 |
;вывод сообщения 'Введите d2= ' |
mov osh_v,0 |
|
lea dx,s_d2 |
|
int 21h |
|
|
93 |
mov ah,0ah |
; ввод с клавиатуры значения d2 |
lea dx,vvod_d |
|
int 21h |
|
call ASCII_bin_d ; преобразование из кода ASCii в двоичный код mov word ptr d2,ax
mov word ptr d2+2,dx mov word ptr promd,0 call cursor
cmp osh_v,0 jz ii8
jmp povtor_d2
ii8: |
|
mov field_d,0 |
;очистить поле |
mov field_d+1,0 |
|
mov field_d+2,0 |
|
mov field_d+3,0 |
|
mov field_d+4,0 |
|
mov field_d+5,0 |
|
mov field_d+6,0 |
|
mov field_d+7,0 |
|
mov field_d+8,0 |
|
mov al,x1 |
|
cmp al,1 |
|
jz f1 |
|
cmp al,2 |
|
jz f2 |
|
f2: |
|
call formula2 |
|
jmp fin |
|
f1:
;1.Выполним умножение w1*w2
mov ax,w1 |
;\ w1*w2 |
mul w2 |
;/ |
mov word ptr rez1,ax mov word ptr rez1[2],dx
;2.Выполним деление d1/b1
;xor ax,ax
;mov al,b1
;cbw
;mov bx,ax
94
;xor ax,ax
;mov ax,word ptr d1
;div bx
;mov word ptr rez2,ax xor ax,ax
xor dx,dx |
|
;\ |
|
xor bx,bx |
|
; \ |
|
mov ax,word ptr d1 |
; |
|d1/b1 |
|
mov dx,word ptr d1+2 |
; | |
||
mov bl,b1 |
|
; / |
|
div bx |
;/ |
|
|
mov word ptr rez2,ax mov word ptr rez2+2,dx
;4.выполним вычитание b2-b3 xor ax,ax
mov al,b2 sub al,b3
mov byte ptr rez3,al
;5.Выполним сложение rez1+rez2 xor ax,ax
xor bx,bx
mov ax,word ptr rez1 mov bx,word ptr rez1+2 add ax,word ptr rez2 adc bx,word ptr rez2+2 mov word ptr rez4,ax mov word ptr rez4+2,bx
;6.Выполним вычитание rez3-rez4 sub ax,word ptr rez3
sbb bx,word ptr rez3+2 mov word ptr rezult,ax mov word ptr rezult+2,bx
fin: |
|
|
call bin_ASCII |
|
|
mov ah,9 |
;\ |
|
lea dx,ascval |
; вывод на экран результата |
|
int 21h |
;/ |
|
mov ah,02 |
;\ |
| установка курсора |
mov bh,00 |
; \ |
| экран 0 |
mov dh,24 |
; |
управление курсором | строка 23 |
mov dl,00 |
; / |
| столбец 00 |
int 10h |
;/ |
| передача упр. в BIOS |
mov ah,09 |
|
|
|
|
95 |
lea dx,soob_vixod
int 21h |
|
mov ah,0 |
;–ожидание нажатия клавиши |
int 16h |
;/ |
ret
mainproc endp
ASCII_bin_b proc ;процедура перевода из ASCII в bin для байта (Вход: список параметров vvod_b должен быть заполнен; выход: al=число в bin)
xor ax,ax xor cx,cx mov prom,ax mov osh_v,al mov al,fact_b mov cl,al dec al
mov si,ax mov bx,1
met1_b:
mov al,field_b[si] cbw
cmp ax,30h jb error_b cmp ax,39h ja error_b and al,0fh mul bx add prom,ax mov ax,bx mov bx,10 mul bx mov bx,ax dec si
loop met1_b mov ax,prom jmp end_error_b
error_b:
call cursor mov ah,09h lea dx,oshibka_v int 21h
mov osh_v,1 end_error_b:
ret ASCII_bin_b endp
96
ASCII_bin_w proc |
;процедура перевода из ASCII в bin для слова (Вход: список |
параметров vvod_w должен быть заполнен; выход: ax=число в bin) |
|
xor ax,ax |
|
xor cx,cx |
|
mov prom,ax |
|
mov osh_v,al |
|
mov al,fact_w |
|
mov cl,al |
|
dec al |
|
mov si,ax |
|
mov bx,1 |
|
met1_w: |
|
mov al,field_w[si] |
|
cbw |
|
cmp ax,30h |
|
jb error_w |
|
cmp ax,39h |
|
ja error_w |
|
and al,0fh |
|
mul bx |
|
add prom,ax |
|
mov ax,bx |
|
mov bx,10 |
|
mul bx |
|
mov bx,ax |
|
dec si |
|
loop met1_w |
|
mov ax,prom |
|
jmp end_error_w |
|
error_w: |
|
call cursor |
|
mov ah,09h |
|
lea dx,oshibka_v |
|
int 21h |
|
mov osh_v,1 |
|
end_error_w: |
|
ret |
|
ASCII_bin_w endp |
|
ASCII_bin_d proc |
;процедура перевода из ASCII в bin для дв. слова для МП 8086 |
(Вход: список параметров vvod_d должен быть заполнен; выход: dx:ax=число в bin) xor ax,ax
xor bx,bx xor cx,cx xor dx,dx
mov word ptr promd,ax mov word ptr promd[2],ax
97
mov word ptr fml[2],ax mov word ptr fml,1 mov osh_v,al
mov al,fact_d mov cl,al dec al
mov si,ax met1_d:
mov bl,field_d[si] cmp bx,30h
jb error_d cmp bx,39h ja error_d and bl,0fh
mov dx,0 mov ax,0 abd1: cmp bl,0 jz abd2
add ax,word ptr fml adc dx,word ptr fml[2] dec bl
jmp abd1
abd2: add word ptr promd,ax adc word ptr promd[2],dx mov bl,9
mov dx,word ptr fml[2] mov ax, word ptr fml
abd3: cmp bl,0 jz abd4
add word ptr fml,ax adc word ptr fml[2],dx dec bl
jmp abd3
abd4:
dec si
loop met1_d
mov dx,word ptr promd[2] mov ax,word ptr promd jmp end_error_d
error_d:
call cursor mov ah,09h lea dx,oshibka_v int 21h
mov osh_v,1 end_error_d:
98
ret ASCII_bin_d endp
bin_ASCII proc |
;процедура перевода из bin в ASCII (Вход: rezult=число в bin; |
выход: ascval= число в ASCII) |
|
call clrascval |
;вызов процедуры очистки строковой переменной ascval |
lea si,ascval[19]
m1:
cmp word ptr rezult[6],0 jne m2
cmp word ptr rezult[4],0 jne m2
cmp word ptr rezult[2],0 jne m2
cmp word ptr rezult,10 jnb m2
mov ax,word ptr rezult or al,30h
mov [si],al dec si jmp m3
m2:
sub word ptr rezult,10 sbb word ptr rezult[2],0 sbb word ptr rezult[4],0 sbb word ptr rezult[6],0 add word ptr kol,1 adc word ptr kol[2],0 adc word ptr kol[4],0 adc word ptr kol[6],0 jmp m1
m3:
cmp word ptr kol[6],0 jne m4
cmp word ptr kol[4],0 jne m4
cmp word ptr kol[2],0 jne m4
cmp word ptr kol,0 jne m4
ret
m4:
mov ax,word ptr kol mov word ptr rezult,ax mov ax,word ptr kol[2] mov word ptr rezult[2],ax mov ax,word ptr kol[4]
99
mov word ptr rezult[4],ax mov ax,word ptr kol[6] mov word ptr rezult[6],ax mov word ptr kol,0 mov word ptr kol[2],0 mov word ptr kol[4],0 mov word ptr kol[6],0 jmp m1
bin_ASCII endp
clrascval proc mov cx,20 mov si,19
clr1: and ascval[si],30h dec si
loop clr1 ret
clrascval endp
cursor proc ;процедура перевода курсора на след. строку mov ah,09
lea dx,perevod_cursora int 21h
ret cursor endp
codesg ends end mainproc
===========================================================
; l_2_2zal.asm ЗАБИЯКИН АЛЕКСЕЙ ( Лабораторная работа №2, модуль 2)
extrn b1:byte,b2:byte,b3:byte,w1:word,d1:dword,d2:dword
extrn rez1:dword,rez2:dword,rez3:dword,rez4:dword,rezult:qword,ascval:byte extrn bin_ASCII:proc
public formula2
csg_mod segment para 'code'
assume cs:csg_mod,ds:csg_mod,ss:csg_mod formula2 proc
;b1 and b2 xor (w1 xor b3) or (d1 or d2)
;b1 and b2 mov al,b1 and al,b2
mov byte ptr rez1,al
100