我正在使用一个名为“buff”的变量,它在 .bss 部分保留 2 个字节。 然后接受用户的输入并将其存储在“buff”中。
用户输入“1”,然后按“Enter”。所以,31H 和“0D”(回车)进入这个变量。但是这个序列是如何出现在“buff”命名的内存位置的。
是 31 0D 还是 0D 31 ?
当我写:mov al, byte[buff]
那么 al 里面有什么? 0DH 或 31H
此外,如果我写:mov rsi,[buff]
那么 rsi 会指向“0D”还是“31”?
我通过以下方式获取用户的输入:
mov rax, 0
mov rdi, 0
mov rsi, buff
mov rdx, 2
syscall
最佳答案
linux 读取系统调用将字符按照读取顺序存储在缓冲区中。读取的第一个字符存储在 buffer[0] 中,后续字符存储在连续递增的地址中。
因此,mov al, byte[buff]
将加载读取的第一个字符,在您的示例中为 31h。
关于linux - NASM中临时变量中值的存储方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49823540/