Temas de microprogramación en lenguaje ensamblador
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
------- ---------- ---------- p >
; 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 p>
; 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 p>
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