直接和间接寻址和偏移

Posted

技术标签:

【中文标题】直接和间接寻址和偏移【英文标题】:Direct and Indirect addressing and OFFSET 【发布时间】:2018-05-10 11:59:38 【问题描述】:

我对装配很陌生,我正在尝试从过去的考试中解决这个问题。我需要帮助,如果这是基本的,请道歉。

我有以下代码:

                 .MODEL medium
                 .STACK
0000             .DATA
0000 04D2 10E1   Count dw 1234,4321
0000            .CODE
                .STARTUP
0017 BB 0000 R   mov bx, OFFSET Count
001A B8 000A     mov ax,10
001D 8B C3       mov ax,bx
001F 8B 07       mov ax,[bx]
0021 A1 0000 R   mov ax,Count
.EXIT
END

我被要求识别不同类型的寻址,我可以这样做,然后在每条指令之后说明ax 的值。

特别是我不知道如何制定最后 3 条指令。所以我的问题是:

    bx 中存储了什么值?是Count的地址吗?我如何找到这个地址?

    在指令mov ax,[bx] 之后,我相当肯定ax 包含Count 的值。这个值是多少?

    mov ax,Count这和2一样吗?

【问题讨论】:

【参考方案1】:

你太忙了。你的老师会详细解释。流行语是“段/偏移”和“内存中 .exe 程序的组织”。简要说明:

    bx 获取Count 的偏移量。

    x86-16 地址分为两部分:段和偏移量。我的 Turbo 调试器将 Count 设置为地址 1603:0000。第一个(十六进制)数字表示段,第二个表示偏移量。该段将由操作系统在加载程序时计算,并且可以随着每个程序运行而改变。 .STARTUP 指令生成的代码将计算的值分配给段寄存器DS(不要将其与通用寄存器DX 混淆)。

    偏移量是从该段地址开始的相对距离。由于Count 位于.DATA 段的开头,因此它与段开头的相对距离为0000。因此,BX=0000。

    Count 的值由Count dw 1234,4321 初始化。 Count 不是一个变量,而是一个标签。在这个标签上,您可以找到两个字:1234 和 4321。mov ax,[bx] 将从地址 DS:0000 加载一个字,这是Count 的地址。

    您的假设是正确的,mov ax,[bx] 包含Count 的第一个值 = 1234。数字是十进制的。

    这是特定于汇编程序的。 MASM语法和2一样,NASM语法和1一样。代码明明是MASM,所以和2一样。到底是一样的:指令不一样。

【讨论】:

以上是关于直接和间接寻址和偏移的主要内容,如果未能解决你的问题,请参考以下文章

(计算机组成原理)第四章指令系统-第二节2:数据寻址(直接寻址间接寻址立即数)

计算机组成原理期末救急--下

计算机组成原理——指令系统

指令系统——数据寻址

指令系统——数据寻址

汇编语言ARM扩展资料数据寻址