Видеопамять. Вывести изображение - Assembler

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

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

Пока выводятся две строчки, и я не могу понять как задать цикл в E10DISPLAY proc . что не так?
Листинг программы
  1. .model small
  2. .stack 100h
  3. .186
  4. .data
  5. ;Определение переменных:
  6. ;row - строка, в которой находится курсор, начальное значение равно 4
  7. ;col - столбец, в котором находится курсор, начальное значение равно 24
  8. ;mode - номер режима, начальное значение не определено (равно ?)
  9. ;char_ctr - счетчик АСС2-символов, начальное значение равно 0
  10. row db 4
  11. col db 24
  12. mode db (?)
  13. char_ctr db 4Dh ; - start M
  14. .code
  15. Start:
  16. mov ax,@data
  17. mov ds,ax
  18. ;Code main programm
  19. call B10MODE
  20. call C10CLEAR
  21. c1:
  22. call D10CURSOR
  23. call E10DISPlAY
  24. cmp char_ctr,82
  25. jz c2
  26. inc char_ctr
  27. add col,2
  28. cmp col,30
  29. jne c1
  30. add row,1
  31. mov col,24
  32. jne c1
  33. c2:
  34. mov ah,10h
  35. int 16h
  36. mov ax,4C00h
  37. int 21h
  38. B10MODE proc ;Получение/установка видеорежима
  39. mov ah,0Fh
  40. int 10h
  41. mov mode,al
  42. mov ah,00h
  43. mov al,03h
  44. int 10h
  45. ret
  46. B10MODE endp
  47. C10CLEAR proc ;Очистка экрана
  48. pusha
  49. mov ah,06h
  50. mov dx,184Fh
  51. int 10h
  52. mov ah,0
  53. mov ah,06h ;столбцы?
  54. mov al,06h ;строки
  55. mov BH,5h ;черный фон, синие символы
  56. mov cx, 0510h ;координаты левого верхнего угла, 5:10
  57. mov dx,1954h ; правый нижний я хз, шестнадцатеричный код здесь юзать!
  58. int 10h
  59. popa
  60. ret
  61. C10CLEAR endp
  62. D10CURSOR proc ;Установка курсора
  63. pusha
  64. mov ah,02h
  65. mov bh,0
  66. mov dh,row
  67. mov dl,col
  68. int 10h
  69. popa
  70. ret
  71. D10CURSOR endp
  72. E10DISPLAY proc ;Вывод символа на экран
  73. pusha
  74.  
  75. ;mov cx,3
  76. ;M1:
  77. ;push cx
  78. mov cx,6
  79. M1:
  80. mov ah,0Ah
  81. mov al,char_ctr
  82. mov bh,0
  83. ;pop cx
  84. ;mov cx,1
  85. int 10h
  86.  
  87. ;loop M1
  88. ;pop cx
  89. ;call Out_space
  90. popa
  91. ret
  92. E10DISPLAY endp
  93.  
  94. end start
Нужно вывести как на картине ниже:

Решение задачи: «Видеопамять. Вывести изображение»

textual
Листинг программы
  1. .model small
  2. .stack 100h
  3. .186
  4. .data
  5. ;Определение переменных:
  6.     ;row - строка, в которой находится курсор, начальное значение равно 4
  7.     ;col - столбец, в котором находится курсор, начальное значение равно 24
  8.     ;mode - номер режима, начальное значение не определено (равно ?)
  9.     ;char_ctr - счетчик АСС2-символов, начальное значение равно 0
  10.         row             db 4
  11.         col             db 24
  12.         mode            db (?)
  13.         VideoPage       db      ?
  14.         char_ctr        db 'M' ; - start M
  15.         Color           db 1
  16. .code
  17.  
  18. Start:
  19.     mov ax,@data
  20.     mov ds,ax
  21.  
  22. ;Code main programm
  23.  
  24.         call B10MODE
  25.         call C10CLEAR
  26.  
  27.         mov     cx,     6
  28.  
  29. c1:
  30.         call D10CURSOR
  31.         call E10DISPlAY
  32.  
  33.         add row,1
  34.         mov col,24
  35.  
  36.         inc     char_ctr
  37.         inc     Color
  38.  
  39.         loop    c1
  40.  
  41.         mov ah,10h
  42.         int 16h
  43.  
  44.         mov ax,4C00h
  45.         int 21h
  46.  
  47. B10MODE proc    ;Получение/установка видеорежима
  48.  
  49.     mov ah,0Fh
  50.  
  51.     int 10h
  52.  
  53.     mov mode,al
  54.  
  55.     mov ah,00h
  56.     mov al,03h
  57.     int 10h
  58.  
  59.     mov ah,0Fh
  60.     int 10h
  61.     mov VideoPage, bh
  62.  
  63.     ret
  64. B10MODE endp
  65.  
  66. C10CLEAR proc      ;Очистка экрана
  67.     pusha
  68.  
  69.     mov ah,06h
  70.     mov dx,184Fh
  71.  
  72.     int 10h
  73.  
  74.     mov ah,0
  75.     mov ah,06h ;столбцы?
  76.     mov al,06h ;строки
  77.  
  78.     mov BH,5h ;черный фон, синие символы
  79.     mov cx, 0510h ;координаты левого верхнего угла, 5:10
  80.  
  81.     mov dx,24*256+79 ; правый нижний я хз, шестнадцатеричный код здесь юзать!
  82.  
  83.     int 10h
  84.  
  85.     popa
  86.  
  87.     ret
  88. C10CLEAR endp
  89.  
  90. D10CURSOR proc     ;Установка курсора
  91.  
  92.     pusha
  93.  
  94.     mov ah,02h
  95.     mov bh,VideoPage
  96.     mov dh,row
  97.     mov dl,col
  98.     int 10h
  99.  
  100.     popa
  101.  
  102.     ret
  103. D10CURSOR endp
  104.  
  105. E10DISPLAY proc    ;Вывод символа на экран
  106.  
  107.         pusha
  108.  
  109.         mov ah,09h
  110.         mov al,char_ctr
  111.         mov bh,VideoPage
  112.         mov bl,Color
  113.         mov cx,6
  114.         int 10h
  115.  
  116.         popa
  117.  
  118.     ret
  119. E10DISPLAY endp
  120.  
  121. end start

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


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

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

15   голосов , оценка 4.133 из 5

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

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

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