Red de conocimiento del abogados - Respuesta jurídica de la empresa - Cómo usar el lenguaje ensamblador para controlar el volumen (es decir, presionar las teclas arriba y abajo para hacer el sonido más alto y más bajo) y silenciar en DOS

Cómo usar el lenguaje ensamblador para controlar el volumen (es decir, presionar las teclas arriba y abajo para hacer el sonido más alto y más bajo) y silenciar en DOS

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

Supongamos CS:Code,DS:Code

; ------------------------------------------------ de de 2011 Cadena de dirección (Str_Addr)

; Entrada:

; Str_Addr=Dirección de cadena (requerida para estar en el segmento de datos)

;

; Ejemplo de uso: Salida PromptStr

Salida MACRO Str_Addr

lea dx,Str_Addr

mov ah,9

int 21h

FinM

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

; Función: Establecer la posición del cursor

; Entrada: Cursor_Row=coordenada de fila ; Cursor_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

Cursor_Row DB 21

Cursor_Col DB 36

SetCursor EndP

;————————————————————————————————— ———————————————————————————

KBEsc equ 11BH

KBLeft equ 4BH

KBRight equ 4DH

Cadena db '<---->$'

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

xor bh,bh

mov ah,8 ;Leer el carácter y los atributos en la posición del cursor

int 10h

mov bh,ah ;Guardar el valor del atributo del carácter

p>

Disp_Str: llamar a SetCursor ;Establecer la posición del cursor

Cadena de salida ;Mostrar una cadena

Read_Key: xor ah,ah

int 16h Recibir pulsaciones de teclas

cmp; ax,KBEsc ;Esc?

jz Exit_Proc ;Finalizar el programa y volver al sistema operativo

cmp ah,KBLeft ;Flecha izquierda?

jnz $+10 ;No

Sí, ve a ver si haces clic derecho

mov word ptr Inc_or_Dec,0efeh ;Sí, el número de columna actual se reduce en 1

jmp Cursor_move

cmp Ah, KBDerecha; ¿flecha derecha?

jnz Read_Key ;No, recibe la siguiente pulsación de tecla

mov word ptr Inc_or_Dec,06feh ;Sí, suma 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 ;Aumenta el número de columna en 1

mov ch,Cursor_Row ;El número de fila 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 && cl = = 0 ;Presiona el botón izquierdo, pero ha llegado al extremo izquierdo y no se mueve

jmp Read_Key

.ENDIF

.IF bl == KBRight && dl == 79 ;Presiona el botón derecho, pero ha llegado al extremo derecho y no se mueve

jmp Read_Key

.ENDIF

mov ah, 7 ;Desplácese hacia abajo en el contenido de visualización de la ventana

mov al,1 ;Desplácese hacia abajo una línea

int 10h

Inc_or_Dec: inc Cursor_Col Reste o agregue 1 a; el número de columna actual

jmp Disp_Str

Exit_Proc: mov ah,4ch;Finalizar el programa

int 21h

Código FINALIZA

FIN Inicio ;La compilación termina aquí