mov指令为什么不能从内存传给寄存器入mov ds,ds:[bx]

是段寄存器!!
2025-03-02 03:22:02
推荐回答(2个)
回答1:

intel规定段寄存器不能用变址寻址的办法来赋值
要赋值必须由寄存器直接寻址方式,但是其中有一个必须是通用寄存器,两个源操作数都是段寄存器也是不合法的,另外,也可以有如下几种赋值方式
1.堆栈pop ds
2.lds 地址传送指令
应该还有其他的,但是不要认为用这样的指令赋值很帅。
PUSH 占 15T,POP 占12T,除非不得已,不可随便使用。
能用寄存器直接赋值就用寄存器直接赋值的方式。

回答2:

intel cpu 没有从内存到段寄存器直接过渡的操作码,所以只能借助其他通用寄存器中转了:

mov ax, ds:[bx]
mov ds, ax