Перемещение строки сверху вниз - Assembler

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

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

Помогите, пожалуйста. Нужно: задать вывод строки символов и ее перемещение сверху-вниз.

Решение задачи: «Перемещение строки сверху вниз»

textual
Листинг программы
  1. .286
  2. .model tiny
  3. .code
  4. org 100h
  5. start:
  6.     mov ax,3
  7.     int 10h            ;устанавливаем текстовый видеорежим 80х25
  8.  
  9.     mov ah, 09h
  10.     lea dx, Prompt
  11.     int 21h
  12.     mov ah, 0Ah
  13.     lea dx, kbdBuffer
  14.     int 21h
  15.     mov al, len ;сохраняем длину строки в 2-хбайтовой переменной, чтобы было проще
  16.     mov ah, 0 ;работать с духбайтными регистрами при вычислениях
  17.     mov num, ax
  18.  
  19.     push 0B800h        ; адрес видеобуфера
  20.     pop es             ;Производим вычисления для того, чтобы разместить ЛЮБУЮ рамку в цетре экрана.
  21.     mov ax,09DBh
  22.     mov cx,80*25       ;размер страницы видеопамяти
  23.     mov di,0
  24.     rep stosw          ;красим экран в яркосиний цвет
  25.  
  26. @@1:
  27.     mov di, 80     ;вычисляем место для центрированной надписи
  28.     sub di, num
  29.     and di, 0FEh
  30. @b:
  31.     mov si,offset mes   si адрес первой буквы слова
  32.     mov cx, num          ;заносим в сх длинну строки
  33.     push cx
  34.     ;копируем строку
  35.     mov ah,9Fh         ;аттрибуты символов
  36. @@2:
  37.     lodsb
  38.     stosw
  39.     loop @@2
  40.     ;задержка
  41.     call delay
  42.     ;забьем пробелами строку
  43.     sub di, num
  44.     sub di, num
  45.     mov ax,09DBh ;цвет (атрибут) b символ фона
  46.     pop cx
  47.     rep stosw
  48.  
  49.     mov ah, 01h ;если нажата любая клавиша - завершить программу
  50.     int 16h
  51.     jnz @@Exit
  52.  
  53.     ;конец экрана?
  54.     cmp di, 160*25
  55.     jae @@1     ;если да, то переместимся на первую строку
  56.     add di, 160 ;если нет, то на следующую строку
  57.     sub di, num
  58.     sub di, num
  59.     jmp short @b
  60.  
  61. @@Exit:
  62.     mov ah, 00h ;считываем код нажатой клавиши, чтобы она не выводилась в командной строке
  63.     int 16h
  64.  
  65.     int 20h              ;завершаем программу
  66.  
  67. kbdBuffer db 20
  68. len       db 0
  69. mes       db 20 dup(0)
  70.  
  71. num       dw 0
  72.  
  73. Prompt    db 'Input string: ', '$'
  74.  
  75. DelayTime       dd      500*1000
  76.  
  77. Delay   proc
  78.         push    ax
  79.         push    cx
  80.         push    dx
  81.         mov     ah,     86h
  82.         mov     al,     00h
  83.         mov     dx,     word ptr DelayTime
  84.         mov     cx,     word ptr DelayTime+2
  85.         int     15h
  86.         pop     dx
  87.         pop     cx
  88.         pop     ax
  89.         ret
  90. Delay   endp
  91.  
  92. end start

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


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

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

9   голосов , оценка 3.333 из 5

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

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

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