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

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

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

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

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

textual
Листинг программы
.286
.model tiny
.code
org 100h
start:
    mov ax,3
    int 10h            ;устанавливаем текстовый видеорежим 80х25
 
    mov ah, 09h
    lea dx, Prompt
    int 21h
    mov ah, 0Ah
    lea dx, kbdBuffer
    int 21h
    mov al, len ;сохраняем длину строки в 2-хбайтовой переменной, чтобы было проще
    mov ah, 0 ;работать с духбайтными регистрами при вычислениях
    mov num, ax
 
    push 0B800h        ; адрес видеобуфера
    pop es             ;Производим вычисления для того, чтобы разместить ЛЮБУЮ рамку в цетре экрана.
    mov ax,09DBh
    mov cx,80*25       ;размер страницы видеопамяти
    mov di,0
    rep stosw          ;красим экран в яркосиний цвет
 
@@1:
    mov di, 80     ;вычисляем место для центрированной надписи
    sub di, num
    and di, 0FEh
@b:
    mov si,offset mes  ;в si адрес первой буквы слова
    mov cx, num          ;заносим в сх длинну строки
    push cx
    ;копируем строку
    mov ah,9Fh         ;аттрибуты символов
@@2:
    lodsb
    stosw
    loop @@2
    ;задержка
    call delay
    ;забьем пробелами строку
    sub di, num
    sub di, num
    mov ax,09DBh ;цвет (атрибут) b символ фона
    pop cx
    rep stosw
 
    mov ah, 01h ;если нажата любая клавиша - завершить программу
    int 16h
    jnz @@Exit
 
    ;конец экрана?
    cmp di, 160*25
    jae @@1     ;если да, то переместимся на первую строку
    add di, 160 ;если нет, то на следующую строку
    sub di, num
    sub di, num
    jmp short @b
 
@@Exit:
    mov ah, 00h ;считываем код нажатой клавиши, чтобы она не выводилась в командной строке
    int 16h
 
    int 20h              ;завершаем программу
 
kbdBuffer db 20
len       db 0
mes       db 20 dup(0)
 
num       dw 0
 
Prompt    db 'Input string: ', '$'
 
DelayTime       dd      500*1000
 
Delay   proc
        push    ax
        push    cx
        push    dx
        mov     ah,     86h
        mov     al,     00h
        mov     dx,     word ptr DelayTime
        mov     cx,     word ptr DelayTime+2
        int     15h
        pop     dx
        pop     cx
        pop     ax
        ret
Delay   endp
 
end start

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


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

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

9   голосов , оценка 3.333 из 5
Похожие ответы