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

tin*_*yaa 3 x86 assembly masm addressing-mode

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

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

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

Ray*_*oal 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的一部分.