.model tiny
.386
.code
org 80h
cmd_len db ?
cmd_ln db ?
org 100h
start:
jmp begin
_entr db 0dh,1ch
_esc db 1bh, 01h
hw_reset9:
retf
hand_int09h proc far
jmp short act09h
old_int09h dd ?
dw 424bh
db 00h
jmp short hw_reset9
dd 7 dup (0)
act09h:
pusha
push es
push ds
in al,60h
push ax
cmp al,1ch
je common
cmp al,01h
je common
old:
pop ax
pop ds
pop es
popa
jmp dword ptr cs:old_int09h
common:
in al,61h
push ax
or al,80h
out 61h,al
pop ax
out 61h,al
push 40h
pop es
push cs
pop ds
pop ax
mov word ptr es:1ah,1eh
mov di,1eh
cmp al,1ch
je mesc
cmp al,01h
je entr
mesc:
mov si,offset _esc
mov cx,1
mov word ptr es:1ch,20h
jmp inpt
entr:
mov si,offset _entr
mov cx,1
mov word ptr es:1ch,20h
jmp inpt
inpt:
movsw
loop inpt
ex_int09h:
mov al,20h
out 20h,al
pop ds
pop es
popa
iret
hand_int09h endp
hw_reset2d:
retf
hand_int2dh proc far
jmp short act_int2dh
old_int2dh dd ?
dw 424dh
db 00h
jmp short hw_reset2d
db 7 dup (0)
act_int2dh:
db 80h,0fch
mux_id db ?
je its_us
jmp dword ptr cs:old_int2dh
its_us:
cmp al,05
jae int2d_no
cmp al,03
je int2d_no
cbw
mov di,ax
shl di,1
jmp word ptr cs:jumptable[di]
jumptable dw offset int2d_00,offset int2d_no
dw offset int2d_02,offset int2d_no
dw offset int2d_04,offset int2d_05
int2d_00:
mov al,0ffh
mov cx,0100h
push cs
pop dx
mov di,offset amis_sign
iret
int2d_no:
mov al,00
iret
cnt_unld:
mov al,1
iret
int2d_02:
cli
push 0
pop ds
mov ax,cs
cmp ax,word ptr ds:[2dh*4+2]
jne cnt_unld
cmp ax,word ptr ds:[09h*4+2]
jne cnt_unld
push bx
push dx
mov ax,2509h
lds dx,dword ptr cs:old_int09h
int 21h
mov ax,252dh
lds dx,dword ptr cs:old_int2dh
int 21h
mov ah,51h
int 21h
mov word ptr cs:[16h],bx
pop dx
pop bx
mov word ptr cs:[0ch],dx
mov word ptr cs:[0ah],bx
push cs
pop bx
mov ah,50h
int 21h
mov ax,4cffh
int 21h
int2d_04:
mov dx,cs
mov bx,offset hooklist
iret
int2d_05:
mov dx,cs
mov bx,offset hotkeys
iret
hand_int2dh endp
amis_sign db '_Vadymus'
db 'Htkey&tm'
db 'Resident Hotkey caller',0
hooklist db 09h
dw offset hand_int09h
db 2dh
dw offset hand_int2dh
hotkeys db 1
db 1
db 20h
dw 08h
dw 0
db 1
begin proc
jmp short beg
prnthlp:
; mov byte ptr cmd_ln[2],0
mov ah,9
mov dx,offset hlpmsg
int 21h
ret
dounld:
inc ah
mov al,2
mov dx,cs
mov bx,offset ext_pnt
int 2dh
push cs
pop ds
mov dx,offset otherhook
mov ah,9
int 21h
ret
ext_pnt:
push cs
pop ds
mov dx,offset succ
push 0
mov ah,9
int 21h
ret
err2:
mov ah,9
mov dx,offset noload
int 21h
ret
beg:
cld
cmp byte ptr cmd_len,0h
je intal
cmp byte ptr cmd_ln[1],'/'
jne intal
; mov byte ptr cmd_ln[1],0
cmp byte ptr cmd_ln[2],'u'
jne trhlp
; mov byte ptr cmd_ln[2],0
mov byte ptr unload,1
jmp intal
trhlp:
cmp byte ptr cmd_ln[2],'?'
je prnthlp
intal:
mov ah,9
mov dx,offset usmes
int 21h
mov ah,0ffh
_srch:
mov al,00h
int 2dh
cmp al,00h
jne not_free
mov byte ptr mux_ID,ah
jmp next
not_free:
mov es,dx
push cs
pop ds
mov si,offset amis_sign
mov cx,10h
repe cmpsb
jcxz alrd_ld
next:
dec ah
jnz _srch
fr_fnd:
cmp unload,1
je err2
cmp mux_ID,0
je no_more
jmp load
alrd_ld:
cmp unload,1
je dounld
lea dx,LOADED
mov ah,09h
int 21h
ret
no_more:
lea dx,NOMR
mov ah,09h
int 21h
ret
load:
mov ax,352dh
int 21h
mov word ptr old_int2dh,bx
mov word ptr old_int2dh+2,es
mov ax,3509h
int 21h
mov word ptr old_int09h,bx
mov word ptr old_int09h+2,es
; mov byte ptr en_ds,1
mov ax,2509h
mov dx,offset hand_int09h
int 21h
mov ax,252dh
mov dx,offset hand_int2dh
int 21h
mov ah,9
mov dx,offset install
int 21h
mov ah,27h
mov dx,offset begin
int 27h
begin endp
usmes db 'Resident keys changer for DOS. Ver. 1.0',0dh,0ah
db 'Run program with /u to uninstall or with /? to see help',0dh,0ah
db 0dh,0ah
db 'WARNING: THIS ONLY AN EXPEREMENTAL VERTION',0dh,0ah
db 'THE AUTHOR GIVES NO GUARANTIES',0dh,0ah
db 'USE ON YOUR OWN RISK',0dh,0ah
db 0dh,0ah,'$'
succ db 'Program has been unloaded successfully',0dh,0ah,'$'
install db 'Program has been installed successfully',0dh,0ah,'$'
loaded db 'ERROR: Program is already loaded',0dh,0ah,'$'
otherhook db 'ERROR: Our interupts have been hooked by another program.',0dh,0ah
db 'Unload failed',0dh,0ah,'$'
noload db 'ERROR: Program is not loaded.',0dh,0ah
db 'Unload failed',0dh,0ah,'$'
nomr db 'ERROR: Too many residents in memory',0dh,0ah,'$'
hlpmsg db 'Resident keys changer for DOS. Ver. 1.0',0dh,0ah
db 'All rights reserved',0dh,0ah
db 0dh,0ah
db 'Options:',0dh,0ah
db ' /u == uninstall',0dh,0ah
db ' /? == this message',0dh,0ah
db 'WARNING: THIS ONLY AN EXPEREMENTAL VERTION',0dh,0ah
db 'THE AUTHOR GIVES NO GUARANTIES',0dh,0ah
db 'USE ON YOUR OWN RISK',0dh,0ah,'$'
unload db ?
end start
(ASM) Замена клавиши Esc на Клавишу Enter
Пожалуйста помогите написать програмку по Assembler. Написать программу, заменяющую нажатие клавиши Esc на нажатие клавиши Enter, а нажатие клавиши Enter на нажатие клавиши Esc. Очень надо а в Assembler я не шарю плз, заранее благодарна =)
Если резидент, то вот.
Переделывал со своей лабы на скорую руку. так, что не исключены баги, но вроде работает. Программа резидентная. предусмотрены исключение повторной загрузки, выгрузка....
Код:
большое спасибо =) Очень помог =) просто надо курсач сдавать 12 декабря а я не знала как прогу написать =(
Компилировала так:
tasm.exe /zi Code.asm
tlink.exe /v Code.obj
Может неправильно?
tasm code.asm
tlink /t code.obj
если в тасме ключь /zi можно еще и поставить. то в tlink ключь /t - обязателен!!
Пасибки всё работает =) буду отчётку писать =)