Материал: 1328

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

lea

dx,soobform62

int

21h

;call stroka

lea

dx,soobform3

int

21h

;call stroka

lea

dx,soobform4

int

21h

;call stroka

lea

dx,soobform5

int

21h

;call stroka

lea

dx,soobform6

int

21h

;call stroka add ln,11 ret

himess endp

;************************************************************************ ; Процедура вычисления по формуле b1*b2*b3-d1/b3+w1+w2 ;************************************************************************

form1 proc

 

 

; Вычисление w1+w2:

 

 

xor

dx,dx

;dx=0

 

mov

ax,w1

;ax=w1

 

add

ax,w2

;ax =ax+w2=w1+w2

 

adc

dx,0

;dx=dx+0+CF

 

mov

word ptr rezult,ax

;(dx:ax)= w1+w2

 

 

 

mov

word ptr rezult+2,dx

;результат в rezult

; Вычисление b1*b2*b3

 

 

mov

al,b1

;al=b1

 

mul

b2

;ax=al*b2=b1*b2

 

mov

bl,b3

;bl=b3

 

xor

bh,bh

;bx=bl=b3

 

mul

bx

;(dx:ax)=ax*bx=b1*b2*b3

 

mov

word ptr res, ax

 

 

mov

word ptr res+2, dx

; результат в res

;

Вычисление d1/b3

 

 

mov

ax,word ptr d1

 

 

mov

dx,word ptr d1+2

 

 

mov

bL,b3

 

 

xor

bh,bh

 

 

div

bx

;(dx:ax)/bx

 

 

 

;частное в ax, остаток в dx

; можно по-другому: div bl

;ax/bl

 

mov

res1w,ax

; но частное в al, а остаток в ah

 

 

;

Вычисление res (b1*b2*b3) - d1/b3

 

 

 

 

76

 

mov

ax,word ptr res

 

 

mov

dx,word ptr res+2

;(dx:ax)=res

 

sub

ax,res1w

;ax=ax-res1w

 

sub

dx,0

 

;dx=dx-0-CF

;

mov

word ptr res,ax

;(dx:ax)= res - res1w

 

;

mov

word ptr res+2,dx

 

; Вычисление (b1*b2*b3-d1/b3) +

(w1+w2)

 

add

ax,word

ptr rezult

 

 

adc dx,word

ptr rezult+2

;прибавляем к (dx:ax) rezult

;

mov

word ptr rezult,ax

т.е. w1+w1

 

; заносим результат в rezult

 

mov

word ptr rezult+2,dx

 

; в итоге результат хранится в ячейке rezult (двойное слово) ret

form1 endp

;************************************************************************* ; Ввод и преобразование номера формулы (числа X) ;*************************************************************************

entx proc

 

 

 

 

 

Xb:

mov

ah,09

; вывод приглашения

 

 

lea

dx,soobformnum

 

 

 

 

int

21h

 

 

 

 

mov

ah,0Ah

; ввод с клавиатуры X

 

lea

dx,namepar_b

 

 

 

 

int

21h

 

 

 

 

call

stroka

 

 

 

 

call

asc2bin_byte

;перевод из ASCII в bin

 

xor

ax,ax

;переносим переведённый байт в X

 

mov

al,byte ptr binval_b

 

 

 

 

mov

X,al

 

 

 

;

mov

al,b1

;b1 сравниваем с 127

 

 

;

cmp

al,127

 

 

 

 

;

ja

Xm

 

;если >, то на метку Хm

e

Xm:

jmp

Xe

;если <= , то на метку Х

mov

ah,09

;вывод на экран

 

 

lea

dx,strerr1

;сообщения об ошибке

 

int

21h

 

 

 

Xe:

jmp

Xb

;переход на Xb

 

 

 

 

 

 

ret entx endp

;================================================================

;Процедура перевода из двоичного в ASCII

;(исправлено для перевода двойного слова...)

;чтобы преревести четверное, надо раскомментировать строчки

;================================================================

bin2asc proc

77

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

; выход из процедуры bin2asc

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]

;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

bin2asc endp

78

clrascval proc mov cx,20 mov si,19

clr1: and ascval[si],30h dec si

loop clr1 ret

clrascval endp

;=================================================================

asc2bin_byte proc

;процедура перевода из ASCII в bin для байта

mov

mult10,1

 

mov

binval_b,0

 

xor

ax,ax

 

xor

dx,dx

 

mov

cx,10

; фактор умножения

lea

si,namefld_b – 1

; адрес ascval

mov

bl,faktlen_b

; длина ascval

mov

bh,0

 

a21:

 

 

mov

al,[si+bx]

; выбрать ASCII-символ

and

ax,000Fh

; очистить зону тройки

mul

mult10

; умножить на фактор 10

add

binval_b,ax

; прибавить к двоичному

mov

ax,mult10

; вычислить следующий

mul

cx

; фактор умножения

mov

mult10,ax

 

dec

bx

; последний. ASCII-символ?

jnz

a21

; нет - продолжить

ret

 

 

asc2bin_byte endp

;================================================================

asc2bin_word proc

;процедура перевода из ASCII в bin для слова

mov

mult10,1

 

mov

binval_w,0

 

xor

ax,ax

 

xor

dx,dx

 

mov

cx,10

; фактор умножения

lea

si,namefld_w – 1

; адрес ascval

mov

bl,faktlen_w

; длина ascval

mov

bh,0

 

b20:

 

 

mov

al,[si+bx]

; выбрать ASCII-символ

and

ax,000Fh

; очистить зону тройки

mul

mult10

; умножить на фактор 10

add

binval_w,ax

; прибавить к двоичному

mov

ax,mult10

; вычислить следующий

mul

cx

; фактор умножения

mov

mult10,ax

 

 

 

79

dec

bx

; последний. ASCII-символ?

jnz

b20

; нет - продолжить

ret asc2bin_word endp

;================================================================

asc2bin_dword proc

 

 

 

 

 

 

;процедура перевода из ASCII в bin для двойного слова

comment @

mov

mult10,1

 

 

 

mov

binval_d,0

 

 

 

 

 

 

xor

ax,ax

 

 

 

 

 

 

 

 

 

 

 

 

xor

dx,dx

 

 

 

 

 

 

 

 

 

 

 

 

mov

cx,10

 

 

 

 

 

 

 

 

 

 

 

 

lea si,namefld_d-1

 

 

 

mov

bl,faktlen_d

 

 

 

 

mov

bh,0

 

 

 

 

 

 

 

 

 

abd20:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mov

al,[si+bx]

 

 

 

 

and

ax,000fh

 

 

 

 

 

mov

DI,mult10

 

 

 

 

mul

DI

 

 

 

 

 

 

 

 

 

;mul mult10

add word ptr binval_d,ax adc word ptr binval_d+2,dx

mov

ax,mult10

mul

cx

 

 

mov

 

 

mult10,ax

dec

bx

 

 

jnz

abd20

 

ret

 

 

 

 

 

@

xor ax,ax xor bx,bx xor cx,cx xor dx,dx

mov word ptr binval_d,ax mov word ptr binval_d[2],ax mov word ptr mult10[2],ax mov word ptr mult10,1 mov al,faktlen_d

mov cl,al dec al mov si,ax

met1_d: mov bl,namefld_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

80

Источник: https://studfile.net/preview/16407385/