我正在学习asm x64,更准确地说,我目前正在学习使用数据结构。 我的书告诉我必须使用 subregister 将数据从结构存储到 rdi,但它没有解释原因。
有人可以启发我吗?
提前致谢。
我尝试了这段代码但没有成功(这是预期的):
MOV rdi, [my_struc+my_field]
此代码按预期工作:
XOR rbx, rbx
MOV bx, [my_struc+my_field]
MOV rdi, rbx
非常感谢@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会自动归零扩展,但看起来实际上不是。