【问题标题】:x86 register names, addressing modes, displacement, and storagex86 寄存器名称、寻址模式、位移和存储
【发布时间】:2011-11-07 07:58:54
【问题描述】:

我有一些关于我正在学习的汇编的问题,我对此感到困惑。

  1. bxbpsssp 有什么区别?书中说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. 寄存器在 CPU 而不是 RAM 对吗?

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

【问题讨论】:

  • 每个问题只问一个问题;一旦人们开始只回答你的一些问题,就很难判断你的问题是否得到了回答。如果您有不止一件事要问,请随时打开多个问题;请把它们分开。

标签: assembly x86 masm addressing-mode


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 2011-01-14
    • 2016-03-07
    相关资源
    最近更新 更多