汇编语言的基础知识标识符和表达式的继续

3 调整偏移量伪指令

调整偏移量伪指令是在内存变量定义时用来调整内存变量起始偏移量的,它们是在把源程序汇编成目标文件时起作用。常用的调整偏移量伪指令有:EVENALIGNORG,它们的主要目的是:为了更有效地读取内存单元的内容。

3.1 偶对齐伪指令EVEN

偶对齐伪指令格式:

EVEN

伪指令的作用是:告诉汇编程序(Assember),本伪指令下面的内存变量从下一个偶地址单元开始分配。

如果下一个偏移量是偶地址,那么,该伪指令不起作用,否则,汇编程序将空出一个字节,从下一偶地址开始为其后变量分配内存单元。

假设有下列变量定义,并且变量B1的偏移量是偶数,其内存单元分布如图2所示。

B1DB12H;为了表示方便,不妨再假设其偏移量为:xxxx0H
W1DW4567H

图2 内存单元分布图

图3 齐偏移量读取一个字的过程示意图

在上述定义情况下,在许多微机系统中,当需要读变量W1及其后面的字内容时,硬件将按图3所示的方式分二次读出该字内容,再拼接成一个字内容,这时,无疑需要二个读内存周期,从而影响程序执行的速度。

出现上述问题的主要原因就是字变量W1在数据段内的偏移量是奇数,为了保证其偏移量是偶数,需要在其定义之前加上伪指令EVEN

所以,可把前面的变量定义改变成下列形式:

4 偶偏移量读取字过程

B1DB12H
EVEN
W1DW4567H

这时,变量的内存分配和读取字变量W1的过程如图4所示。

3.2 对齐伪指令ALIGN

对齐伪指令格式:

ALIGN  Num

其中:Num必须是2的幂,如:2、4、8和16等。

伪指令的作用是:告诉汇编程序,本伪指令下面的内存变量必须从下一个能被Num整除的地址开始分配。

如果下一个地址正好能被Num整除,那么,该伪指令不起作用,否则,汇编程序将空出若干个字节,直到下一个地址能被Num整除为止。

试比较下面二组变量定义,它们的对齐效果一致吗?

B1

DB 12HB1DB 12H
EVENALIGN 2

W1

DW 4567HW1DW 4567H

从上面的对比,我们不难看出:伪指令ALIGN的说明功能要比伪指令EVEN强。

3.3 调整偏移量伪指令ORG

调整偏移量伪指令格式:

ORG  数值表达式

伪指令的作用是:告诉汇编程序,本伪指令下面的内存变量从该“数值表达式”所指定的地址开始分配。

假设有下列变量定义,并且变量word1的偏移量为0。

word1

 DW1234h

byte1 DB56h
word2 DW0abcdh
 ORG1
byte2 DB?
word3 DW?
byte3 DB?

图5 内存变量分配示意图

前三个变量定义的内存分布如图5的左边所示,但由于伪指令“ORG 1”的作用,说明其后面所说明的变量要从偏移量为“1”的内存单元开始存放。所以,后三个变量的内存分配如图5的右边所示。

由图5可见,这些变量的内存分配是相互重叠的,对某个变量的操作无疑会影响到与之重叠的变量。

另外,变量byte2、word3和byte3没有赋初值,如果赋初值的话,则重叠部分的内存单元的原来初值将被覆盖掉。

在以上三个伪指令EVENALIGNORG中,伪指令EVEN的使用频率较高。

3.4 偏移量计数器的值

前面,我们介绍了几种改变偏移量计数器之值的方法,但在程序中还无法引用其值。汇编语言提供了一个特殊的符号“$”来引用偏移量计数器的值。

例如:

图6 内存单元分布示意图

W1 DW$, $
 ORG$+3   ;从当前地址开始空3个字节
B1 DB43h

假设:在给变量W1分配内存单元时,当前偏移量计数器的值为2。

于是,变量W1后面第一个“$”代表数值2,第一个字分配后,此时偏移量计数器$的值就为4,所以,第二个“$”就代表数值4。

在分配完二个字之后,偏移量计数器的值变为6,$+3的值为9,所以,伪指令“ORG $+3”就表示下一个变量从偏移量为9的单元地址开始分配。

综上分析,上述变量说明所对应的内存单元分布如图6所示。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值