Advertisement
qberik

Untitled

Dec 22nd, 2022
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.37 KB | None | 0 0
  1. .model small
  2. .stack 100h
  3.  
  4.  
  5. .data
  6.  
  7. old_int_offset dw ?
  8. old_int_seg dw ?
  9.  
  10. text1 db "Lorem ipsum dolor sit amet,",'$'
  11. text2 db "consectetur adipiscing elit",'$'
  12. text3 db "Suspendisse vel est a purus",'$'
  13. text4 db "pretium dictum sagittis nisi",'$'
  14. text5 db "Nullam non neque quam. Duis ",'$'
  15. text6 db "faucibus est et leo bibendum,",'$'
  16. text7 db "quis feugiat tellus eleifend",'$'
  17.  
  18. endl db 13,10,'$'
  19.  
  20. exit dw 0
  21.  
  22.  
  23. min_x db -30
  24. max_x db 100
  25. ;x_pos db 50
  26. x_pos db 160
  27. y_pos db 9
  28.  
  29.  
  30. .code
  31. input_int proc far
  32. ; можно и pusha
  33. push ax
  34. push bx
  35. push cx
  36. push dx
  37. push si
  38. push di
  39. push bp
  40. pushf
  41.  
  42.  
  43. ; очистка экрана
  44. mov ah, 06h
  45. mov al, 00h
  46. mov bh, 00001111b
  47. mov cx, 0000h
  48. mov dx, 184fh
  49. int 10h
  50.  
  51. ; двигаю курсор
  52. mov ah, 02h
  53. mov bh, 00h
  54. mov dl, x_pos
  55. mov dh, y_pos
  56. int 10h
  57.  
  58. ; печатаю
  59. mov ah, 09h
  60. mov dx, offset text1
  61. int 21h
  62.  
  63. mov ah, 02h
  64. mov bh, 00h
  65. mov dl, x_pos
  66. mov dh, y_pos
  67. add dh, 1
  68. int 10h
  69. ; печатаю
  70. mov ah, 09h
  71. mov dx, offset text2
  72. int 21h
  73.  
  74. mov ah, 02h
  75. mov bh, 00h
  76. mov dl, x_pos
  77. mov dh, y_pos
  78. add dh, 2
  79. int 10h
  80. ; печатаю
  81. mov ah, 09h
  82. mov dx, offset text3
  83. int 21h
  84.  
  85. mov ah, 02h
  86. mov bh, 00h
  87. mov dl, x_pos
  88. mov dh, y_pos
  89. add dh, 3
  90. int 10h
  91. ; печатаю
  92. mov ah, 09h
  93. mov dx, offset text4
  94. int 21h
  95.  
  96. mov ah, 02h
  97. mov bh, 00h
  98. mov dl, x_pos
  99. mov dh, y_pos
  100. add dh, 4
  101. int 10h
  102. ; печатаю
  103. mov ah, 09h
  104. mov dx, offset text5
  105. int 21h
  106.  
  107. mov ah, 02h
  108. mov bh, 00h
  109. mov dl, x_pos
  110. mov dh, y_pos
  111. add dh, 5
  112. int 10h
  113. ; печатаю
  114. mov ah, 09h
  115. mov dx, offset text6
  116. int 21h
  117.  
  118. mov ah, 02h
  119. mov bh, 00h
  120. mov dl, x_pos
  121. mov dh, y_pos
  122. add dh, 6
  123. int 10h
  124. ; печатаю
  125. mov ah, 09h
  126. mov dx, offset text7
  127. int 21h
  128.  
  129.  
  130. mov ah, 1 ; Проверка на то, что какая-то кнопка нажата
  131. int 16h
  132. jz _skip_int ; ничего не нажато
  133.  
  134.  
  135. mov ah, 0 ; Если что-то нажато, то надо узнать что
  136. int 16h
  137.  
  138.  
  139. cmp al, '1'
  140. jl _key_not_in_1_9
  141. cmp al, '9'
  142. jg _key_not_in_1_9
  143. mov cl, x_pos
  144. sub cl, al
  145. add cl, '0'
  146. mov x_pos, cl
  147.  
  148. _key_not_in_1_9:
  149.  
  150.  
  151. cmp al, '0' ; выход
  152. jnz _no_key
  153. mov ax, 1
  154. mov exit, ax
  155.  
  156. _no_key:
  157.  
  158. _skip_int:
  159.  
  160. ; можно и popa
  161. popf
  162. pop bp
  163. pop di
  164. pop si
  165. pop dx
  166. pop cx
  167. pop bx
  168. pop ax
  169. iret
  170. input_int endp
  171.  
  172. start:
  173. mov ax, @data
  174. mov ds, ax
  175.  
  176. jumps ; нужно для нальних прыжков
  177.  
  178.  
  179. ; получим адреса прерываний, которые были ещё до нас
  180. mov ah, 35h ; получить вектор прерывания
  181. mov al, 1Ch ; прерывание таймера
  182. int 21h
  183. ; в bx записался сдвиг старого прерывания
  184. ; в ex записался сегмерт старого прерывания
  185.  
  186. ; их надо запомнить, чтобы потом вернуть всё на место
  187. mov old_int_offset, bx
  188. mov old_int_seg , es
  189.  
  190. ; теперь можем написать что-то своё заместо прошлого прерывания
  191.  
  192. ; пусть функция input_int будет нашим прерыванием
  193.  
  194. push ds ; будем трогать ds так что надо положить его в стек, чтобы не потерять
  195.  
  196. mov dx, offset input_int
  197. mov ax, seg input_int
  198. mov ds, ax ; можно поменять только через ax
  199.  
  200. mov ah, 25h ; поменятьменять вектор прерывания
  201. mov al, 1Ch ; наше прерывание таймера
  202. int 21h
  203.  
  204.  
  205. mov ah, 01h
  206. mov cx, 2607h
  207. int 10h
  208.  
  209. pop ds
  210. _loop:
  211. mov ax, exit
  212. cmp ax, 1
  213. je _end
  214. jmp _loop
  215. _end:
  216.  
  217.  
  218. ; надо вернуть всё как было
  219. mov dx, old_int_offset
  220. mov ax, old_int_seg
  221. mov ds, ax ; можно поменять только через ax
  222.  
  223. mov ah, 25h ; поменятьменять вектор прерывания
  224. mov al, 1Ch ; наше прерывание таймера
  225. int 21h
  226.  
  227.  
  228. nojumps ; нужно для нальних прыжков
  229. mov ax, 4c00h
  230. int 21h
  231.  
  232.  
  233. end start
  234.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement