3

我有一些关于我正在学习的组装的问题,我对此感到困惑。

  1. bxbpss和有什么不一样sp?书上说那bx是基址寄存器,bp是基址指针。这是否意味着它们是同一件事?

  2. mov ax, bx, mov ax, [bx],mov ax, bp和有什么区别mov ax, [bp]

  3. disp索引寻址模式是什么意思?例如mov al, disp[bx]?还是mov al, disp[si]?书上没有解释的意思disp

  4. 寄存器在 CPU 中而不是 RAM 中吗?

    请原谅我的英语,这不是我的第一语言。

4

2 回答 2

8

哦,天哪,这些 16 位寄存器在 1984 年几乎过时了。对不起,你有一本旧书。尽管如此,现代处理器仍然使用这些东西,所以你的问题是有道理的。实际上,我当时写了一些 16 位汇编,奇怪的是我记得它。哎呀。

  1. BX、BP、SS 和 SP 只是四个独立的寄存器。BX、BP 和 SP 是通用寄存器(其他 16 位 GPR 是 AX、CX、DX、SI 和 DI),SS 是段寄存器,您不经常使用(它在你参考BP和SP)。对这些寄存器中的每一个远的完整答案将占用比通常的 SO 答案更多的空间。但是要回答您的具体问题,BX 和 BP 是两个不同的寄存器,而不是同一个寄存器。BP 通常用于索引堆栈帧,而 BX 通常用于索引结构或数组。

  2. MOV AX, BX将 BX 的内容移动到 AX 中,同时MOV AX, [BX]将值在 DS:BX 中的内存位置的内容移动到 AX 中。也就是说,如果 BX 包含值 500,则第一条指令将 500 移动到 AX,而第二条指令将地址 500 的内容(从技术上讲,从段 DS 的开始后 500 个字节)移动到 AX。(请注意,像这样的 MOV 指令在不同的汇编程序(如 MASM 和 NASM)中解释的方式存在一些细微差别。)

  3. DISP 只是“位移”的缩写,它是一个添加到寄存器中的值的数字,用于计算堆栈帧中变量的地址或结构中的元素的地址。在这样的指令MOV AX, [BX+25]中,25 是位移。

  4. 是的,寄存器是 CPU 的一部分。

于 2011-08-31T05:11:12.383 回答
2

4:在x86架构中,寄存器确实在CPU中,而不是在RAM中。好吧,我不知道任何 1970 年后的架构中寄存器没有出现在 CPU 中,但我确实知道寄存器与 RAM 位于相同地址空间的架构(例如 8051)——或者至少是寄存器是一个子地址空间:访问 RAM 的指令可以很容易地访问寄存器,使用完全相同的指令代码,以及访问是在片外访问 RAM 还是在片内访问寄存器,仅取决于地址用过的。但在 x86 中,寄存器的实时值根本无法通过内存引用指令访问。(除非您先显式或隐式地将它们保存到内存中,但我们在这里不讨论这个。)

于 2011-11-16T21:14:43.397 回答