Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux NASM中临时变量值的存储方式_Linux_Nasm_X86 64 - Fatal编程技术网

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

Linux NASM中临时变量值的存储方式,linux,nasm,x86-64,Linux,Nasm,X86 64,我正在使用一个名为“buff”的变量,它在.bss节中保留2个字节。 然后接受用户的输入并将其存储在“buff”中 用户输入为“1”,然后按“回车”。因此,31H和“0D”(回车)进入这个变量。但是这个序列如何出现在以“buff”命名的内存位置中呢 是31天还是31天 当我写:mov al,byte[buff] 那艾尔里面有什么?0DH或31H 另外,如果我写:movrsi,[buff] 那么rsi会指向“0D”还是“31” 我通过以下方式获取用户的输入: mov rax, 0

我正在使用一个名为“buff”的变量,它在.bss节中保留2个字节。 然后接受用户的输入并将其存储在“buff”中

用户输入为“1”,然后按“回车”。因此,31H和“0D”(回车)进入这个变量。但是这个序列如何出现在以“buff”命名的内存位置中呢

是31天还是31天

当我写:
mov al,byte[buff]
那艾尔里面有什么?0DH或31H

另外,如果我写:
movrsi,[buff]
那么rsi会指向“0D”还是“31”

我通过以下方式获取用户的输入:

    mov rax, 0
    mov rdi, 0
    mov rsi, buff
    mov rdx, 2
    syscall

linux读取系统调用将字符按读取顺序存储在缓冲区中。读取的第一个字符存储在缓冲区[0]中,后续字符存储在连续递增的地址中


因此,
mov al,byte[buff]
将加载读取的第一个字符,在您的示例中为31小时。

linux读取系统调用将字符按读取顺序存储在缓冲区中。读取的第一个字符存储在缓冲区[0]中,后续字符存储在连续递增的地址中



因此,
mov al,byte[buff]
将加载读取的第一个字符,在您的示例中为31小时。

您使用什么代码来接收用户输入并将其存储在buff中?NASM 64位编程我通过以下方式从用户处获取输入:mov rax,0 mov rdi,0 mov rsi,buff mov rdx,2 syscall Linux OS通常不会在缓冲区中存储0Dh。输入时,它通常将回车转换为换行符(0Ah)。您使用什么代码来接收用户输入并将其存储在buff中?NASM 64位编程我通过以下方式从用户处获取输入:mov rax、0 mov rdi、0 mov rsi、buff mov rdx、2 SYSCALLINUX OS is USED INUX通常不会将0Dh存储在缓冲区中。输入时,它通常将回车转换为换行符(0Ah)。@Jester I被告知x86 achitecture遵循little endian,因此在buff中,enter将存储在较低的内存位置,“31”存储在较高的内存地址。但是,根据您的说法,它遵循big-endian。如果linux不在buff中存储0DH,那么为什么它的大小必须为2字节。小endian与存储字节无关。它只影响存储大于一个字节的内容。Linux通常在从tty输入时将回车转换为换行符。那么,“Enter”和“31H”一起构成2个字节,那么为什么它不在“buff”中使用little endian作为存储呢。另外,如果你所说的是正确的,那么对于任何存储大于2字节的变量,它总是以大端顺序存储值,这当然没有任何意义@Jester I被告知x86架构遵循little endian,因此在buff中,enter将存储在较低的内存位置,“31”将存储在较高的内存地址。但是,根据您的说法,它遵循big-endian。如果linux不在buff中存储0DH,那么为什么它的大小必须为2字节。小endian与存储字节无关。它只影响存储大于一个字节的内容。Linux通常在从tty输入时将回车转换为换行符。那么,“Enter”和“31H”一起构成2个字节,那么为什么它不在“buff”中使用little endian作为存储呢。另外,如果你所说的是正确的,那么对于任何存储大于2字节的变量,它总是以大端顺序存储值,这当然没有任何意义!!