我有一些关于装配的问题,我正在学习,我很困惑。
bx
和bp
以及ss
和sp
之间有什么区别?书中说bx
是基址寄存器,bp
是基址指针。这是否意味着他们是一回事?mov ax, bx
,mov ax, [bx]
,mov ax, bp
和mov ax, [bp]
有何不同?disp
在索引寻址模式中的含义是什么?例如mov al, disp[bx]
?还是mov al, disp[si]
?这本书没有解释disp
。寄存器在CPU中不是RAM吗?
请原谅我的英文,这不是我的第一个语言。
答案 0 :(得分:8)
哦,我的,这些16位寄存器在1984年几乎已经过时了。抱歉,你有一本旧书。然而现代处理器仍然使用这些东西,所以你的问题是有道理的。我实际上在当天写了一些16位汇编,奇怪的是我记得它。让人惊讶。
BX,BP,SS和SP只是四个独立的寄存器。 BX,BP和SP是通用寄存器(其他16位GPR是AX,CX,DX,SI和DI),SS是段寄存器,你不经常使用它(它是隐式使用的你参考BP和SP)。对这些寄存器中的每个寄存器的完整答案将比通常的SO答案占用更多的空间。但要回答您的具体问题,BX和BP是两个不同的寄存器,而不是相同的寄存器。 BP通常用于索引堆栈帧,BX通常用于索引结构或数组。
MOV AX, BX
将BX的内容移动到AX,而MOV AX, [BX]
将值为DS:BX的内存位置的内容移动到AX。也就是说,如果BX包含值500,则第一指令将500移动到AX,而第二指令将地址500的内容(技术上超过段DS开始的500字节)移动到AX中。 (注意,在不同的汇编程序中解释MOV指令的方式有一些细微差别,例如MASM和NASM。)
DISP只是“displacement”的缩写,是一个加到寄存器中的值的数字,用于计算堆栈帧中变量的地址或结构中的元素。在像MOV AX, [BX+25]
这样的说明中,25就是位移。
是的,寄存器是CPU的一部分。
答案 1 :(得分:2)
4:在x86架构中,寄存器确实在CPU中,不在中。好吧,我不知道任何1970年后的架构,其中寄存器没有在CPU中出现,但我知道架构(例如8051),其中寄存器与RAM在同一地址空间 - 或者在至少寄存器是一个子地址空间:访问RAM的指令可以很容易地访问寄存器,使用完全相同的指令代码,以及访问是从片外到RAM还是保持片上寄存器,仅取决于使用的地址。但是在x86中,寄存器'根据内存引用说明,根本无法访问实时值。 (除非你先明确地或隐含地将它们保存到内存中,但我们在这里不是在谈论它。)