mov al,b1 mov ah,0 cbw
mov bx,ax
mov ax,word ptr d1 mov dx,word ptr d1+2 idiv bx
mov rez_2,ax
xor ax,ax xor bx,bx xor dx,dx mov al,b2 cbw
mov bx,ax xor ax,ax mov al,b3 cbw
add ax,bx add ax,w3 mov rez_3,ax
xor ax,ax xor bx,bx xor dx,dx
mov ax,word ptr rez_1 mov dx,word ptr rez_1+2 mov bx,rez_2
add ax,bx adc dx,cx
mov bx,rez_3 sub ax,bx sbb dx,cx
mov word ptr rezult,ax mov word ptr rezult[2],dx mov ten,0
call bin_ascii xor ax,ax mov ah,09h lea dx,ascval int 21h
call cursor
;al:=b1
;ah:=0
;ax:=b1
;bx:=b1
;поместить первую d1 часть в ax ;поместить вторую d1 часть в dx ;d1/b1, целая часть в ax, остаток в dx
;rez_2:=d1/b1
;al:=b2
;ax:=b2
;bx:=b2
;ax:=0
;al:=b3
;ax:=b3
;ax:=b1+b3
;ax:=w3+b1+b3 ;rez_3:=w3+b1+b3
;ax:=rez_1 ;dx:=rez_1+2 ;bx:=rez_2
;ax:=ax+bx, с переносом ;dx:=dx+cx
;bx:=rez_3 ;ax:=ax-bx, с заемом ;dx:=dx-cx
111
mov ah,09h |
;функция вывода на экран |
|
lea dx,soobe_1 |
;загрузить адрес начала сообщения в dx |
|
int 21h |
|
;передача управления в DOS |
call cursor |
;вызов процедуры перевода курсора |
|
mov ah,09h |
;функция вывода на экран |
|
lea dx,soobe_2 |
;загрузить адрес начала сообщения в dx |
|
int 21h |
|
;передача управления в DOS |
call cursor |
;вызов процедуры перевода курсора |
|
vvod_e: |
mov ah,0ah |
|
lea dx,namepar int 21h
xor ax,ax
lea si,namefld mov al,[si] and al,00fh mov binval,ax call cursor
cmp binval,1 je jump cmp binval,2 je dos
mov ah,09h
lea dx,soob0_err int 21h
call cursor jmp vvod_e
jump: jmp beg
dos: RET ;возврат в DOS
begin endp ;********************************************************************* ; PROCEDURE ;*********************************************************************
cursor proc |
;\ |
|
|начало процедуры |
mov ah,02 |
; \ |
|установка курсора |
|
mov bh,00 |
; |
\ |
|номер экрана |
mov dh,num_ln |
; процедура |номер строки |
||
inc num_ln |
; |
перевода |
|увеличение номера строки на 1 |
mov dl,00 |
; |
курсора |
|номер столбца |
int 10h |
; |
/ |
|передача управления в BIOS |
|
|
|
112 |
ret |
; / |
|возврат в основную программу |
cursor endp |
;/ |
|конец прцедуры |
;*************************************************************************** symbol_w proc ;процедура проверки на введение символьной переменной для слова
mov err,1 |
|
|
xor ax,ax |
|
|
xor cx,cx |
|
|
mov al,faktlen_w |
|
|
mov cl,al |
|
|
dec al |
|
|
mov si,ax |
|
|
turn_w: |
mov al,namefld_w[si] |
|
cbw |
|
|
cmp ax,30h |
|
|
jb error_w |
;если ASCII < 30h, то переход на метку error_w |
|
cmp ax,39h |
|
|
ja error_w |
;если ASCII > 39h, то переход на метку error_w |
|
dec si |
|
|
loop turn_w |
|
|
jmp gw |
;переход на метку gw |
|
error_w: call cursor |
|
|
mov ah,09h |
;вывод сообщения об ошибке |
|
lea dx,soob_error |
|
|
int 21h |
|
|
call cursor |
|
|
mov err,0 |
;err=0 |
|
gw: ret |
|
|
symbol_w endp |
|
|
;***************************************************************************
symbol_d proc |
;процедура проверки на введение символьной переменной |
; |
для двойного слова |
mov err,1 |
|
xor ax,ax |
|
xor cx,cx |
|
mov al,faktlen_d |
|
mov cx,ax |
|
dec al |
|
mov si,ax |
|
turn_d:mov al,namefld_d[si] |
|
cbw |
|
cmp ax,30h |
|
jb error_d |
;если ASCII < 30h, то переход на метку error_d |
cmp ax,39h |
|
ja error_d |
;если ASCII > 39h, то переход на метку error_d |
dec si |
|
loop turn_d |
|
jmp gd |
;переход на метку gd |
error_d: call cursor |
|
|
113 |
|
mov ah,09h |
;вывод сообщения об ошибке |
|
lea dx,soob_error |
|
|
int 21h |
|
|
call cursor |
|
|
mov err,0 |
;err=0 |
gd: |
ret |
|
symbol_d endp ;***************************************************************************
symbol_b proc |
;процедура проверки на введение символьной переменной для байта |
mov err,1 |
|
xor ax,ax |
|
xor cx,cx |
|
mov al,faktlen_b |
|
mov cx,ax |
|
dec al |
|
|
mov si,ax |
|
turn_b:mov al,namefld_b[si] |
|
|
|
cbw |
|
|
cmp ax,30h |
|
|
jb error_b |
;если ASCII < 30h, то переход на метку error_b |
|
cmp ax,39h |
|
|
ja error_b |
;если ASCII > 39h, то переход на метку error_b |
|
dec si |
|
|
loop turn_b |
|
|
jmp gb |
;переход на метку gb |
error_b: call cursor |
|
|
|
mov ah,09h |
;вывод сообщения об ошибке |
|
lea dx,soob_error |
|
|
int 21h |
|
|
call cursor |
|
|
mov err,0 |
;err=0 |
gb: |
ret |
|
symbol_b endp |
|
|
;***************************************************************************
ASCII_binb 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 |
|
; прибавить к двоичному |
|
|
|
114 |
MOV |
AX,MULT10 |
; вычислить следующий |
MUL |
CX |
; фактор умножения |
MOV |
MULT10,AX |
|
DEC |
BX |
; последний. ASCII-символ? |
JNZ |
A21 |
; нет – продолжить |
ret |
|
|
ASCII_binb ENDP ;***************************************************************************
ASCII_binw 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 |
|
DEC |
BX |
; последний. ASCII-символ? |
JNZ |
B20 |
; если нет – продолжить |
ret |
|
|
ASCII_binw ENDP ;***************************************************************************
ascii_bind proc |
;процедура перевода из ASCII в bin для двойного слова |
|
mov mult10,1 |
|
|
mov word ptr BINVAL_d,0 |
||
mov word ptr BINVAL_d[2],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 |
|
mul |
mult10 |
|
add word ptr binval_d,ax |
||
adc word ptr binval_d+2,dx |
||
mov |
ax,mult10 |
|
mul |
cx |
|
|
|
115 |