我感冒了,头重脚轻,思维迟钝,但还是勉强看明白了,等以后再回过头来看。
调整偏移量需要涉及到三个伪指令EVEN,ALIGN,ORG,还有一个偏移量计数器的值“$”。
首先要明白什么是偏移量,偏移量大多是指从一个数据段的起始地址到我们定义的内存单元之间相隔的距离。
调整偏移量的目的在于快速的得到一个字的内容。
EVEN是偶对齐伪指令
作用是让下一个定义的内存变量从下一个偶地址单元开始分配,如果下一个偏移量是偶地址,该指令没有发生任何效用,否则汇编程序将空出一个字节,从下一个偶数地址来分配内存变量。
为什么偶数位置的字访问速度快呢?
比如访问5h位置上的字
16位cpu每次读两个字节
0h 1h
2h 3h
4h 5h
6h 7h,
这个时候cpu要读4h,5h,再读6h,7h,然后将5h上的内容和6h上的内容拼接,就相当于读两次,拼接一次,所以不如一个字处于偶数位置上访问来的快。
ALIGN是对齐伪指令,他的作用和EVEN偶对齐伪指令差不多,也是为了提高效率的,但是ALGIN对其伪指令更加灵活,并不是指定下一个变量从偶地址单元开始分配,而是从下一个能够整除操作数的内存单元开始分配。
比如
ALIGN 8
如果当前的内存单元分配到13H的话,下一个内存单元将从16H开始分配,13H-16H之间将留空。
ORG是调整偏移量伪指令,格式位
ORG 数值表达式
作用是告诉汇编编译器,接下来的内存变量从该数值表达式所指定的地址开始分配。
如果用ORG指定了一个开始分配的地址,可能会造成变量重叠的问题。
偏移量计数器的值
前面的3个伪指令都是改变偏移量计数器的值的方法,但是程序中如何引用偏移量计数器的值呢,汇编语言提供了一个符号$来引用偏移量计数器的值。
例如:
W1 DW $, $
ORG $+3
B1 DB 43h
内存单元分布如上图所示。
![](https://img2024.cnblogs.com/blog/35695/202408/35695-20240826070647288-243310440.jpg)