Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Как вывести считанную строку


Автор: Innuendo108 22.10.2010, 23:26
Чего-то я совсем запутался в этих функциях.

Цитата

Функция 0Ah
Выполняет ввод с клавиатуры в буфер строки символов.
• Вызов:
аh= 0аh
ds: dx = адрес буфера ввода
• Возвращаемое значение:
Строка символов по указанному адресу
Примечание: dx содержит смещение буфер вывода, DS - сегментный адрес. Буфер вывода имеет следующую структуру: 
0-й байт содержит максимальное количество символов в буфере;
1-й байт содержит количество реально введенных символов;
начиная со 2-го размещён буфер для ввода размером не менее указанного в в 1-м байте.


И там же пример в учебнике:

Код

data segment
buffer db 11 ; Нулевой байт буфера
entered db (?) ; Число введенных символов
string db 11 dup (?) ; Введенные символы
data ends

code segment
assume cs:code , ds:data
mov ax, data
mov ds, ax

lea dx, buffer ; Адрес буфера в dx
mov ah, 0ah ; Номер функции в аh
int 21h ; Вызов функции

mov ax, 4c00h;
int 21h;
code ends



А теперь строка где? Она по адресу dx? или к ней можно обращаться как к переменной string. Что, когда я в сегмент данных по очереди пишу переменные, то он резервирует память прямо друг за другом. Т.е. это же я могу ввести и так? :
Код

; data
buffer db 11, ?, 11 dup (?)
;code
; точно так же


Главный вопрос, как мне вывести эту строку? И вообще как лучше с ней работать, как к ней обращаться?

Автор: iff 23.10.2010, 13:17
1. Да, вы можете обращаться к введенной строке как к переменной string.
2. Да, вы можете ввести и так, но тогда к введенной строке неудобно будет обращаться. (к ней придется обращаться вот так: buffer[2])
3.Вывести строку можно при помощи другой функции  21h прерывания или другого, например функцией 40h прер. int 21h (она вообщето предназначена для вывода в файл, но если дискриптор файла указать равным 1, то вывод осуществится на экран, а если вавод перенаправлен, то туда, куда он соответственно перенаправлен.)
Код

.386
mov ah,40h
mov bx,1
movzx cx, entered
lea dx, string
int 21h

Или например можно воспользоваться видеосервисом BIOS (посмотрите ф-ция 13h прер. int10h: [URL=http://www.codenet.ru/progr/dos/int_0009.php )]http://www.codenet.ru/progr/dos/int_0009.php)[/URL]

Добавлено через 8 минут и 53 секунды
Или ф-цией 09h  int 21h
http://fantom-lab.narod.ru/Assembler/MS_DOS/1133.htm

Автор: Innuendo108 26.10.2010, 03:11
ясно, спасибо за ответы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)