Работа с дисплеем и прерыванием - Assembler

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

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

Необходимо задать три колонки символов в правой части экрана и задать их перемещение в левую часть экрана. Получилось создать только три строки с стремя символами, и по центру, помогите создать колонки, и задать перемещение, буду очень благодарен.
Листинг программы
  1. .model small ; модель памяти
  2. .stack 100h ; стек памяти
  3. .386
  4. .data ; сегмент данных
  5. saveMode db ? ; переменная видеорежим
  6. x db 70 ; строка
  7. y db 70 ; столбец
  8. stp db 0 ; кол-во строк текста
  9. .code
  10. main:
  11. mov x,10 ; 10 строка
  12. mov y,34 ; столбец
  13. mov stp,3 ; 3 строк текста
  14. mov ah,0Fh
  15. int 10h ; прерывание bios
  16. mov saveMode,al
  17. mov ah,00 ; установка видео режима
  18. mov al,02 ; номер режима 80 х 25 чёрно-белый текстовый
  19. int 10h ; прерывание bios
  20. cucl:
  21. mov ah,2 ; Запрос на установку курсора
  22. mov bh,0 ; экран 0
  23. mov dh,x ; строка x
  24. mov dl,y ; столбец y
  25. int 10h ; прерывание bios
  26. ;---------вывод на экран------------------------------------------
  27. mov ah,09
  28. mov al,24 ; выводимый символ
  29. mov bl,0F0H ; атрибут мерцание
  30. mov cx,3 ; повтор в строке
  31. int 10h ; прерывание bios
  32. ;----------------------------------------------------------------------
  33. inc x ; переход на следующую строку
  34. dec stp ; уменьшаем кол-во шагов цикла на 1
  35. cmp stp,0
  36. ja cucl ; пока a>0 переход на cucl
  37. ;------------------------------------------------------------------------------------
  38. end main
Получилось создать колонки, но необходимо теперь назначить перемещение, с правой части на левую, но у меня изначально она стоит слева, помогите пожалуйста разобраться с размещением на экране.
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4. str1 db "1111111 2222222 3333333", 0Dh, 0Ah, "$"
  5. str2 db "1111111 2222222 3333333", 0Dh, 0Ah, "$"
  6. str3 db "1111111 2222222 3333333", 0Dh, 0Ah, "$"
  7. x equ 80
  8. y equ 25
  9. .code
  10. print:
  11. push dx
  12. mov ah, 09h
  13. lea dx, str1
  14. int 21h
  15. lea dx, str2
  16. int 21h
  17. lea dx, str3
  18. int 21h
  19. pop dx
  20. ret
  21.  
  22. clrscr:
  23. push ax
  24. push cx
  25. push dx
  26. mov ax, 0600h
  27. mov bh, 07
  28. xor cx, cx
  29. mov dh, y - 80
  30. mov dl, x - 80
  31. int 10h
  32. pop dx
  33. pop cx
  34. pop ax
  35. ret
  36. setcursor:
  37. push ax
  38. push bx
  39. mov ah, 02h *
  40. mov bh, 0
  41. int 10h
  42. pop bx
  43. pop ax
  44. ret
  45. main:
  46. mov ax, @data
  47. mov ds, ax
  48. mov es, ax
  49. xor dx, dx
  50. cycle:
  51. call setcursor
  52. call clrscr
  53. call print
  54. inc dh
  55. cmp dh, y - 2
  56. jb cycle
  57. call sleep
  58. exit:
  59. mov ax, 4c00h
  60. int 21h
  61. end main

Решение задачи: «Работа с дисплеем и прерыванием»

