BIN2ASC proc
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]
;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
76
jmp m1 BIN2ASC endp
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 |
|
|
77 |
ADD |
BINVAL_w,AX |
; прибавить к двоичному |
MOV |
AX,MULT10 |
; вычислить следующий |
MUL |
CX |
; фактор умножения |
MOV |
MULT10,AX |
|
DEC |
BX |
; последний. ASCII-символ? |
JNZ |
B20 |
; нет – продолжить |
ret
ASC2BIN_WORD ENDP
;==================================================================
ASC2BIN_dword proc ;процедура перевода из ASCII в bin для двойного слова 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 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
ASC2BIN_dword endp
;*************************************************************************** ;перевод из ASCII в bin числа b1
;***************************************************************************
ENTB1 PROC |
|
B1B: |
|
; |
вывод сообщения 'b1= ' |
mov ah,09 |
|
lea dx,soob2 |
|
int 21h |
|
; |
ввод с клавиатуры b1 |
mov ah,0Ah |
|
lea dx,NAMEPAR_b |
|
int 21h |
|
CALL STROKA |
|
call ASC2BIN_BYTE |
;перевод из ASCII в bin |
|
78 |
xor ax,ax |
;переносим переведённый байт в b1 |
mov al,byte ptr binval_b |
|
mov b1,al |
|
mov al,b1 |
; В1 сравниваем с 127 |
cmp al,127 |
|
ja B1M |
; если > , то на метку osi |
jmp B1E |
; если <= , то на метку www |
B1M: |
|
mov ah,09 |
;вывод на экран |
lea dx,STRERR1 |
;сообщения об ошибке |
int 21h |
|
jmp B1B |
; переход на QQ1 |
B1E: |
|
RET |
|
ENTB1 ENDP
;*************************************************************************** ; перевод из ASCII в bin числа b2 ;***************************************************************************
ENTB2 PROC |
|
|
B2B: |
|
|
mov ah,09 |
; вывод сообщения 'b2= ' |
|
lea dx,soob3 |
|
|
int 21h |
|
|
; |
|
ввод с клавиатуры b2 |
mov ah,0Ah |
|
|
lea dx,NAMEPAR_b |
|
|
int 21h |
|
|
; |
mov mult10,1 |
|
CALL STROKA |
|
|
call ASC2BIN_BYTE |
;перевод из ASCII в bin |
|
xor ax,ax |
|
;переносим переведённый байт в b2 |
mov al,byte ptr binval_b |
|
|
mov b2,al |
|
|
mov al,b2 |
|
;В2 сравниваем с 127 |
cmp al,127 |
|
|
ja B2M |
|
;если >, то на метку ooo |
jmp B2E |
|
;если <=, то на метку iii |
B2M: |
|
|
mov ah,09 |
|
;вывод на экран |
lea dx,STRERR1 |
;сообщения об ошибке |
|
int 21h |
|
|
jmp B2B |
|
; переход на o1o |
B2E: |
|
|
RET |
|
|
|
|
79 |
ENTB2 ENDP
;*************************************************************************** ; перевод из ASCII в bin числа b3 ;***************************************************************************
ENTB3 PROC |
|
|
B3B: |
|
|
mov ah,09 |
; вывод сообщения 'b3= ' |
|
lea dx,soob4 |
|
|
int 21h |
|
|
; |
|
ввод с клавиатуры b3 |
mov ah,0Ah |
|
|
lea dx,NAMEPAR_b |
|
|
int 21h |
|
|
CALL STROKA |
|
|
;mov mult10,1 |
|
|
; |
перевод из ASCII в bin |
|
call ASC2BIN_BYTE |
|
|
; |
переносим переведённый байт в b3 |
|
xor ax,ax |
|
|
mov al,byte ptr binval_b |
|
|
mov b3,al |
|
|
mov al,b3 |
|
; В3 сравниваем с 127 |
cmp al,127 |
|
|
ja B3M |
|
; если >, то на метку ooo1 |
jmp B3E |
|
; если <= , то на метку iii1 |
B3M: |
|
|
mov ah,09 |
|
; вывод на экран |
lea dx,STRERR1 |
; сообщения об ошибке |
|
int 21h |
|
|
jmp B3B |
|
; переход на o2o |
B3E: |
|
|
RET ENTB3 ENDP
;*************************************************************************** ; перевод из ASCII в bin числа b13 ;***************************************************************************
ENTB13 PROC |
|
B13B: |
|
; |
вывод сообщения 'b13= ' |
mov ah,09 |
|
lea dx,soob13 |
|
int 21h |
|
; |
ввод с клавиатуры b13 |
mov ah,0Ah |
|
lea dx,NAMEPAR_b |
|
int 21h |
|
CALL STROKA |
80 |
|