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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: как через прерывание биоса (int 10h) вывести строку ?  (Прочитано 14196 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Seek
Гость
« : 28-03-2004 19:33 » 

Перцы выручите пожалуйста ! Как через прерывание биоса (int 10h) вывести строку ? пожалуйста какую-нить процедурку. Я пишу на TASM
Символ то я могу =) , а вот строку цикл нужен. Че-то недогоняю =)
ПОМОГИТЕ!
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #1 : 29-03-2004 09:19 » 

Seek, тут не только перцы бывают...

int 10h выводить строки не умеет - только символы. Воспользуйся DOS - int 21h ф-ия 2. Или напиши свою ф-ию вывода по одному символу из буфера до некого ограничителя (в DOS используется '$', а в С - 00h) через int 10h.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Seek
Гость
« Ответ #2 : 29-03-2004 09:41 » 

Да дело в том, что мне нужно использовать именно 10-е прерывание  (нет времени разбираться с видеопамятью =) ) У меня акромя биоса ничего нет =)
Дык вот я, уже битый час ломаю голову над этой функцией. ЭВРИКА! =)))
Допустим объявим переменную mess (mess db 'TEST'), загрузим это дело в AL
он прочитает только первый символ, далее надо как-то это дело продвинуть
еще на один символ. ВОПРОС: как продвинуть ?
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #3 : 29-03-2004 10:37 » 

Не, я конечно понимаю, что ты только учишся ассемблеру, но не мешало бы сначала почитать читературу, а потом уже браться за написание программ...

Решение типовое: цикл с изменением указателя.
Код:

; На входе{ DS{SI - строка текста, терминированаая нулем.

print{  ; точка входа
    push si  ; сохраняем регистры, которые изменяем - укажи здесь какие надо
    push ax
print_loop{  ; цикл перебора
    lodsb  ; теперь в AL находится символ, а SI указывает на следующий байт строки
    test al,al
    jz print_exit  ; если символ 00h, то выходим из цикла
    ........ ; тут вставь зывов нужной ф-ии int 10h
    jmp print_loop  ; переход к следующей итерации цикла
print_exit{
    pop ax  ; востанавливаем сохраненные регистры - заметь, что порядок их обратный
    pop si
    ret

; использование{

message db "test",0

    mov si,offset message
    call print
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Seek
Гость
« Ответ #4 : 29-03-2004 10:48 » 

Огромное тебе спасибо !!!! Удачи =)
Записан
c0d310rd
Гость
« Ответ #5 : 16-06-2004 01:23 » new

нет, значит, такой функции int 10h? ну-ну...

out_string proc near   ;before call addr to es:bp, len to cx, coord to dx
       
    pusha    

    mov ax, 1301h        ;func & mode
    mov bx, 0ah           ;page & color
    int 10h                      
         
    popa
   
    ret    

out_string endp

wbr,
c0d310rd
Записан
RXL
Технический
Администратор

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

WWW
« Ответ #6 : 16-06-2004 07:56 » 

c0d310rd, спасибо за поправку. Я уж и не помню когда последний раз под доса писал. Давно было - уже стал забывать.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines