Выводить и скрывать символ ‘*’ в пределах 1 секунды - Assembler

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

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

На экране в координатах (1,1), (1,78), (23,1), (23,78) выводить и скрывать символ ‘*’ в пределах 1 секунды. Выход из программы по нажатию клавиши Esc. Напишите код пожалуйста в одном сегменте. Заранее спасибо!!!

Решение задачи: «Выводить и скрывать символ ‘*’ в пределах 1 секунды»

textual
Листинг программы
  1. .model small
  2. .386
  3.  
  4. .stack 100h
  5.  
  6. .data
  7.  
  8. .code
  9. start:
  10. mov ax,@data
  11. mov ds,ax
  12.  
  13. mov ah,00h
  14. mov al,03h
  15. int 10h
  16.  
  17. push 0B800h
  18. pop es
  19.  
  20. again:
  21. mov ax,022Ah
  22.  
  23. xor di,di
  24. mov word ptr es:[di],ax
  25.  
  26. add di,158
  27. mov word ptr es:[di],ax
  28.  
  29. add di,3682
  30. mov word ptr es:[di],ax
  31.  
  32. add di,158
  33. mov word ptr es:[di],ax
  34.  
  35. call delay
  36.  
  37. mov ax,0000h
  38.  
  39. xor di,di
  40. mov word ptr es:[di],ax
  41.  
  42. add di,158
  43. mov word ptr es:[di],ax
  44.  
  45. add di,3682
  46. mov word ptr es:[di],ax
  47.  
  48. add di,158
  49. mov word ptr es:[di],ax
  50.  
  51. call delay
  52.  
  53. push es
  54.  
  55. push 0040h
  56. pop es
  57.  
  58. mov bx,word ptr es:[001Ah]
  59.  
  60. mov ax,word ptr es:[bx]
  61.  
  62. cmp al,1Bh
  63. je exit
  64.  
  65. pop es
  66.  
  67. jmp again
  68.  
  69. exit:
  70. mov ah,4Ch
  71. mov al,00h
  72. int 21h
  73.  
  74. delay proc
  75. push ax
  76. push bx
  77. push cx
  78. push dx
  79.  
  80. xor ah,ah
  81. int 1Ah
  82.  
  83. mov bx,dx
  84. add bx,30
  85.  
  86. tik:
  87. xor ah,ah
  88. int 1Ah
  89.  
  90. cmp dx,bx
  91. jbe tik
  92.  
  93. pop dx
  94. pop cx
  95. pop bx
  96. pop ax
  97.  
  98. ret
  99. delay endp
  100. end start

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

  1. Установка начального сегмента данных и кода на 0000h (код применим только для сегмента данных).
  2. Создание стека размером 100 байт.
  3. Вставка в стек сегмента памяти 0B800h, который является сегментом экрана.
  4. Извлечение из стека сегмента экрана и сохранение его в регистре ES.
  5. Переход к блоку кода, который выводит символ на экран.
  6. Заполнение экрана символами '*' в 4 строки по 64 символа в каждой.
  7. Первая строка: 001Bh (код символа '*') записывается в 4 байта (слова) в строке, начиная с адреса 001Ah в сегменте ES.
  8. Если в регистрах AL и BL не осталось символов '*', то происходит переход к блоку кода после цикла.
  9. Если в регистрах AL и BL ещё остались символы '*', то происходит рекурсивный вызов процедуры delay, которая имитирует задержку в 1 секунду.
  10. Передача в регистры BX, DX, CX и AX адреса начала строки с символами '*'.
  11. Деление на 30 и последующее инкрементирование BX на 30 (возврат к следующей строке с символами '*').
  12. Если значение в регистре DX не равно значению в регистре BX, то происходит рекурсивный вызов процедуры delay.
  13. Выход из рекурсии и возврат в основную программу.
  14. Завершение работы программы.

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


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

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

10   голосов , оценка 4 из 5

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

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

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