当前位置:编程学习 > 汇编语言 >>

汇编语言中$符号的意思是什么?

如下题:执行下面指令后(BX)=?? X1 DW 'CD' X2 DB 16DUP (?) Y EQU $-X1 MOV BX,Y 最好详细解释一下$这个东西怎么用?
答案:看图你就会明白。实际上标号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  | 
|   … … | 

可见,$用在不同的地方,其表示的当前地址计数是不同的。
其他:当前句子的地址
$-X1就是X1+X2总共占用空间大小 是一个等待符,比如JMP $;他就会一直停在这里, 就是当前地址。(BX)=18 

上一个:用汇编语言求三个数的中间大小的数并输出。
下一个:用emulate8086汇编出现的问题:unterminated string: 128 dup(")

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,