1 / 1 / 0
Регистрация: 15.12.2013
Сообщений: 68

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

13.05.2014, 08:45. Показов 3208. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru