assembly - x86 寄存器名称、寻址模式、位移和存储

标签 assembly x86 masm addressing-mode

我有一些关于汇编的问题,我正在学习这些问题,但我很困惑。

  1. bx 和有什么区别?和bpsssp ?书上说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 中,对吗?

    请原谅我的英语,这不是我的母语。

最佳答案

天哪,这些 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 的一部分。

关于assembly - x86 寄存器名称、寻址模式、位移和存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7252613/

相关文章:

linux - 汇编和多核有什么关系?

assembly - 在汇编中编码时如何避免转到和跳转?

c - 什么是 "write to read-only page"故障?

assembly - 如何用汇编语言在定义双字中存储4个字符?

c - 汇编语言协处理器

linux - 如何在 Linux 上用汇编在屏幕上显示图片?

linux - 在我的代码末尾进行系统调用后出现程序集段错误

x86 - x86如何提示设置页面脏位?

c++ - 使用 SSE 将浮点值从汇编程序 DLL 返回到 C++

assembly - MASM32中令人困惑的括号