x86寄存器名称,寻址模式,位移和存储

时间:2011-08-31 04:39:49

标签: assembly x86 masm addressing-mode

我有一些关于装配的问题,我正在学习,我很困惑。

  1. bxbp以及sssp之间有什么区别?书中说bx是基址寄存器,bp是基址指针。这是否意味着他们是一回事?
  2. mov ax, bxmov ax, [bx]mov ax, bpmov ax, [bp]有何不同?
  3. disp在索引寻址模式中的含义是什么?例如mov al, disp[bx]?还是mov al, disp[si]?这本书没有解释disp
  4. 的含义
  5. 寄存器在CPU中不是RAM吗?

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

2 个答案:

答案 0 :(得分: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只是“displacement”的缩写,是一个加到寄存器中的值的数字,用于计算堆栈帧中变量的地址或结构中的元素。在像MOV AX, [BX+25]这样的说明中,25就是位移。

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

答案 1 :(得分:2)

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