我是 x86 程序集的新手,我正在尝试理解本文档中的代码:http ://www.cs.cmu.edu/~410-s07/p4/p4-boot.pdf第 3 页:
movw $0x1234, %ax
movw %ax, %ds
movw $0x5678, %bx
# The following instruction is the same as "movw $0x1337, (%bx)".
movw $0x1337, %ds:(%bx) # Places 0x1337 into memory word 0x179b8.
# Segment Base: %ds << 4: 12340
# Offset: %bx: + 5678
# -------
# Linear Address: 179b8
但我不理解命令:
movw $0x1337, %ds:(%bx) # Places 0x1337 into memory word 0x179b8.
为什么连接 %ds 与 (%bx) 与 ((%ds << 4) | %bx) 相同?
因为我处于实模式(16 位),串联不应该是 %ds << 8?而不是 %ds << 4?
为什么括号就在 %bx 附近?而不是围绕整个结构,例如: movw $0x1337, (%ds:%bx) ?