Red de conocimiento informático - Conocimiento sistemático - Ensamblaje del sistema numérico decimal, conversión binaria y hexadecimal

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>

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

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

mov dx, di

mov ah, 9

int 21h

Exit_Proc: mov ah, 4ch finalizar programa

<; p>int 21h

p>

Código FINALIZA

FIN Inicio La compilación termina aquí