我有一些关于汇编的问题,我正在学习这些问题,但我很困惑。
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 中,对吗?
请原谅我的英语,这不是我的母语。
最佳答案
天哪,这些 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 只是“位移”的缩写,是添加到寄存器中的值的数字,用于计算堆栈帧中变量的地址或结构中元素的地址。在
MOV AX, [BX+25]
等指令中,25 是位移。是的,寄存器是 CPU 的一部分。
关于assembly - x86 寄存器名称、寻址模式、位移和存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7252613/