Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Программа по выводу строк  (Прочитано 22272 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Fkaв
Гость
« : 15-09-2005 19:34 » 

Нужно написать программу которая выводила бы строчку скажем Hello world по диагоналям.
Тоесть  Hello world
                            Hello world   
                                             Hello world
И с другой стороны.Подскажите как переместить курсор на новую строчку и как его переместить по этой строчке?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 17-09-2005 22:02 » 

Можно сделать по разному, в зависимости от способа вывода.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Fkaв
Гость
« Ответ #2 : 18-09-2005 16:22 » 

В общем желательно использовать offset..
Но и другие методы подойдут
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 18-09-2005 19:54 » 

Ага Смешно

Давай все же определимся, какая ОС, какие условия. Опыт подсказывает, что речь о MS DOS, но о способе вывода: слова "желательно использовать offset" не говорят не о чем. В MS DOS можно:
1) прямой доступ к памяти видеоадаптера;
2) вывод через "int 10h" (Video bios);
3) вывод строк через int 21h (ms dos);
4) сторонние библиотеки.
« Последнее редактирование: 18-09-2005 19:56 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Fkaв
Гость
« Ответ #4 : 19-09-2005 16:11 » 

А ок.Да.Нужно именно под дос, используя int 21 h.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 19-09-2005 17:21 » 

Для смещения строки вправо выведи предварительно нужное число пробелов, либо табуляций через те же ф-ии. Напр.:
Код:
print_n_chars:
; dl - char
; dh - repeat
    mov ah, 2
print_n_chars_1:
    int 21h
    dec dh
    jnz print_n_chars_1
    ret
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Fkaв
Гость
« Ответ #6 : 19-09-2005 18:00 » 

Сорри за ламерские вопросы,но нельзя ли чуточку поподробнее?
Спасибо за помошь.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 19-09-2005 18:31 » 

Fkaв Возьми книжку. Когда я учился Асму, для меня настольной книгой была книга П.Абеля "Ассемблер IBM PC" Сейчас она уже может быть старовата. В книге также посмотри кода для работы со строкой. Те которые я помню 0Ah вроде перевод каретки на следуюшую строку с сохранением позиции. 0Dh перевод каретки в начало строки. 20h -  пробел. Все больше тебе ничего не надо.
Алгоритм простой.
1. Делаеш цикл через регистр CX. Первоначальное значение регистра 0.
2. Печатаеш пробел по количеству равному числу в регистре CX
3. Печатаеш строку "Hello Word".
4. Переводиш каретку на новую строку. Печатая комбинацию 0Ah, 0Dh, 00h .
5. Уведичиваеш регистр CX на количество пробелов отступа.
6. Проверяеш регистр на определенное число
7. Если регистр будет меньше этого числа переходиш на шаг 2
8. Конец программы
« Последнее редактирование: 19-09-2005 18:45 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Fkaв
Гость
« Ответ #8 : 19-09-2005 18:53 » 

Код:
.MODEL small
STACK 100h
DATAseg
LF   EQU 0ah
TAB  EQU 09h

msg1 DB "Hello1 $"
msg2 DB TAB,TAB,"Hello2 ",lf,lf,'$'
msg3 DB TAB,TAB,"Hello3 ",lf,lf,'$'
msg4 DB "Hello4 $"
msg5 DB TAB,TAB,"Hello5 ",lf,'$'
CODEseg
start:
MOV AX,@data
MOV DS,AX
MOV DX,offset msg1
mov ah,TAB
int 21h

MOV DX,offset msg2
mov ah,TAB
int 21h

MOV DX,offset msg3
mov ah,TAB
int 21h

MOV DX,offset msg4
mov ah,TAB
int 21h

MOV DX,offset msg5
mov ah,TAB
int 21h

mov ah,04Ch
mov al,1h
int 21h
END start
Сделал так.А цикл стоит ли?
« Последнее редактирование: 20-12-2007 18:47 от Алексей1153++ » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #9 : 19-09-2005 18:58 » 

Ну как тебе сказать. Твой код плохо транспортируемый. Если скажем тебе надо сделать не пять строк а скажем 15. Ты это дело 15 раз будеш делать?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Fkaв
Гость
« Ответ #10 : 20-09-2005 05:13 » 

Вот.А пожалуйста подскажите как в мою штукенцию энтот код запихнуть?
Записан
aspolyakov
Гость
« Ответ #11 : 24-09-2005 10:30 » 

А как вывести число т.е. значение переменной в дос?
Только начал асм изучать...
Записан
Emo
Гость
« Ответ #12 : 13-10-2005 17:39 » new

d segment 'data'
  t db 10,11 dup(?)
d ends
c segment 'code'
   assume cs:c
start:
        mov ah,1
        int 21h
;al=...
;или
lea dx,t ;<=> mov dx,offset t
mov ah,10
int 21h
;t[0]=10,t[1]='число simvolov',t[1]='n1',...,t[?]='n?'
c ends
   end start
« Последнее редактирование: 20-12-2007 18:52 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines