我正在尝试从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
提前致谢
答案 0 :(得分:2)
DB(定义字节)指令用于分配字节大小的内存块。 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