;Резидент, выводящий в правом верхнем углу экрана код символа под курсором Attr EQU 70H ;Атрибут выводимого кода MODEL TINY LOCALS .CODE ORG 2CH EnvSeg DW ? ORG 5CH OldVec DD ?;Старый вектор SaveES DW ? SaveDS DW ? SaveDX DW ? SaveCX DW ? SaveBX DW ? SaveAX DW ? ;Неиспользуемая область PSP - место для данных ORG 80H ;Информация о копирайте, она же - метка для поиска загруженной копии ;программы TAG DB 80H dup (?) ORG 100H Begin: JMP install ;Обработчик клавиатурного прерывания - что делается то делается при нажатии ;клавиши Handler9:PUSHF CALL DWord Ptr CS:OldVec MOV CS:SaveDS, DS MOV CS:SaveAX, AX ;Загрузка в ES сегмента данных BIOS MOV AX,40H MOV DS,AX ;Анализ видеорежима MOV AL,Byte ptr DS:[49H] CMP AL,3 JBE Continue Cmp AL,7 JE Continue jmp exit Continue:MOV CS:SaveES,ES MOV CS:SaveBX,BX MOV CS:SaveCX,CX MOV CS:SaveDX,DX ;Загрузка сегмента видеопамяти SUB CX,CX MOV AX,Word Ptr DS:[4CH] MOV CL,4 SHR AX,CL MOV CL,Byte Ptr DS:[62H] MUL CX ADD AX,0B800H Cmp Byte Ptr DS:[49H],7 JNE @@1 SUB AX,800H @@1: MOV ES,AX MOV BX,28H ADD BL,Byte Ptr DS:[62H] SHL BX,1;Загрузка номера страницы и пересчет его в указатель ;ячейку, хранящую позицию курсора MOV BX,[BX] MOV AL,Byte Ptr DS:[4AH] MUL BH SUB BH,BH ADD BX,AX SHL BX,1 MOV AL,ES:[BX];Наконец-то нужный символ в AL MOV BX,Word ptr DS:[4AH];Адрес, куда выводить DEC BX SHL BX,1 MOV DL,10 MOV CX,3 MOV DH,Attr @@2: Mov AH,0 DIV DL ADD AH,'0' MOV ES:[BX],AH Mov ES:[BX+1],DH SUB BX,2 LOOP @@2 MOV ES,CS:SaveES MOV DX,CS