Ensamblaje del sistema numérico decimal, conversión binaria y hexadecimal
; Este programa está compilado y se ejecuta correctamente
Segmento de código
Asuma CS: Código, DS: Código
CR equ 000DH
LF equ 000AH
KBBack equ 0008H
; ----------------------- --------------------
; Función: Mostrar la cadena de la dirección especificada (Str_Addr)
;
; Str_Addr=Dirección de cadena (requerida en el segmento de datos)
Uso: Salida Str_Addr
; Ejemplo de uso: Salida PromptStr
Salida MACRO Str_Addr
lea dx, Str_Addr
mov ah, 9
int 21h
EndM
; ------------------------------------------------
Función: Salida Retorno de carro y avance de línea
Output_CTLF proc Cerca
empujar hacha
empujar dx
mov ah, 02h
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
-------------; --------- ------------------
Función: Obtener la posición del cursor
; Ninguno
; Salir: DH=número de fila, DL=número de columna
GetCursor Proc Near
PUSH AX
PUSH BX
p>PUSH CX
/p>
POP CX
POP BX
POP AX
RET
p>Cursor_Row DB ?
Cursor_Col DB?
GetCursor EndP
; --------------- -------------- --------------
; Establecer la posición del cursor
; Entrada: Cursor_Row=coordenada de fila;
ursor_Col: coordenada de columna)
SetCursor Proc Near
PUSH CX
PUSH BX
PUSH AX
MOV DH, Cursor_Row
MOV DL, Cursor_Col
XOR BX, BX
MOV AH, 2
INT 10H
POP AX
POP BX
POP CX
RET
SetCursor EndP
---; -------------------------------------------------- ------ de 2019----------
; Función: Entrada por teclado Un número decimal con un número específico de dígitos se convierte en un número binario y se almacena en el unidad de memoria especificada.
; Entrada: @@Digits=número de dígitos; di=guardar la primera dirección de los dígitos ingresados
; @@Type_Data=tipo de datos guardados, B=tipo de byte, W =Tipo de palabra.
; Salir: El número binario convertido se guarda en la unidad señalada por di
Input_Digit Proc Near
push dx
push cx.
empujar bx
empujar di
lea di, @@Save_Tmp
empujar di
cld p> p>
mov cl, @@Digits
xor ch, ch
push cx
@@Entrada: llamar a GetCursor;
p>mov ah, 1; acepta un carácter del teclado
int 21h
cmp al, CR; si se ingresa un retorno de carro, el número escrito es menor que N dígitos
jz @@ASC_Dec ; Ir a procesar el número que se ha escrito
cmp al, KBBack
jz @@KB_Back ; Si se devuelve la clave vacía, vuelva a ingresar
cmp al, '0'
jb @@KBBack; si es menor que el número '0', vuelva a ingresar
cmp al, '9'
ja @@KBBack; si es menor que el número '9', vuelva a ingresar
jmp @@Save_Dig
@@KB_Back: dec Cursor_Col
inc cx
dec di
@@KBBack: llamar a SetCursor y establecer la posición del cursor
jmp @@Input
@@Save_Dig: y al, 0fh; convertir a número binario
stosb; acepta el siguiente número
@@ASC_Dec: mov ax, cx
pop cx
pop si
sub cx, ax; número de dígitos realmente ingresados
xor bp, bp
xor dx, dx
xor ax, ax
jcxz @@Save_Ret; si presiona Enter directamente sin ingresar ningún número, se procesará como '0'
dec cx ; Disminuya el número de dígitos realmente ingresados en 1 y prepárese para convertir la cadena de dígitos ingresada en números binarios;
jcxz @@One_Digit ; Si el número ingresado tiene solo un dígito, transfiéralo a Guardar este número binario directamente
mov bx, 10
@@Mul_Ten: lodsb
cbw
agregar hacha, bp
mul bx
mov bp, ax
bucle @@ Mul_Ten
@@One_Digit: lodsb
cbw p>
agregar hacha, bp
@@Save_Ret: pop di
cmp @@Type_Data, 'B'; ¿tipo de byte?
jz$
5
stosw
jmp $ 3
stosb
pop bx
pop cx
pop dx
ret
@@Digits db ;El número de dígitos decimales
@@Type_Data db 'B' ;El tipo de datos guardados. B=tipo de byte, W=tipo de palabra
@@Save_Tmp db 16 dup(?)
Input_Digit EndP
------- - -------------------------------------------------- ----------------- de 4 Convertir un número binario en un código ASCII mostrado en formato hexadecimal
Entrada: AL
; Salir: AL=código ASCII convertido
AL_ASCII Proc Near
cmp al, 10; ALt;
jb @@To_ASCII; numéricamente
agregar al, 7; ALgt; =10, procesado como letras mayúsculas
@@To_ASCII: agregar al, '0'; >
ret
AL_ASCII EndP
;---------------------- --
¿Número dw?
prompt_One db 'Ingrese un número decimal (2-4 bits): $'
prompt_Two db 'El binario: $'
prompt_Thr db 'El heximal: $'
Inicio: push cs
pop ds
push cs
pop es ; Hacer que el segmento de datos, el segmento adicional y el segmento de código sean el mismo segmento
mov @@Digits, 4; Número de dígitos decimales
mov @@Type_Data, 'W' ; Tipo de datos guardados.
B=tipo de byte, W=tipo de palabra
Input_Deci: mensaje de salida_Uno; mensaje para ingresar un número decimal
lea di, Número de dirección de la variable
llame a Input_Digit; ingrese un número decimal con un número específico de dígitos en el teclado, conviértalo en un número binario y guárdelo en la unidad de memoria especificada
cmp Number, 10
jb Input_Deci; menos de 2 números decimales, vuelva a ingresar
llame a Output_CTLF; genere un retorno de carro y un avance de línea
llame a Output_CTLF; p>; ----- ------------------------------------------ ---------------------
; Convertir al número binario correspondiente
Salida request_Two
lea di, @@Save_Tmp[14]
mov palabra ptr [di], '$B'
mov ax, Número
@@L0: dec di
hacha de prueba, 0ffffh
jz @@L1
hacha shr, 1
jc $ 7
mov byte ptr [di], '0'
jmp @@L0
mov byte ptr [ di], '1'
jmp @@ L0
@@L1: inc di
mov dx, di
mov ah, 9
int 21h
; ------------------------------- ------------
; Convertir al número hexadecimal correspondiente
llamar a Output_CTLF; Generar un retorno de carro y un salto de línea
Salida request_Thr
mov ax, Number
lea di, @@Save_Tmp[14]
mov palabra ptr [di], '$H'
mov cl, 4
mov ax, Número
@@L2: dec di
prueba ax, 0ffffh
jz @@L3
mov bx, ax
shr bx, cl
y ax, 0fh
llaman a AL_ASCII; coloca AL en El número binario inferior de 4 dígitos se convierte en código ASCII que se muestra en formato hexadecimal.
mov [di], al
mov ax, bx
jmp @@ L2
@@L3: inc di p>
mov dx, di
mov ah, 9
int 21h
Exit_Proc: mov ah, 4ch finalizar programa
<; p>int 21hp>
Código FINALIZA
FIN Inicio La compilación termina aquí