Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 15.12.2013
Сообщений: 68

Реализовать бегущую строку по диагонали

13.05.2014, 08:45. Показов 3154. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, вот такой код, выводится бегущая строка и идет справа налево, что нужно дописать, чтобы она пошла по диагонали?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
.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
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.05.2014, 08:45
Ответы с готовыми решениями:

Реализовать бегущую строку
В Borland C++. Реализовать бегущую строку, которая через определенный интервал времени изменяет направление движения. AnsiString =...

Реализовать бегущую строку
нужно математически решить задачу бегущая строка, помогите

Реализовать в окне бегущую строку
Помогите пожалуйста, как сделать бегущаю строку, и простую строку ? Как сделать чтобы бегущая строка, строка обычная, и фото (компонент...

14
1 / 1 / 0
Регистрация: 15.12.2013
Сообщений: 68
15.05.2014, 11:17  [ТС]
Ну кто нибудь отзовитесь!
0
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
16.05.2014, 00:55
Обязательно изменить эту программу или можно использовать другую?
0
1 / 1 / 0
Регистрация: 15.12.2013
Сообщений: 68
16.05.2014, 06:39  [ТС]
AFP, Можно другую, главное чтобы работало и понятно было, ну и не очень сложно
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
16.05.2014, 08:20
UchenikO,
строка по диагонали сверху-вниз или снизу-вверх? слева-направо или справа-налево? (уже 4 варианта), попробуй для начала гнать одну букву вместо строки, для этого твою программу нужно переделывать не очень сильно
0
programmer
 Аватар для Thread
2391 / 525 / 69
Регистрация: 01.06.2011
Сообщений: 3,639
16.05.2014, 08:31
UchenikO

координаты ведь в процедуре задаються.
только тебе строку еще затирать надо будет.или весь экран стирай.
0
1 / 1 / 0
Регистрация: 15.12.2013
Сообщений: 68
16.05.2014, 09:04  [ТС]
Снизу - вверх, справа налево - так бы было отлично. А зачем выводить одну букву?

Добавлено через 15 минут
Mikl___,
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
16.05.2014, 09:49
Цитата Сообщение от UchenikO Посмотреть сообщение
А зачем выводить одну букву?
Не догадываешься? Чтобы попробовать программу написать самому... Ты попробуй, понравится - за уши не оторвёшь
0
1 / 1 / 0
Регистрация: 15.12.2013
Сообщений: 68
16.05.2014, 09:56  [ТС]
Mikl___, Я поэтому на форум и обратился потому что не знаю, а ваш совет только "попробуй, понравится", я не прошу писать за меня все, дайте хотя бы совет
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
16.05.2014, 09:58
Цитата Сообщение от UchenikO Посмотреть сообщение
я не прошу писать за меня все, дайте хотя бы совет
А я тебе что даю?
0
1 / 1 / 0
Регистрация: 15.12.2013
Сообщений: 68
16.05.2014, 10:00  [ТС]
Mikl___, Гнать одну букву.. и какой с этого прок?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
16.05.2014, 10:01
UchenikO,
попробуй для начала, а я подскажу как букву заменить на строку
0
1 / 1 / 0
Регистрация: 15.12.2013
Сообщений: 68
16.05.2014, 22:08  [ТС]
Mikl___, Пробовал весь день, получается что нужно делать так: вывести символ 1 раз, затем я создавал другую метку, в которой прописывал адрес начальный и увеличил inc dh, inc dl, выводится символ, затем другая метка, в которой опять увеличивается адрес.. Но это не вариант так создавать метки каждый раз, блин..
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
19.05.2014, 05:30
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
; masm dos exe #
.286 
.MODEL small
.data
Hello byte "A  ",10,"B  ",10,"C  ",10,"1  ",10,"2  ",10,"3  ",10," $"
coord dw 123Ch
.code
start:  mov ax,@data
    mov ds,ax
    mov ax,3
    int 10h
    mov cx,21
a0: push cx
    mov dx,coord ;Y-координата и X-координата
        mov ah,2            ;устанавливаем позицию курсора
        int 10h
    mov ah,9
    mov dx,offset Hello
    int 21h
        mov ah,2Ch          ;получаем текущее время
        int 21h
        mov bl,dl           ;сохраняем сотые доли секунды 
del1:   int 21h          ;получаем текущее время 
        sub dl,bl           ;корректируем время (при переходе через секунду)
        jge del2
        add dl,100 
del2:   cmp dl,30          ;если время не прошло, то ожидаем
        jb del1
        sub coord,103h
    pop cx
    loop a0
    mov ah,0
    int 16h
    mov ah,4Ch
    int 21h
End start
1
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
19.05.2014, 12:10
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
;tasm dos com
.model tiny
.code
.386
org 100h    ; СОМ-программа
start:
    mov ah,9
    lea dx,stringtxt
    int 21h
 
    mov ah,10       ;ввод строки
    lea dx,string
    int 21h
 
;si на конец строки
    mov si,dx
    mov cx,[si]
    shr cx,8
    add si,cx
    inc si
 
    mov ax,3        ;очистка экрана
    int 10h
 
    push 0B800h ;видеопамять
    pop es
 
;вывод введенной строки
    mov di,50*2 ;79*2 правый верхний угол 
        ;80 символов в строке по 2 байта (символ и атрибут)на символ 
    std     ;читать строку с конца к началу
m1:
    lodsb   ;читать
    stosb   ;писать в видеопамять
    add di,159  ;следующая строка
    loop m1
 
    cld     ;изменить направление для строк
    push es
    pop ds  ;видеопамять
 
    mov si,(158*24)+(50*2) ;на последний символ в последней строке
    mov bp,si   ;сохранить
m3:
    mov si,bp
    mov di,si
    lodsw   ;прочитать в последней строки символ и
    mov bx,ax   ;сохранить его
 
    mov cx,24   ;остальных строк на экране (25-1)
    sub si,160  ;предпоследняя строка
 
;читать/писать символы со смещением на символ влево и на строку выше 
m2:
    lodsw   ;читать символ с атрибутом
    stosw   ;писать на 1 строку ниже
    mov di,si
    sub di,2
    sub si,160
    loop m2
 
    mov ax,bx   ;писать сохраненный символ из 25 строки 
    stosw   ;в верхнюю 1 строку
 
    call wait   ;задерка
 
    in al,60h   ; прочитать скан-код последнего символа,
    cmp al,81h  ; если это 81h (отпускание клавиши Esc),
    jz short exit ; выйти из программы
    jmp short m3
exit:
    ret     ;выход из программы
;------------------------------------------------------------
wait    proc
    mov ah,0
    int 1Ah
    add dx,18  ;18*3 задержка примерно на 3 секунды
    adc cx,0
    mov di,dx
    mov si,cx
DELAY:
    int 1Ah
    cmp cx,si
    ja short EndDELAY
    cmp dx,di
    jb short DELAY
EndDELAY:
    ret
wait    endp
;------------------------------------------
stringtxt db 13,10,'Esc - exit',13,10
          db       'Enter string: $'
string db 26    ;25 строк + enter, 1 символ в строке
;------------------------------------------
    end start
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.05.2014, 12:10
Помогаю со студенческими работами здесь

Реализовать бегущую строку, которая через определенный интервал времени изменяет направление движения
Реализовать бегущую строку, которая через определенный интервал времени изменяет направление движения

Реализовать бегущую строку, которая через определенный интервал времени изменяет направление движения
Задание:Реализовать бегущую строку, которая через определенный интервал времени изменяет направление движения. Среда разработки Visual...

Изобразить бегущую строку
Написать программу которая изображает ''бегущую строку' Графически'!!!

Выполнить бегущую строку
3. Дано слово (например, «Внимание!»). Выполнить бегущую строку (движение - справа до конца экрана)

Опознать бегущую строку
Всем добрый день! Попалась мне в руки бегущая строка неизвестного производителя и не в полной комплектации. Помогите опознать ее или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru