关于汇编中mov命令的问题

Questions on mov command in assembly

我在使用寄存器和存储数据方面遇到了一些问题。

  1. 在我读入一个字符之前,我想要一个大小为 100 的缓冲区,寄存器 ESI 指向该缓冲区。 我用这个吗?

mov esi, 100 存储大小为 100 的缓冲区, 然后

mov esi, [al]
inc esi

要存储我输入到esi中的当前字符并将其移动到下一个位置以存储新字符?

我也找不到如何正确检查是否输入了空终止字符。 我试过 cmp al, 0xa 检查新行 cmp eax, -1 检查eof。

注意:我有一个名为 read_char 的函数来读入一个字符以放入 al 寄存器

要在 NASM 中定义缓冲区,您可以使用 buffer times 100 db 0

你得到它的地址mov esi, buffer

AL中的字符存入其中,并将地址写成mov [esi], alinc esi

how to properly check if a null terminated character is entered

null 将是字符后面的字节。为此,您需要比较 word。读取字符和后面的字节,然后比较:

mov ax, [esi]
cmp ax, 0x000A

这会测试换行符是否是这个以零结尾的字符串中的最后一项。