Linux NASM中临时变量值的存储方式
我正在使用一个名为“buff”的变量,它在.bss节中保留2个字节。 然后接受用户的输入并将其存储在“buff”中 用户输入为“1”,然后按“回车”。因此,31H和“0D”(回车)进入这个变量。但是这个序列如何出现在以“buff”命名的内存位置中呢 是31天还是31天 当我写: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
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字节的变量,它总是以大端顺序存储值,这当然没有任何意义!!