Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализовать бегущую строку по диагонали 
:(
    Опции темы
FRAZY
Дата 17.5.2014, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 17.5.2014

Репутация: нет
Всего: нет



Здравствуйте! У меня есть код, в котором бегущая строка идет справа налево, как сделать так, чтобы эта строка пошла по диагонали(без разницы из какого в какой угол и сверху или вниз)?  smile 

Код

.model small
.stack 1000h
.data 
x1  equ 10              ;начальная координата выводимой строки
x2  equ 40              ;конечная координата выводимой строки
llen    equ x2-x1+1         ;длина строки
 
txt db llen dup(' ')        ;текст "бегущей" строки
    db 'ABC123'
    db llen-1 dup(' ')
txtl    equ $-txt           ;длина "бегущей" строки
 
movnm   equ txtl-llen+1     ;количество сдвигов "бегущей" строки
 
deltime equ 30              ;задержка (в сотых долях сек.) между сдвигами "бегущей" строки
  
.code
    mov ax,@data            ;загружаем адрес сегмента данных
    mov ds,ax
 
    mov ah,0            ;очищаем экран установкой стандартного текстового видеорежима
    mov al,3
    int 10h
 
m1: mov si,offset txt       ;загружаем адрес начала текста
    mov cx,movnm            ;загружаем количество сдвигов строки
 
m2: push cx
    
    mov dh,12           ;устаналиваем курсор в позицию начала строки
    mov dl,10
   
    call locat
 
    call tprint         ;отображаем строку
 
    call delay          ;формируем временную задержку

 
    inc si              ;переходим к следующей позиции в строке
    pop cx              ;и выполняем отображение остальной части строки в цикле
    loop m2
 
    jmp m1              ;переходим к отображению строки с начала
 
exit:   mov ah,4ch          ;завершаем программу
        int 21h


delay   proc near
    mov ah,2ch          ;получаем текущее время
    int 21h
    mov bl,dl           ;сохраняем сотые доли секунды
 
del1:   mov ah,2ch          ;получаем текущее время
    int 21h
 
    sub dl,bl           ;корректируем время (при переходе через секунду)
    jge del2
    add dl,100
 
del2:   cmp dl,deltime          ;если время не прошло, то ожидаем
    jb del1
 
    ret
delay   endp

                    ;при входе:
                    ;DH - Y-координата
                    ;DL - X-координата
locat   proc near
    mov ah,2            ;устанавливаем позицию курсора
    mov bh,0
    int 10h
 
    ret
locat   endp

                    ;при входе:
                    ;SI - начальный адрес текста
tprint  proc near
    mov ah,40h          ;выводим строку
    mov bx,1
    mov cx,llen
    mov dx,si
    int 21h
 
    ret             ;выход из подпрограммы
tprint  endp

end                 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0362 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.