Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2591

.pdf
Скачиваний:
2
Добавлен:
07.01.2021
Размер:
25.15 Mб
Скачать

jz 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]