Замена символа.Резидент - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы