Чтение строки в сборке TASM x86 - PullRequest
3 голосов
/ 11 апреля 2010

Я пытаюсь прочитать строку от пользователя в сборке TASM, я знаю, что мне нужен буфер для хранения ввода, макс. длина и фактическая длина, но я, кажется, забыл, как именно мы объявляем буфер

моя попытка была чем-то вроде этого

Buffer db 80 ;max length
       db ?  ;actual length
       db 80 dup(0);i think here is my problem but can't remember the right format

Заранее спасибо

1 Ответ

2 голосов
/ 13 апреля 2010

Директива DB (определить байт) используется для выделения блоков памяти байтового размера. Раздел, который идет после БД, указывает значение, которое должно быть помещено в выделенную память. Например, если вы хотите определить один байт памяти со значением 65, вы можете использовать следующую директиву.

SingleByte   DB  65        ; allocate a single byte and write 65 into the byte

Директива DUP (дубликаты) используется для дублирования серии символов. Последовательность символов, подлежащих дублированию, указана в скобках, следующих за DUP. Число перед DUP указывает, сколько раз серия символов должна дублироваться. Например, если вы хотите определить 10-байтовый блок памяти, где каждый байт имеет значение 65, вы можете использовать следующую директиву.

TenBytes     DB  10 DUP(65); allocate 10 bytes and write 65 into each byte

В вашем случае вам все равно, какие значения хранятся в каждом байте в буфере изначально, поэтому вы можете использовать ? в качестве дублируемого байта. Если вы хотите вместо этого инициализировать каждый байт нулем, вы можете заменить ? на 0.

Buffer       DB  80 DUP(?) ; set aside 80 bytes without assigning them any values

Максимальная длина и фактическая длина буфера должны управляться с использованием отдельных переменных. В общем, вы, вероятно, хотите что-то следующего характера.

Buffer       DB  80 DUP(0) ; 80-byte buffer initialized to all zeros
BufferMaxLen DB  80        ; maximum length of Buffer
BufferLen    DB  0         ; actual length of Buffer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...