gpt4 book ai didi

assembly - 为什么使用临时寄存器将值传递给段寄存器?

转载 作者:行者123 更新时间:2023-12-02 20:06:21 25 4
gpt4 key购买 nike

我一直在关注一些编写汇编的示例,它们使用临时寄存器将立即值传递到段寄存器。为什么需要先将立即数放入某个寄存器,然后再放入段寄存器?
示例:

movw $0x7c00, %ax
movw %ax, %ds
...
...
movw $0x6000, %ax
movw %ax, %ss

为什么不直接将立即数放入段寄存器中?

movw $0x7c00, %ds
...
movw $0x6000, %ss

最佳答案

因为英特尔没有提供相关说明(mov seg, [ptr], mov seg, imm16 等)。所以你必须这样做。结果很好,因为我们不再使用段/选择器了。

但这并非毫无希望。有带有段的 lea 变体指令,可以一次加载段和偏移量:

les di, [someptr]

(实际上意味着:di = [someptr]; es = [someptr+2])

您还可以push/pop来避免寄存器交换,当然是以内存访问延迟为代价的:

push immediate
pop es

许多寄存器仅专注于某个目的,并且对于某些操作来说不可互换(bx 用于偏移,cx 用于计数,dx 用于结果的高阶,ax 表示结果)。因此,在机器代码文化中,使用临时寄存器并交换它们并不奇怪。

关于assembly - 为什么使用临时寄存器将值传递给段寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25702277/

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