linux - NASM中临时变量中值的存储方式

标签 linux nasm x86-64

我正在使用一个名为“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/

相关文章:

linux - 汇编-如何输入中断并将其保存在寄存器中

xcode - 如何设置 Xcode Organizer 以使用 x86_64 二进制文件运行?

c - SHLD/SHRD 指令的 SIMD 版本

assembly - x86 NASM 程序集 - 堆栈问题

linux - 在我的代码末尾进行系统调用后出现程序集段错误

assembly - Intel X86-64 组装教程或书籍

linux - 在 amd64 中调用附近

linux - bash 脚本中的段错误

linux - 链接共享库时的小异常

linux - 设置自定义 shell 脚本和目录的权限