¿Cómo utilizar el lenguaje ensamblador para controlar el movimiento de los gráficos mediante el teclado?
Instrucciones:
1. Este programa sólo reconoce tres teclas: la tecla del cursor hacia la izquierda, la tecla del cursor hacia la derecha y la tecla Esc
2. cursor Presione la tecla Mayús izquierda o la tecla Mayús derecha del cursor para realizar la función correspondiente; presione la tecla Esc para finalizar el programa.
; Este programa está compilado y se ejecuta correctamente
Segmento de código
Asuma CS: Code, DS: Code
; ------------------------------------------------- ---- de 2011 Cadena de dirección (Str_Addr)
; Entrada:
; Str_Addr=Dirección de cadena (requerida que esté en el segmento de datos)
; Uso: Salida Str_Addr p>
; Ejemplo de uso: Salida PromptStr
Salida MACRO Str_Addr
lea dx, Str_Addr
mov ah, 9
int 21h
Fin
------------------------; --------- -----------
Función: Establecer la posición del cursor
Entrada: Cursor_Row=coordenada de fila; 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
Cursor_Row DB 21
Cursor_Col DB 36 p>
SetCursor EndP
;---------------------------------- - ----——
KBEsc equ 11BH
KBLeft equ 4BH
KBRight equ 4DH
String db 'lt;-- --gt;$'
Inicio: push cs
pop ds
push cs
pop es; segmento adicional y segmento de código en el mismo segmento
xor bh, bh
mov ah, 8 Lee los caracteres y atributos en la posición del cursor
int 10h<; /p>
mov bh, ah; guarda los valores de los atributos de caracteres
Disp_Str: llama a SetCursor; establece la posición del cursor
muestra una cadena; p>Read_Key: xor ah, ah
int 16h; Recibir clave
cmp ax, K
BEsc; Esc?
jz Exit_Proc; Finaliza el programa y regresa al sistema operativo
cmp ah, KBLeft;
jnz $ 10; No, gira para ver si haces clic derecho
mov word ptr Inc_or_Dec, 0efeh Sí, el número de columna actual se reduce en 1
<; p> jmp Cursor_move p>cmp ah, KBRight;
jnz Read_Key; No, recibe la siguiente pulsación de tecla
mov word ptr Inc_or_Dec, 06feh; Sí, agrega 1 al número de columna actual
Cursor_move: mov bl , ah ;Guardar la dirección de la tecla
push bx
xor bh, bh
mov ah, 3 ;Obtener la posición actual del cursor y las coordenadas de la posición inferior esquina derecha de la ventana
int 10h
pop bx
inc dl; número de columna más 1
mov ch, Cursor_Row; número en la esquina superior izquierda de la ventana
mov cl, Cursor_Col; número de columna en la esquina superior izquierda de la ventana
.IF bl == KBLeft amp; ; Presione el botón izquierdo, pero ha llegado al extremo izquierdo y no se mueve
jmp Read_Key
.ENDIF
.IF bl == KBRight amp; amp; dl == 79; presiona el botón derecho, pero ha llegado al extremo derecho y no se mueve
p>jmp Read_Key
.ENDIF
mov ah, 7; desplazarse hacia abajo en la ventana para mostrar el contenido
mov al, 1; desplazarse hacia abajo una línea
p>int 10h
Inc_or_Dec: inc Cursor_Col; reste 1 o agregue 1 al número de columna actual
jmp Disp_Str
Exit_Proc: mov ah, 4ch End program
int 21h
Código FINALIZA
FIN Inicio; la compilación termina aquí