gpt4 book ai didi

assembly - 冒号 : mean in x86 assembly GAS syntax as in %ds:(%bx)? 是什么意思

转载 作者:行者123 更新时间:2023-12-02 02:34:27 28 4
gpt4 key购买 nike

我是 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) ?

最佳答案

在实模式下,段寄存器用于提供20位地址。在这种情况下,数据段寄存器ds提供地址的“高”16位:(0x1234 << 4 = 0x12340),段中的偏移为给出:0x5678,产生:0x179b8。

数据段寄存器是隐式的,因此没有必要使用:ds:(%bx)。如果您使用另一个段寄存器,例如 es,则需要显式指定。

我希望我能理解你的问题。至于为什么它不写成(%ds:%bx),这实际上只是一个你所坚持的语法决定。

关于assembly - 冒号 : mean in x86 assembly GAS syntax as in %ds:(%bx)? 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18736663/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com