Red de conocimiento informático - Conocimiento sistemático - Temas de microprogramación en lenguaje ensamblador

Temas de microprogramación en lenguaje ensamblador

; Este programa compila, depura y ejecuta correctamente en el entorno integrado MASMPlus 1.2.

Segmento de código

Supongamos CS: código, DS: código

CR es igual a 000DH

LF es igual a 000AH

KBBack es igual a 0008H

; - ---------- ---------- ------

; : muestra Cadena que especifica la dirección (Str_Addr)

; Entrada:

; Str_Addr = dirección de cadena (requerida en el segmento de datos)

;

; Ejemplo de uso: Salida PromptStr

Salida MACRO Str_Addr

lea dx,Str_Addr

mov ah,9

int 21h

EndM

------- ---------- ----------

; Función: Generar un carácter

; Entrada: dl= carácter que se mostrará

Output_Chr proc Cerca de

push ax

mov ah,02h

int 21h

pop ax

ret

Output_Chr endp

- ------- ---------- ---------

función: salida de avance de línea de retorno de carro

Proceso Output_CTLF Cerca

empujar hacha

empujar dx

mov ah,02h

mov dl,0dh

int 21h

mov dl,0ah

int 21h

pop dx

pop hacha

ret

Salida_CTLF endp

----- ---------- ---------- --

; Obtener posición del cursor

; Entrada: Ninguna

Salir: DH= número de línea, DL= número de columna

GetCursor Proc Near

EMPUJAR AX

EMPUJAR BX

EMPUJAR CX

EMPUJAR DX

XOR BX,BX

MOV AH , 3

INT 10H

MOV Cursor_Row,DH

MOV Cursor_Col,DL

POP DX

POP CX

POP BX

POP AX

RET

Cursor_Row DB ?

Cursor_Col DB ?

GetCursor EndP

------- ---------- ----------

; Establecer posición del cursor

; Entrada: Cursor_Row= coordenada de fila; Cursor_Col:

Establecer cursor Proc cerca

PUSH DX

PUSH CX

p>

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

POP DX

RET

SetCursor EndP

;------ ---------- ---------- ---------- -

; Función: Ingrese un número binario con dígitos específicos en el teclado Conviértalo en un número binario y guárdelo en el registro AX

Dado que el tipo de datos máximo está limitado a palabras, el número máximo de dígitos para un número binario es 16 y el número máximo de. los dígitos sin signo son: 0FFFFH

; Restricciones: el retorno de carro directo se trata como el número 0

; Entrada: @@Hexadec= número de dígitos

; : El número binario convertido se almacena en el registro In AX

Input_Bin Proc Near

push cx

push bx

mov cx,cs : @@Bin_Bits;Bits binarios

xor bx,bx; valor inicial del número binario

@@Input_Bin: Llama a GetCursor para obtener la posición del cursor

mov ah; ,1; Aceptar caracteres del teclado

int 21h

cmp al,CR ; Los caracteres hexadecimales escritos tienen menos de N dígitos

jz @@Return_Bin

cmp al,KBBack ;¿Devolver una clave nula?

jz @@KB_Back ;Sí, vuelve a escribir

cmp al,'0' ;¿Debajo del número '0'?

jb @@KBBack ;sí, vuelve a escribir

cmp al,'1' ;¿encima del número '1'?

ja @@KBBack ;sí, vuelve a escribir

y al,0fh ;Convertir a binario

shl bx,1 ;Desplazar 1 bit a la izquierda

o bl,al ;Agregar el número que acaba de escribir

bucle @@Input_Bin ;Aceptar el siguiente número

@ Return_Bin: mov ax,bx

pop bx

pop cx

ret

@@KB_Back: dec Cursor_Col

inc cx

@@KBBack: llamar a SetCursor ;Establece la posición del cursor.

jmp @@Input_Bin

@@Bin_Bits dw ; Número de bits

Input_Bin EndP

------- ---------- ----- - ----

Función: Convertir el número binario inferior de 4 dígitos en AL a código ASCII para visualización hexadecimal

; Entrada: AL

; Salir: AL=Código ASCII convertido

AL_ASCII Proc Near

cmp al,10 ;AL<10?

