Вывод на экран. Перехват прерывания. - Assembler

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

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

Очистить экран. Вывести несколько строк произвольного текста. Пе- рехватить прерывание экрана (Int 5h). Первый вызов этого прерывания располагает строки вертикально, следующий «нормально» и т.д.

Решение задачи: «Вывод на экран. Перехват прерывания.»

textual
Листинг программы
  1. data segment
  2.     VIDEO_BUF dw 2000 DUP(0)
  3.     DIRECT db 0 ; **пр*вле*ие строк (0 - горизо*т*ль*о, 1 - вертик*ль*о)
  4.     STRING1 db 'Вчер*сь приятеля в к*рете видел я;'
  5.     STRING2 db 'Бед*як - приятель мой, я оче*ь удивился,'
  6.     STRING3 db 'Чем столько о* р*зжился?'
  7.     STRING4 db 'А о* повед*л м*е всю пр*вду, *е т*я,'
  8.     STRING5 db 'Что к*рт*ми себе име*ье о* дост*вил'
  9.     STRING6 db 'И выше всех **ук игру к*ртеж*у ст*вил.'
  10.     STRING7 db 'Сегод*я же пешком поп*лся м*е мой друг.'    
  11.     STRING8 db '"Ко*еч*о,- я ск*з*л,- спустил уж все ты с рук?"'
  12.     STRING9 db 'А о*, к*к философ, гл*сил в своем ответе:'
  13.     STRING10 db '"Ты з**ешь, колесом вертится все ** свете".'
  14.     OLD_CS dw ? ; *дрес сегме*т* ст*рого вектор* 5h
  15.     OLD_IP dw ? ; *дрес смеще*ия ст*рого вектор* 5h
  16. data ends
  17. code segment
  18. assume cs:code, ds:data
  19. ; Подпрогр*мм* обр*ботки прерыв**ия 5h
  20. NEW_5 proc far
  21.         push ax ; сохр**ить все регистры
  22.         push bx
  23.         push cx
  24.         push dx
  25.         push ds
  26.         push es
  27.        
  28.         mov ax, DATA ; уст**овить ds ** сегме*т д***ых
  29.         mov ds, ax ; ос*ов*ой прогр*ммы
  30.         mov ax, 0B800h ; уст**овить es **
  31.         mov es, ax ; сегме*т д***ых bios
  32.        
  33.         cmp DIRECT,0
  34.         jnz m1
  35.  
  36. ; Горизо*т*ль*ое р*сположе*ие строк    
  37.         mov cx,2000
  38.         xor si,si
  39. video1:
  40.         mov ax, VIDEO_BUF[si]
  41.         mov es:[si], ax
  42.         inc si
  43.         inc si
  44.         loop video1
  45.         inc DIRECT
  46.         jmp back
  47.        
  48. m1: ; Верти*ль*ое р*сположе*ие строк
  49.         xor si,si
  50.         mov bx,1999*2
  51.         mov cx,25
  52. video_ext:
  53.         push cx
  54.         sub bx,1999*2 ; Переход ** *овую строку
  55.         mov cx,80
  56. video_in:      
  57.         mov ax, VIDEO_BUF[bx]
  58.         mov es:[si],ax
  59.         inc si
  60.         inc si
  61.         add bx,25*2
  62.        
  63.         loop video_in
  64.         pop cx
  65.        
  66.         loop video_ext
  67.        
  68.         dec DIRECT
  69.        
  70. back:  
  71.         pop es
  72.         pop ds
  73.         pop dx
  74.         pop cx
  75.         pop bx
  76.         pop ax
  77.         iret
  78. NEW_5 endp
  79.  
  80. ; Подпрогр*мм* очистки экр***
  81. CLS proc near
  82.         push cx
  83.         push ax
  84.         push si
  85.         xor si, si
  86.         mov ah, 7
  87.         mov al, ' '
  88.         mov cx, 2000
  89. CL1:    
  90.         mov es:[si], ax
  91.         inc si
  92.         inc si
  93.         loop CL1
  94.         pop si
  95.         pop ax
  96.         pop cx
  97.         ret
  98. CLS endp
  99.  
  100.  
  101.  
  102. ; Ос*ов**я прогр*мм*
  103. START:  
  104.         mov ax, DATA
  105.         mov ds, ax
  106.        
  107.         mov ah, 02h  ; скрыть курсор
  108.         mov dh,25
  109.         int 10h    
  110.        
  111.         ; чте*ие вектор* прерыв**ия
  112.         mov ah, 35h
  113.         mov al, 5h
  114.         int 21h
  115.         mov OLD_IP, bx
  116.         mov OLD_CS, es
  117.         ; уст**овк* вектор* прерыв**ия
  118.         push ds
  119.         mov dx, offset NEW_5
  120.         mov ax, seg NEW_5
  121.         mov ds, ax
  122.         mov ah, 25h
  123.         mov al, 5h
  124.         inc si
  125.         int 21h
  126.         pop ds
  127.         mov ax, 0B800h
  128.         mov es, ax
  129.         call CLS
  130.        
  131.        
  132.         mov ah, 00000111b
  133.        
  134.         mov cx, 34
  135.         mov si, 0
  136.         xor bx,bx
  137. lp1:   
  138.         mov al, STRING1[bx]
  139.         mov VIDEO_BUF[si], ax
  140.         inc si
  141.         inc si
  142.         inc bx
  143.        
  144.         loop lp1
  145.  
  146.         mov cx, 40
  147.         mov si, 80*2
  148.         xor bx,bx
  149. lp2:
  150.         mov al, STRING2[bx]
  151.         mov VIDEO_BUF[si], ax
  152.         inc si
  153.         inc si
  154.         inc bx
  155.        
  156.         loop lp2
  157.    
  158.         mov cx, 24
  159.         mov si, 160*2
  160.         xor bx,bx
  161. lp3:
  162.         mov al, STRING3[bx]
  163.         mov VIDEO_BUF[si], ax
  164.         inc si
  165.         inc si
  166.         inc bx
  167.        
  168.         loop lp3
  169.        
  170.         mov cx, 36
  171.         mov si, 240*2
  172.         xor bx,bx
  173. lp4:
  174.         mov al, STRING4[bx]
  175.         mov VIDEO_BUF[si], ax
  176.         inc si
  177.         inc si
  178.         inc bx
  179.        
  180.         loop lp4
  181.        
  182.         mov cx, 35
  183.         mov si, 320*2
  184.         xor bx,bx
  185. lp5:
  186.         mov al, STRING5[bx]
  187.         mov VIDEO_BUF[si], ax
  188.         inc si
  189.         inc si
  190.         inc bx
  191.        
  192.         loop lp5
  193.        
  194.         mov cx, 38
  195.         mov si, 400*2
  196.         xor bx,bx
  197. lp6:
  198.         mov al, STRING6[bx]
  199.         mov VIDEO_BUF[si], ax
  200.         inc si
  201.         inc si
  202.         inc bx
  203.        
  204.         loop lp6
  205.        
  206.         mov cx, 39
  207.         mov si, 480*2
  208.         xor bx,bx
  209. lp7:
  210.         mov al, STRING7[bx]
  211.         mov VIDEO_BUF[si], ax
  212.         inc si
  213.         inc si
  214.         inc bx
  215.        
  216.         loop lp7
  217.        
  218.         mov cx, 47
  219.         mov si, 560*2
  220.         xor bx,bx
  221. lp8:
  222.         mov al, STRING8[bx]
  223.         mov VIDEO_BUF[si], ax
  224.         inc si
  225.         inc si
  226.         inc bx
  227.        
  228.         loop lp8
  229.        
  230.         mov cx, 41
  231.         mov si, 640*2
  232.         xor bx,bx
  233. lp9:
  234.         mov al, STRING9[bx]
  235.         mov VIDEO_BUF[si], ax
  236.         inc si
  237.         inc si
  238.         inc bx
  239.        
  240.         loop lp9
  241.        
  242.         mov cx, 43
  243.         mov si, 720*2
  244.         xor bx,bx
  245. lp10:
  246.         mov al, STRING10[bx]
  247.         mov VIDEO_BUF[si], ax
  248.         inc si
  249.         inc si
  250.         inc bx
  251.        
  252.         loop lp10
  253.    
  254.  
  255.         int 5h
  256.        
  257. p1:
  258.         mov ah,0
  259.         int 16h    
  260.         cmp al,'0'
  261.  
  262.         jnz p1
  263.        
  264. quit:  
  265.         call CLS
  266.         mov dx, OLD_IP
  267.         mov ax, OLD_CS
  268.         mov ds, ax
  269.         mov ah, 25h
  270.         mov al, 5h
  271.         int 21h
  272.         mov ax, 4c00h
  273.         int 21h
  274.        
  275. CODE ends
  276. end START

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


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

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

14   голосов , оценка 4.429 из 5

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

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

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