Red de conocimiento informático - Conocimiento sistemático - ¿Cómo utilizar el lenguaje ensamblador para controlar el movimiento de los gráficos mediante el teclado?

¿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

; 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

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í