Guest User

Управление @ курсорными клавишами

a guest
May 12th, 2012
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ORG 100h
  2.  
  3.  
  4. Initialization: ; инициализация
  5. mov ax, 0001h   ; установка видеорежима 40x25, инициализация экрана
  6. int 10h
  7. mov ax, 0500h   ; выбор видеостраницы: 0
  8. int 10h
  9.  
  10.  
  11. Main:       ; главный цикл
  12.  
  13. CoordinateXException:       ; обработка исключения х=255,
  14. cmp [bCoordinateX], 0FFh    ; которое получается при декременте х=0
  15. jnz CoordinateXCalculation  ; (движение влево с крайней левой позиции)
  16. mov ah, [bMaxCoordinateX]
  17. mov [bCoordinateX], ah
  18. jmp CoordinateYException
  19.  
  20. CoordinateXCalculation:     ; вычисление координаты х
  21. mov al, [bCoordinateX]
  22. mov ah, 00h
  23. div [bSizeX]        ; 0<x<39
  24. mov [bCoordinateX], ah
  25.  
  26. CoordinateYException:       ; обработка исключения у=255,
  27. cmp [bCoordinateY], 0FFh    ; которое получается при декременте 0
  28. jnz CoordinateYCalculation  ; (движение вверх с крайней верхней позиции)
  29. mov ah, [bMaxCoordinateY]
  30. mov [bCoordinateY], ah
  31. jmp Deleting
  32.  
  33. CoordinateYCalculation:     ; вычисление координаты у
  34. mov al, [bCoordinateY]      ; 0<y<24
  35. mov ah, 00h
  36. div [bSizeY]
  37. mov [bCoordinateY], ah
  38.  
  39. Deleting:       ; затирание предыдущей позиции
  40. mov bh, 00h     ; установка курсора на координаты
  41. mov dh, [bCurrentCoordinateY]
  42. mov dl, [bCurrentCoordinateX]
  43. mov ah, 02h
  44. int 10h
  45.  
  46. mov bh, 00h     ; вывод пустого символа или следа
  47. mov al, [bDeleteCharacter]
  48. mov ah, 09h
  49. mov bl, [bDeleteAttribute]
  50. mov cx, 01h
  51. int 10h
  52.  
  53.  
  54. Draw:       ; отрисовка
  55. mov bh, 00h     ; установка курсора на координаты
  56. mov dh, [bCoordinateY]
  57. mov dl, [bCoordinateX]
  58. mov ah, 02h
  59. int 10h
  60.  
  61. mov bh, 00h     ; вывод символа
  62. mov al, [bCharacter]
  63. mov ah, 09h
  64. mov bl, [bAttribute]
  65. mov cx, 01h
  66. int 10h
  67.  
  68. call Invisible  ; спрятать курсор, чтоб не мельтешил
  69.  
  70. PositionSaving:         ; сохранение предыдущей позиции
  71. mov ah, [bCoordinateX]      ; в отдельные переменные
  72. mov [bCurrentCoordinateX], ah
  73. mov ah, [bCoordinateY]
  74. mov [bCurrentCoordinateY], ah
  75.  
  76. KeyboardCheck:
  77. mov ah, 00h ; ожидание ввод с клавиатуры
  78. int 16h
  79.  
  80. cmp ax, 011Bh   ; Esc?
  81. jz Exit
  82.  
  83. cmp ax, 4B00h   ; стрелка влево?
  84. jz Left
  85.  
  86. cmp ax, 4D00h   ; стрелка вправо?
  87. jz Right
  88.  
  89. cmp ax, 4800h   ; стрелка вверх?
  90. jz Up
  91.  
  92. cmp ax, 5000h   ; стрелка вниз?
  93. jz Down
  94.  
  95. jmp Main    ; возврат в начало!
  96.  
  97. Invisible:
  98. mov ah, 02h ; перемещение курсор на 26-ю строку (из 25, нумерация с нуля)
  99. mov bh, 00h
  100. mov dx, 1900h
  101. int 10h
  102. ret
  103.  
  104. Exit:       ; выход
  105. int 20h
  106.  
  107. Left:       ; влево
  108. dec [bCoordinateX]  ; уменьшение координаты х
  109. jmp Main
  110. Right:      ; вправо
  111. inc [bCoordinateX]  ; увеличение х
  112. jmp Main
  113. Up:     ; вверх
  114. dec [bCoordinateY]  ; уменьшение у
  115. jmp Main
  116. Down:       ; вниз
  117. inc [bCoordinateY]  ; увеличение у
  118. jmp Main
  119.  
  120. Variables:
  121. bCurrentCoordinateX db 00h
  122. bCurrentCoordinateY db 00h
  123. bCoordinateX db 00h
  124. bCoordinateY db 00h
  125. bSizeX db 40d
  126. bSizeY db 25d
  127. bMaxCoordinateX db 39d
  128. bMaxCoordinateY db 24d
  129. bCharacter db 40h
  130. bAttribute db 02h
  131. bDeleteCharacter db 00h
  132. bDeleteAttribute db 00h
Advertisement
Add Comment
Please, Sign In to add comment