在看《一个操作系统的实现》这本书的时候,给段寄存器赋值都是这样执行的:

1
2
mov ax, cs
mov ds, ax

或是

1
2
mov ax, 段基址
mov gx, ax

为什么8086的设计是不能拼接给段寄存器赋值,而是要借助通用数据寄存器。

查了些资料也没有得到好的解释。

有一种说法是:数据总线只与数据数据寄存器相连,并没有与段寄存器相连,但这个说明只是说出了最终的设计,并没有说到原因,而且也不能解释为什么不能使用mov ds, cs这种段寄存器之间的赋值也不允许。

还有一种说明是:段寄存器只在有限的场合有用,大部分情况下是自动设置的,不需要应用程序编写者手动改变其中的值,所以如果增加这种指令通路没有必要,会增加复杂度,所以没有这样设计。这种说法说的有一定道理。

Comments

2014-11-09