22-12-2010, 17:41
Boas,
Queria desactivar 6 teclas(P,R,4,ESC,DEL,4) do teclado em ms-dos
criando um executável em assembly.
Da-me um erro(linha que esta a negrito) a compilar com o masm32 o código é este:
KB_DATA EQU 60H
KB_CTRL EQU 61H
EOI EQU 20H
INT_CTRL_PORT EQU 20H
R_KEY EQU 83 ; codigo para a tecla "r"
;
CODE SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CODE
ORG 44
ENVIRON DW ?
ORG 100H
BEGIN: JMP INITIALIZE
OLD_INT_9H LABEL DWORD
OLD_KBD_INT DW 2 DUP (?)
;
CTRLALT PROC NEAR
STI
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH DS
PUSH ES
IN AL,KB_DATA
CMP AL,R_KEY
JNE CA4
MOV AH,2
INT 16H
JNE EXIT
MOV AH,2
INT 16H
JE EXIT
;
CALL KB_RESET
;
MOV AH,25H
MOV AL,9
MOV DX,OLD_KBD_INT[2]
MOV DS,DX
MOV DX,OLD_KBD_INT
INT 21H
JMP DONE
;
EXIT: POP ES
POP DS
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
JMP OLD_INT_9H
;
CA5: CALL KB_RESET
DONE: POP ES
POP DS
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
IRET ;
CTRLALT ENDP
;
KB_RESET PROC NEAR
IN AL,KB_CTRL
MOV AH,AL
OR AL,80H
OUT KB_CTRL,AL
MOV AL,AH
OUT KB_CTRL,AL
CLI
MOV AL,EOI
OUT INT_CTRL_PORT,AL
STI
RET
KB_RESET ENDP
INITIALIZE PROC NEAR
MOV AH,35H
MOV AL,9
INT 21H
MOV OLD_KBD_INT,BX
MOV OLD_KBD_INT[2],ES
MOV AH,25H
MOV AL,9
LEA DX,CTRLALT
INT 21H
;
MOV AX,ENVIRON
MOV ES,AX
MOV AH,73
INT 21H
;
MOV DX,OFFSET INITIALIZE
INT 27H
INITIALIZE ENDP
;
CODE ENDS
END BEGIN
Cumprimentos
obrigado
Queria desactivar 6 teclas(P,R,4,ESC,DEL,4) do teclado em ms-dos
criando um executável em assembly.
Da-me um erro(linha que esta a negrito) a compilar com o masm32 o código é este:
KB_DATA EQU 60H
KB_CTRL EQU 61H
EOI EQU 20H
INT_CTRL_PORT EQU 20H
R_KEY EQU 83 ; codigo para a tecla "r"
;
CODE SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CODE
ORG 44
ENVIRON DW ?
ORG 100H
BEGIN: JMP INITIALIZE
OLD_INT_9H LABEL DWORD
OLD_KBD_INT DW 2 DUP (?)
;
CTRLALT PROC NEAR
STI
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH DS
PUSH ES
IN AL,KB_DATA
CMP AL,R_KEY
JNE CA4
MOV AH,2
INT 16H
JNE EXIT
MOV AH,2
INT 16H
JE EXIT
;
CALL KB_RESET
;
MOV AH,25H
MOV AL,9
MOV DX,OLD_KBD_INT[2]
MOV DS,DX
MOV DX,OLD_KBD_INT
INT 21H
JMP DONE
;
EXIT: POP ES
POP DS
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
JMP OLD_INT_9H
;
CA5: CALL KB_RESET
DONE: POP ES
POP DS
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
IRET ;
CTRLALT ENDP
;
KB_RESET PROC NEAR
IN AL,KB_CTRL
MOV AH,AL
OR AL,80H
OUT KB_CTRL,AL
MOV AL,AH
OUT KB_CTRL,AL
CLI
MOV AL,EOI
OUT INT_CTRL_PORT,AL
STI
RET
KB_RESET ENDP
INITIALIZE PROC NEAR
MOV AH,35H
MOV AL,9
INT 21H
MOV OLD_KBD_INT,BX
MOV OLD_KBD_INT[2],ES
MOV AH,25H
MOV AL,9
LEA DX,CTRLALT
INT 21H
;
MOV AX,ENVIRON
MOV ES,AX
MOV AH,73
INT 21H
;
MOV DX,OFFSET INITIALIZE
INT 27H
INITIALIZE ENDP
;
CODE ENDS
END BEGIN
Cumprimentos
obrigado