1.地址计数器$ 


  汇编语言允许用户直接用$来引用地址计数器的值,例如指令:

     JMP   $+ 6

  它的转向地址是JMP指令的首地址加上6。当$用在指令中时,它表示本条指令的第一个字节的地址。在这里,$+ 6必须是另一条指令的首地址。否则,汇编程序将指示出错信息。

  当$用在伪指令的参数字段时,则和它用在指令中的情况不同,它所表示的是地址计数器的当前值。例如指令:

    ARRAY   DW 1, 2, $+ 4, 3, 4, $+ 4
  
  假设汇编时ARRAY 分配的偏移地址为0074H,则汇编后,$+ 4所在的两个字单元:
  (ARRAY+4)=0078+4=007CH
  (ARRAY+0A)=007E+4=0082H

  应当注意,ARRAY数组中的两个$+ 4得到的结果是不同的,这是由于$的值是在不断变化的缘故。当在指令中用到$时,它只代表该指令的首地址,而与$本身所在的字节无关。

 2.EVEN伪指令

  例如:
    DATA_SEG  SEGMENT
          BYTE_DAT  DB ?
    EVEN
          WORD_DAT  DW 100 DUP (?)
    DATA_SEG  ENDS

  一个字的地址最好从偶地址开始,所以对于字数组为了保证它从偶地址开始,可以在DW定义之前用EVEN伪指令来达到这一目的。

 3. ALIGN伪指令

  例如:
.    
     ALIGN 4
     ARRAY DD 100 DUP (?)
     
  ALIGN伪指令保证了双字数组ARRAY地址边界从4的倍数开始。

  ALIGN伪指令是将当前偏移地址指针指向2的乘方的整数倍的地址,如果源地址指针以指向2的乘方的整数倍的地址,则不作调整;否则将指针加以一个数,使地址指针指向下一个2的乘方的整数倍的地址。

  当然,ALIGN 2和EVEN是等价的。