代码之家  ›  专栏  ›  技术社区  ›  asn

NASM 64位编程中遵循的Endianness

  •  -1
  • asn  · 技术社区  · 6 年前

    我有两种情况:

     arr dq 1234567887654321H
    
     mov rsi,arr 
    
     mov rbx,[rsi]
    

    现在,正如我们所知,rsi总是指向内存中1字节的位置,x86遵循小端。rsi是否指向21小时,然后这21小时进入rbx,或者arr中的完整值转移到rbx?

    二、

      tempbuff resb 16
      arr resb 1234567887654321H
      mov rbx,qword[arr]
      mov rsi,tempbuff
      mov [rsi],rbx
    

    以上陈述摘自不同章节,并在此处进行合并,以便重点关注重要细节。

    现在,根据以上语句,rbx存储arr的全部内容。

    rsi指向tempbuff的第一个内存位置。然后是mov,rsi,rbx 将rbx的全部内容存储到tempbuff,还是将rbx的最低1字节(此处为21)存储到rsi所指的位置(1字节位置)?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Kamil.S    6 年前

    对于案例 1. :

    mov rbx,[rsi]
    

    Nasm 隐式解析右侧指向的内存大小 ,[r64] 基于左侧目标 r64 因此 rsi 64位地址是否指向64位 [rsi] 将移动到64位的值 rbx 登记
    这可以在中明确说明 Nasm公司

    mov rbx,qword [rsi]
    

    它暗示了问题中的陈述 “rsi始终指向内存中位置的1字节” 不准确的 .应该是 有效的 对于以下说明:

    mov rbx,byte [rsi]
    

    其中第一次遇到由64位指向的字节 rsi指数 地址将成为 重组合异种骨 最低有效字节。

    对于案例 2. :

    mov [rsi],rbx
    

    整个64位 重组合异种骨 值移动到64位所指的内存中 rsi指数 住址

    从聊天的讨论中,我可以得出结论,OP真正的怀疑是小端点是否会影响寄存器和内存。

    exampleQuadWord dq 0102030405060708H ; this is represented in memory as 0807060504030201
    exampleQWordWithByte dq 1 ; this is represented in memory as 0100000000000000
    

    在一个简单的例子中

    mov rbx,2
    mov rsi, exampleQWordWithByte
    mov [rsi],rbx
    ; exampleQWordWithByte in memory is now 0200000000000000