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