Замена символа.Резидент - Assembler
Формулировка задачи:
Добрый день , есть программа , которая по нажатию левого шрифта меняет "g" на собственный символ. Надо из этого сделать резидент(и COM файл) , прошу помощи ( если можно , то с комментариями , буду очень признателен )
.model small
.stack 100h
.data
char DB 00000000B
DB 00000000B
DB 00000000B
DB 00000000B
DB 00000000B
DB 01111110B
DB 01000010B
DB 01000010B
DB 01000010B
DB 01000010B
DB 01000010B
DB 01000010B
DB 01000010B
DB 00000000B
DB 00000000B
DB 00000000B
.code
repeat1:
mov ah, 2
int 16h
test al, 2
jnz sym111
cmp al,0dh
je exit
jmp repeat1
sym proc
mov ax,seg char
mov es,ax
mov BP,offset char
mov cx,1
mov dx,103
mov bl,0
mov bh,16
mov al,0
mov ah,11h
int 10h
ret
endp
jmp repeat1
sym111:
call sym
exit:
mov ah,4ch
int 21h
endРешение задачи: «Замена символа.Резидент»
textual
Листинг программы
.MODEL Tiny .286 .CODE ORG 100h Start: jmp SetIntVec char DB 00000000B DB 00000000B DB 00000000B DB 00000000B DB 00000000B DB 01111110B DB 01000010B DB 01000010B DB 01000010B DB 01000010B DB 01000010B DB 01000010B DB 01000010B DB 00000000B DB 00000000B DB 00000000B Handler: ; обработчик прерывания pusha in al,60h ; скан-код нажатой клавиши cmp al,2Ah ; Left Shift? jne leave push es push cs pop es mov bp,offset char mov cx,1 mov dx,103 mov bl,0 mov bh,16 mov al,0 mov ah,11h int 10h ; устанавливаем символ pop es leave: popa RealInt: db 0EAh ; возвращаем управление старому обработчику прерывания RealAddr dw ?,? TSREnd = $ ORG $-4 ;----------------------------------------------------------------------------; SetIntVec: mov ax,3509h int 21h ; получаем адрес обработчика прерывания mov RealAddr[0],bx mov RealAddr[2],es mov ah,25h lea dx,Handler int 21h ; устанавливаем наш обработчик mov ah,49h mov es,ds:[2Ch] int 21h ; удаляем переменные окружения (освобождаем никому ненужную память) lea dx,TSREnd int 27h ; остаёмся резидентными END Start