为什么需要子寄存器来从数据结构中检索字? [ASM]

问题描述 投票:0回答:1

我正在学习asm x64,更准确地说,我目前正在学习使用数据结构。 我的书告诉我必须使用 subregister 将数据从结构存储到 rdi,但它没有解释原因。

有人可以启发我吗?

提前致谢。

我尝试了这段代码但没有成功(这是预期的):

MOV rdi, [my_struc+my_field]

此代码按预期工作:

XOR rbx, rbx
MOV bx, [my_struc+my_field]
MOV rdi, rbx
assembly data-structures nasm cpu-registers
1个回答
0
投票

非常感谢@Jester,我现在明白多了

这是我的数据结构:

section .bss
    STRUC sockaddr_in
        sin_family:     RESW 1 ; 1*2 bytes
        sin_port:       RESW 1 ; 1*2 bytes
        sin_address:    RESD 1 ; 1*4 bytes
        sin_zero:       RESD 2 ; 2*4 bytes
    ENDSTRUC


section .data
    sa: ISTRUC sockaddr_in
        AT sin_family,  DW  0x02        ; AF_INET, see "man socket"
        AT sin_port,    DW  0x5C11      ; 4444 Little Endian
        AT sin_address, DD  0x0100007f  ; 127.0.0.1 Little Endian
        AT sin_zero,    DD  0x0
    IEND

我以为MOV会自动归零扩展,但看起来实际上不是。

© www.soinside.com 2019 - 2024. All rights reserved.