jb @@To_ASCII ;AL <10, procesado como números

sumar

al,7 ;AL>=10, tratado como letras mayúsculas

@@To_ASCII: agregar al,'0' ;Convertir al número o letra mayúscula correspondiente

ret

AL_ASCII EndP

--------- ---------- --------

; : Convierte los datos de bytes en AL a código ASCII y los muestra en formato hexadecimal

; Entrada: AL

; Salida: AX= código ASCII convertido

Byte_ASCII; cierre del programa

Empuje cx

mov cx,4

xor ah,ah ;Establezca AH en 0

shl ax,cl ; Desplazar AX 4 bits hacia la izquierda

shr al,cl ; Desplazar AL hacia la derecha 4 bits

xchg ah,al

Llamar a AL_ASCII Llamar a una subrutina para convertir; el valor en AL al código ASCII correspondiente

xchg ah,al

Llamar AL_ ASCII

xchg ah,al

pop cx

ret

Byte_ASCII EndP

---- ---------- ------ ---- - --

Función: convierte los datos de bytes en AL a código ASCII de visualización hexadecimal y lo muestra en la posición actual del cursor

; ; Salir: AX= código ASCII convertido

ByteD_ASCII Proc Near

push dx

push ax

Llame a Byte_ASCII; bytes en AL a hexadecimal y muestra el código ASCII

cmp al,'9'

jbe $+7

mov dl,'0'

llamar a Output_Chr ;mostrar un carácter

mov dl,al

llamar a Output_Chr ;mostrar un carácter

mov dl,ah

llamar a Output_Chr ;mostrar un carácter

mov dl,'H

llamar a Output_Chr ;mostrar un carácter

pop ax

pop dx

ret

ByteD_ASCII EndP

-- ---------- ---------- -- -------- -----

Función: Convierte datos de palabras en código AX a ASCII para que la posición actual del cursor se muestre en hexadecimal

; Entrada: AX

WordD_ASCII Proc Near

Push dx

Push ax

Push ax

xchg ah, al

Llame a Byte_ASCII; convierta el número de bytes en AL al código ASCII mostrado en formato hexadecimal

cmp al,'9'

jbe $+7

mov dl,'0'

Llamar a Output_Chr; mostrar un carácter

mov dl,al

llamar

Output_Chr ;muestra un carácter

mov dl,ah

llama a Output_Chr ;muestra un carácter

pop ax

llama a Byte_ASCII ;será AL Convierta el número de bytes a visualización hexadecimal ASCII

mov dl,al

llame a Output_Chr; muestre un carácter

mov dl,ah

p >

llamar a Output_Chr ;mostrar un carácter

mov dl,'H'

llamar a Output_Chr ;mostrar un carácter

pop ax

pop dx

ret

WordD_ ASCII EndP

-------- ---------- - - -------- ---------

Pregunta _Bin db 'Ingrese un número binario de 16 bits: $'

Pregunta_Hex db 13,10 , 'El hexadecimal es $'

Press_Key db 7,13,10,13,10,'El complacido. Presione cualquier tecla para salir...$'

; ------ ---------- ---------- --------

Inicio: presionar cs

pop ds

push cs

pop es

Salida Prompt_Bin; Solicita un número binario de 16 bits

mov @ @Bin_Bits ,16 ;Número de dígitos

call Input_Bin ;El teclado ingresa el número de dígitos especificado como un número binario, que se convierte en un número binario y se guarda en AX. Convierte un número binario a un número de sistema hexadecimal y lo guarda. en el registro AX

push ax

Salida Prompt_Hex; mensaje para mostrar el número hexadecimal

pop ax

mov dx,ax

p>

Llame a WordD_ASCII; convierta los datos de la palabra en AX al código ASCII mostrado en hexadecimal y muéstrelo en la posición actual del cursor

--- ----- ------ ---- ---------- ---------

Exit_ Proc: Salida Press_Key Indica que la operación se completó, presione cualquier tecla para finalizar el programa;

mov ah,1

int 21h

mov ah,4ch ;fin de programa

int 21h

Código ENDS

END Inicio ;compilación Fin del programa

int 21h

Código ENDS

END Inicio