Замена символа.Резидент - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д