汇编语言中$符号的意思是什么?
如下题:执行下面指令后(BX)=??X1DW'CD'X2DB16DUP(?)YEQU$-X1MOVBX,Y最好详细解释一下$这个东西怎么用?...
如下题:执行下面指令后(BX)=?? X1 DW 'CD' X2 DB 16DUP (?) Y EQU $-X1 MOV BX,Y 最好详细解释一下$这个东西怎么用?
展开
1个回答
展开全部
看图你就会明白。实际上标号X1的首地址为ASCII码C的字单元地址,X2的首地址开始于
DB
16
dup
(?)
语句,紧接着X1的终止地址,那么它的首地址相对于X1偏移4
-
1个字节单元;X2的终止地址相对于其首地址偏移16
-
1个字节单元,相对于X1偏移18个字节单元。那么$
-
X1实际上是当前地址与X1首地址之差。由此可以得出,mov
BX,
Y指令执行后,BX的值为18d,也就是12h。
|
……
|
|
43h
|
ASCII:
C
4
byte
X1
|
00h
|
|
44h
|
ASCII:
D
|
00h
|
|
?
|
16
byte
X2
……
|
?
|
<---
$
|
……
|
(当前地址$与X1首地址之差为18个字节偏移,等同于X1与X2占有的字节单元,不包括X1的首地址和X2的终止地址)
关于伪指令$,它表示地址计数器的当前值,也就是本条指令第一个字节的地址偏移,如:
ORG
$
+
8
表示起始地址定位于当前编译地址第一字节的后8个字节处;JMP
$
表示无条件转移至当前地址,其实际执行效果为永远停留在当前地址。
又如:Array
DW
1,
2,
$
+
4,
3,
4,
$
+
4,可以用图表示为:
|
……
|
|
01h
|
<---
Array
1
|
00h
|
|
02h
|
2
|
00h
|
|
08h
|
$
+
4
($相对于Array首地址的偏移是4,因此$
+
4
=
8h)
|
00h
|
|
03h
|
3
|
00h
|
|
04h
|
4
|
00h
|
|
0eh
|
$
+
4
($相对于Array首地址的偏移是10,因此$
+
4
=
0eh)
|
00h
|
|
…
…
|
可见,$用在不同的地方,其表示的当前地址计数是不同的。
DB
16
dup
(?)
语句,紧接着X1的终止地址,那么它的首地址相对于X1偏移4
-
1个字节单元;X2的终止地址相对于其首地址偏移16
-
1个字节单元,相对于X1偏移18个字节单元。那么$
-
X1实际上是当前地址与X1首地址之差。由此可以得出,mov
BX,
Y指令执行后,BX的值为18d,也就是12h。
|
……
|
|
43h
|
ASCII:
C
4
byte
X1
|
00h
|
|
44h
|
ASCII:
D
|
00h
|
|
?
|
16
byte
X2
……
|
?
|
<---
$
|
……
|
(当前地址$与X1首地址之差为18个字节偏移,等同于X1与X2占有的字节单元,不包括X1的首地址和X2的终止地址)
关于伪指令$,它表示地址计数器的当前值,也就是本条指令第一个字节的地址偏移,如:
ORG
$
+
8
表示起始地址定位于当前编译地址第一字节的后8个字节处;JMP
$
表示无条件转移至当前地址,其实际执行效果为永远停留在当前地址。
又如:Array
DW
1,
2,
$
+
4,
3,
4,
$
+
4,可以用图表示为:
|
……
|
|
01h
|
<---
Array
1
|
00h
|
|
02h
|
2
|
00h
|
|
08h
|
$
+
4
($相对于Array首地址的偏移是4,因此$
+
4
=
8h)
|
00h
|
|
03h
|
3
|
00h
|
|
04h
|
4
|
00h
|
|
0eh
|
$
+
4
($相对于Array首地址的偏移是10,因此$
+
4
=
0eh)
|
00h
|
|
…
…
|
可见,$用在不同的地方,其表示的当前地址计数是不同的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询