Замена символа.Резидент - Assembler

Узнай цену своей работы

Формулировка задачи:

Добрый день , есть программа , которая по нажатию левого шрифта меняет "g" на собственный символ. Надо из этого сделать резидент(и COM файл) , прошу помощи ( если можно , то с комментариями , буду очень признателен )
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4. char DB 00000000B
  5. DB 00000000B
  6. DB 00000000B
  7. DB 00000000B
  8. DB 00000000B
  9. DB 01111110B
  10. DB 01000010B
  11. DB 01000010B
  12. DB 01000010B
  13. DB 01000010B
  14. DB 01000010B
  15. DB 01000010B
  16. DB 01000010B
  17. DB 00000000B
  18. DB 00000000B
  19. DB 00000000B
  20. .code
  21. repeat1:
  22. mov ah, 2
  23. int 16h
  24. test al, 2
  25. jnz sym111
  26. cmp al,0dh
  27. je exit
  28. jmp repeat1
  29. sym proc
  30. mov ax,seg char
  31. mov es,ax
  32. mov BP,offset char
  33. mov cx,1
  34. mov dx,103
  35. mov bl,0
  36. mov bh,16
  37. mov al,0
  38. mov ah,11h
  39. int 10h
  40. ret
  41. endp
  42. jmp repeat1
  43.  
  44. sym111:
  45. call sym
  46. exit:
  47. mov ah,4ch
  48. int 21h
  49. end

Решение задачи: «Замена символа.Резидент»

textual
Листинг программы
  1. .MODEL Tiny
  2. .286
  3. .CODE
  4. ORG     100h
  5.  
  6. Start:
  7.  
  8.                 jmp     SetIntVec
  9.  
  10. char            DB 00000000B
  11.                 DB 00000000B
  12.                 DB 00000000B
  13.                 DB 00000000B
  14.                 DB 00000000B
  15.                 DB 01111110B
  16.                 DB 01000010B
  17.                 DB 01000010B
  18.                 DB 01000010B
  19.                 DB 01000010B
  20.                 DB 01000010B
  21.                 DB 01000010B
  22.                 DB 01000010B
  23.                 DB 00000000B
  24.                 DB 00000000B
  25.                 DB 00000000B
  26. Handler:                                ; обработчик прерывания
  27.                 pusha
  28.                 in      al,60h          ; скан-код нажатой клавиши
  29.                 cmp     al,2Ah          ; Left Shift?
  30.                 jne     leave
  31.  
  32.                 push    es
  33.                 push    cs
  34.                 pop     es
  35.                 mov     bp,offset char
  36.                 mov     cx,1
  37.                 mov     dx,103
  38.                 mov     bl,0
  39.                 mov     bh,16
  40.                 mov     al,0
  41.                 mov     ah,11h
  42.                 int     10h             ; устанавливаем символ
  43.                 pop     es
  44.         leave:  popa
  45.  
  46. RealInt:        db      0EAh            ; возвращаем управление старому обработчику прерывания
  47. RealAddr        dw      ?,?
  48.  
  49. TSREnd          =       $
  50. ORG     $-4
  51.  
  52. ;----------------------------------------------------------------------------;
  53.  
  54. SetIntVec:
  55.                 mov     ax,3509h
  56.                 int     21h             ; получаем адрес обработчика прерывания
  57.                 mov     RealAddr[0],bx
  58.                 mov     RealAddr[2],es
  59.                 mov     ah,25h
  60.                 lea     dx,Handler
  61.                 int     21h             ; устанавливаем наш обработчик
  62.  
  63.                 mov     ah,49h
  64.                 mov     es,ds:[2Ch]
  65.                 int     21h             ; удаляем переменные окружения (освобождаем никому ненужную память)
  66.  
  67.                 lea     dx,TSREnd
  68.                 int     27h             ; остаёмся резидентными
  69.  
  70. END Start

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


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

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

8   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы