汇编语言六大基础伪指令详解

六大伪指令(基础)

1、OFFSET

变量是数据的存放地,对变量最常见的操作是从变量中取出数据和把数据放人变量中。
实现这些操作有直接法和间接法两种方法。
以该寄存器加方括号的形式指明是用寄存器中的内容作为偏移地址,操作数在相应的内存
把保留字OFFSET加在变量名字的前面,表示取该变量的偏移地址。汇编程序把"OFFSET变量名"作为一个常量处理,而常量本身是没有类型的。
不论变量在定义时是什么类型,在它的名字前面加上OFFSET后就变成了一个常量。

但是,既然"OFFSET变量名"是用来取变量的偏移地址,而偏移地址是有可能超过255的,超过255时当然就不能把它送到字节型寄存器中。也就是说.在没有准确掌握某个变量的偏移地址时,不要想当然地认为它的偏移地址会小于255。
既然"OFFSET变量名"是常量,就可以参与常量的算术运算。
把一个变量的偏移地址取到某个基址或变址寄存器后,就可以用该寄存器间接寻址方式实现对变量的处理。
间接法在高级语言中有着广泛的应用,在C 语言中表现为指针及其相关处理。

2、SEG

无论按直接法还是间接法使用变量,都会涉及变量的段地址问题。在汇编语言程序中,使用变量需要把其所在段的段地址放在某个段寄存器中,一般是放在DS或ES中,取变量的段地址也有两种方法。一是用变量所在段的段名。另一种方法是用 SEC伪指令放在某变量的前面,表示取该变量所在段的段地址。不论是用段名还是用"SEC变量名"的形式,汇编程序都是把它作为常量处理的。
"SEG变量名"的形式甚至还可以用于ASSUME 伪指令中。

3、PTR

PTR是用于指定操作数类型的伪指令,它需要与类型保留字配合使用。
其基本用法是: 类型 PTR 操作数
用法中的"操作数"要求必须是内存型寻址方式。程序中有两种情况需要用到指定类型伪操作;一是操作数本身没有类型,当需要明确该操作数的类型时使用这种用法;另一种情况是已定义的变量本身有确定的类型,程序需要临时当作另一种类型来处理。

4、ORG

ORG伪指令单独占一行,其基本格式是:
ORG 地址表达式

不论段中写的是变量定义还是指令序列,汇编程序总是把段中各有效操作逐行翻译。在偏移地址的安排上,总是把段中第1个有效操作从偏移地址0开始逐个安排。如果某一行指令或变量定义安排的最后一个字节在偏移地址 n,则其下一个有效操作总是从偏移地址n+1开始安排。ORG伪指令的功能就是改变这种安排方式,它用"地址表达式"指定一个新的偏移地址,ORG伪指令后面的内容就从该地址开始安排。
ORG伪指令可以改变段中各变量在定义时原有的次序,按指定情况安排各变量的偏移地址。

5、$

$ 是汇编语言中的一个特殊符号,在汇编语言程序中直接书写,不加引号,这与加引号的字符是不同的。$ 代表汇编程序在处理到 所在位置时应该安排的偏移地址值。序中出现的 可以作为常量看待,但是不同位置上的$ 代表的值是不同的。与一般的数据不同的是,通常所说的常量(数值)是没有类型的,包括"OFFSET 变量名"也没有类型,但$ 所表示的数据一定是字型。$一般作为字型变量定义时的一个初值使用。

6、 = 和EQU

应用高级语言编程时,对于程序中经常使用的一个特定的数值,很多程序员喜欢把它定义成一个常量标识符,在书写后面的程序时若遇到该数值,就写相应的常量标识符面不写数值本身。这种做法的最大好处在于方便程序的修改,如果需要把一个程序中使用到的某一数据统一改为另一数据,如果该数据已经定义为常量就只要在定义处修改一次即可,而没有定义成常量时就需要对该数据的每一次出现都做修改。常量定义的基本格式是:
标识符=数值表达式
常量定义可以写在源程序的任何地方,单独占一行,并且遵照"先定义后使用"的原则。

在很多高级语言中,都规定常量不可重复定义,即把一个标识符定义为某数据之后,不能再在程序的某处修改该定义,使其与另一数据相对应。但是在汇编语言中没有这一限制。

发布了13 篇原创文章 · 获赞 1 · 访问量 179

猜你喜欢

转载自blog.csdn.net/weixin_45495531/article/details/104093258