直接和间接寻址和 OFFSET
Direct and Indirect addressing and OFFSET
我对汇编还很陌生,我正在尝试解决过去考试中的这个问题。我需要帮助,如果这是基本的,我深表歉意。
我有以下代码:
.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一样吗?
你太忙了。你的老师会详细解释。流行语是 "segment/offset" 和 "organization of an .exe program in memory"。简要地说:
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相同。最终相同:指令不同.
我对汇编还很陌生,我正在尝试解决过去考试中的这个问题。我需要帮助,如果这是基本的,我深表歉意。
我有以下代码:
.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一样吗?
你太忙了。你的老师会详细解释。流行语是 "segment/offset" 和 "organization of an .exe program in memory"。简要地说:
的偏移量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相同。最终相同:指令不同.