【问题标题】:What does "Addressed by" in Assembly language mean汇编语言中的“寻址者”是什么意思
【发布时间】:2017-08-28 23:55:28
【问题描述】:

我只是想知道当您说“BP(或任何寄存器)的数据地址”时是否与 [BP] 表示法相同,如果不是,它是什么意思?例子也很受欢迎

【问题讨论】:

  • 这只是意味着BP 包含一个地址并且该地址用于访问数据。使用语法[BP] 意味着您希望寄存器寻址 的内容,而不是寄存器本身的内容。换句话说,如果 BP 包含地址,MOV AX,BP 将地址(BP 的内容)复制到 AX,但MOV AX,[BP]将 BP 寻址的内存内容复制到 AX。

标签: assembly memory x86 stack cpu-registers


【解决方案1】:

我假设这是 16 位实模式。假设 bp = 0xFFFE,并且 ss = 0x1000。请注意,使用 bp 作为基址寄存器意味着使用 ss 作为段寄存器。

        mov     ax,ss:[bp]    ;load ax with data from address 0x1FFFE

计算地址的数学方法是将段寄存器中的值乘以 16,然后加上偏移量。对于 8086,偏移量可以是立即数偏移量加上基址寄存器:bx 或 bp,再加上索引寄存器:si 或 di。 8086 寻址模式的示例链接:

https://courses.engr.illinois.edu/ece390/books/artofasm/CH04/CH04-2.html

【讨论】:

    【解决方案2】:

    为了访问某个地址的字节,对于大多数处理器,您可以将要访问的地址放在通用寄存器中,然后使用正确的指令和/或寻址模式,您可以访问该地址处或开始处的数据.

    在伪代码中

    mov r0,#0x12345678
    mov r1,#0x11223344
    str r1,[r0]
    

    所以我将地址 0x12345678 放在寄存器 0 中,并将我想要写入该地址的值放在 r1 中。然后我告诉处理器将 r1 (0x11223344) 中的值存储在内存中 r0 (0x12345678) 中包含的地址处。处理器读取寄存器 r0,获取作为地址的值,并在地址总线上使用该值,并在数据总线上从 r1 读取的值执行存储(写入)。在这种情况下,我正在对该地址进行 32 位写入。

    语法和指令集因一种架构/目标而异。 某些指令集允许您使用指令中指定的地址直接将加载或存储(有时仅使用 mov 或通用移动来进行加载和存储)到内存中,这些指令通常会提供基于寄存器而不是立即的寻址模式。其他指令集您必须使用寄存器来保存您要访问的所有事务的地址。

    【讨论】:

      【解决方案3】:

      这只是意味着BP 包含一个地址,并且该地址用于访问数据。使用语法[BP] 意味着您想要由寄存器寻址的内存内容,而不是寄存器本身的内容。换句话说,如果BP 包含一个地址,

      MOV AX,BP 
      

      将地址(BP的内容)复制到AX,但是

      MOV AX,[BP]
      

      将BP寻址的内存内容复制到AX。

      这就是他们写“寻址者”时的意思。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-23
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多