textual
Листинг программы
  1. .model small            ; модель памяти
  2. .stack 100h             ; стек памяти
  3. .386               
  4. .data               ; сегмент данных
  5. saveMode db ?           ; переменная видеорежим
  6. x db 0              ; строка
  7. y db 0              ; столбец
  8. stp db 0            ; кол-во строк текста
  9. ;--------СЕГМЕНТ КОДА----------------------------------------------------------
  10. .code
  11. main:
  12.  
  13. ;---------получитьвидео-режим------------------------------
  14. mov ah,0Fh
  15. int 10h             ; прерывание bios
  16. mov saveMode,al
  17. mov ah,00           ; установка видео режима
  18. mov al,02           ; номер режима 80 х 25   чёрно-белый текстовый
  19. int 10h             ; прерывание bios
  20. ;--------ЦИКЛ---------------------------------------------------------------------
  21. mov x,0             ; 10 строка
  22. mov y,60            ; 34 столбец
  23. mov stp,5           ; 5 строк текста
  24. cucl:
  25. ;---------установка курсора-------------------------------------
  26. mov ah,2                ; Запрос на установку курсора
  27. mov bh,0                ; экран 0
  28. mov dh,x                ; строка x
  29. mov dl,y                ; столбец y
  30. int 10h                 ; прерывание bios
  31. ;---------вывод на экран------------------------------------------
  32. mov ah,09  
  33. mov al,03H          ; выводимый символ
  34. mov bl,0F0H             ; атрибут мерцание
  35. mov cx,2            ; повтор в строке
  36. int 10h             ; прерывание bios
  37.  
  38. ;----------------------------------------------------------------------
  39. inc x           ; переход на следующую строку
  40. dec stp         ; уменьшаем кол-во шагов цикла на 1
  41. cmp stp,0
  42. ja cucl         ; пока a>0 переход на cucl
  43. ;------------------------------------------------------------------------------------
  44.  
  45.             mov x,0             ; 10 строка
  46.             mov y,62            ; 34 столбец
  47.             mov stp,5           ; 5 строк текста
  48.  
  49. cocl:
  50. ;---------установка курсора-------------------------------------
  51.             mov ah,2                ; Запрос на установку курсора
  52.             mov bh,0                ; экран 0
  53.             mov dh,x                ; строка x
  54.             mov dl,y                ; столбец y
  55.             int 10h                 ; прерывание bios
  56. ;---------вывод на экран------------------------------------------
  57.             mov ah,09  
  58.             mov al,32           ; выводимый символ
  59.             mov bl,2            ; атрибут мерцание
  60.             mov cx,2            ; повтор в строке
  61.             int 10h             ; прерывание bios
  62. inc x           ; переход на следующую строку
  63. dec stp         ; уменьшаем кол-во шагов цикла на 1
  64. cmp stp,0
  65. ja cocl         ; пока a>0 переход на cucl
  66.  
  67.                         mov x,0             ; 10 строка
  68.                         mov y,64            ; 34 столбец
  69.                         mov stp,5           ; 5 строк текста
  70. cacl:
  71. ;---------установка курсора-------------------------------------
  72. mov ah,2                ; Запрос на установку курсора
  73. mov bh,0                ; экран 0
  74. mov dh,x                ; строка x
  75. mov dl,y                ; столбец y
  76. int 10h                 ; прерывание bios
  77. ;---------вывод на экран------------------------------------------
  78. mov ah,09  
  79. mov al,03H          ; выводимый символ
  80. mov bl,0F0H             ; атрибут мерцание
  81. mov cx,2            ; повтор в строке
  82. int 10h             ; прерывание bios
  83.  
  84. ;----------------------------------------------------------------------
  85. inc x           ; переход на следующую строку
  86. dec stp         ; уменьшаем кол-во шагов цикла на 1
  87. cmp stp,0
  88. ja cacl         ; пока a>0 переход на cucl
  89.             mov x,0             ; 10 строка
  90.             mov y,66            ; 34 столбец
  91.             mov stp,5           ; 5 строк текста
  92.  
  93. cycl:
  94. ;---------установка курсора-------------------------------------
  95.             mov ah,2                ; Запрос на установку курсора
  96.             mov bh,0                ; экран 0
  97.             mov dh,x                ; строка x
  98.             mov dl,y                ; столбец y
  99.             int 10h                 ; прерывание bios
  100. ;---------вывод на экран------------------------------------------
  101.             mov ah,09  
  102.             mov al,32           ; выводимый символ
  103.             mov bl,2            ; атрибут мерцание
  104.             mov cx,2            ; повтор в строке
  105.             int 10h             ; прерывание bios
  106. inc x           ; переход на следующую строку
  107. dec stp         ; уменьшаем кол-во шагов цикла на 1
  108. cmp stp,0
  109. ja cycl         ; пока a>0 переход на cucl
  110.  
  111.  
  112.                         mov x,0             ; 10 строка
  113.                         mov y,68            ; 34 столбец
  114.                         mov stp,5           ; 5 строк текста
  115. cecl:
  116. ;---------установка курсора-------------------------------------
  117. mov ah,2                ; Запрос на установку курсора
  118. mov bh,0                ; экран 0
  119. mov dh,x                ; строка x
  120. mov dl,y                ; столбец y
  121. int 10h                 ; прерывание bios
  122. ;---------вывод на экран------------------------------------------
  123. mov ah,09  
  124. mov al,03H          ; выводимый символ
  125. mov bl,0F0H             ; атрибут мерцание
  126. mov cx,2            ; повтор в строке
  127. int 10h             ; прерывание bios
  128.  
  129. ;----------------------------------------------------------------------
  130. inc x           ; переход на следующую строку
  131. dec stp         ; уменьшаем кол-во шагов цикла на 1
  132. cmp stp,0
  133. ja cecl         ; пока a>0 переход на cucl
  134.  
  135. end main

Объяснение кода листинга программы

  1. Переменная saveMode используется для хранения видеорежима.
  2. Переменные x и y используются для определения позиции курсора на экране.
  3. Переменная stp используется для определения количества строк текста, которые нужно вывести.
  4. Цикл начинается с метки cucl и повторяется до тех пор, пока значение переменной stp больше нуля.
  5. Внутри цикла устанавливается курсор в позицию, определенную переменными x и y, и выводится текст символом al с атрибутом bl.
  6. После каждой итерации цикла значение переменной x увеличивается на 1, чтобы перейти на следующую строку.
  7. Значение переменной stp уменьшается на 1 после каждой итерации цикла.
  8. Если значение переменной stp равно нулю, цикл завершается.
  9. После завершения цикла начинается новый цикл с метки cocl, который повторяется аналогично первому циклу.
  10. Затем начинается цикл с метки cacl, который повторяется аналогично предыдущим циклам.
  11. Последний цикл начинается с метки cecl и повторяется до тех пор, пока значение переменной stp больше нуля.
  12. Код завершается меткой end main.

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


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

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

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

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

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

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