assembly - 在 TASM x86 程序集中读取字符串

标签 assembly

我正在尝试从 TASM 程序集中的用户读取一个字符串,我知道我需要一个缓冲区来保存输入,最大值。 length 和 actual length ,但我好像忘了我们到底是怎么声明一个缓冲区的

我的尝试是这样的

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

提前致谢

最佳答案

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

关于assembly - 在 TASM x86 程序集中读取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2617362/

相关文章:

gcc - 什么 '__asm__(".previous");'意思?

assembly - 如何在 MOV 和 LEA 指令后确定 AX 中的结果

assembly - 在 MASM32 上包含语法

汇编语言循环

assembly - 学习汇编语言的先决条件

c - x87 浮点指令转换为 C 代码

c - 在 COM 程序中保存寄存器状态

assembly - MIPS 系统调用和 $t 寄存器

c - shellcode 中的地址在执行过程中发生变化

c++ - 如何在汇编函数中将元素数组作为参数传递时转发 ARM 寄存器的地址指针