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)
; p>
; 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 p>
FIN Inicio ;La compilación termina aquí