Перемещение строки сверху вниз - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д