伪指令.docx

上传人:b****1 文档编号:2431140 上传时间:2022-10-29 格式:DOCX 页数:26 大小:47.64KB
下载 相关 举报
伪指令.docx_第1页
第1页 / 共26页
伪指令.docx_第2页
第2页 / 共26页
伪指令.docx_第3页
第3页 / 共26页
伪指令.docx_第4页
第4页 / 共26页
伪指令.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

伪指令.docx

《伪指令.docx》由会员分享,可在线阅读,更多相关《伪指令.docx(26页珍藏版)》请在冰豆网上搜索。

伪指令.docx

伪指令

• 常用伪指令

SPMC65汇编伪指令与汇编指令不同,它不会被CPU执行,而是在汇编器对程序进行汇编期间实现对汇编器的控制。

使用伪指令可以完成分配存储区、定义宏、指导汇编器汇编指定的代码等功能,从而增加程序的可读性和可维护性。

• SPMC65伪指令的语法格式及分类

SPMC65伪指令可以出现在程序文件的任意位置,为了与汇编指令区分,建议伪指令的前面加上一个句点“.”,例如“.CODE”。

SPMC65伪指令不必区分字母的大小写,也就是说,在SPMC65程序中,“.code”、“.CODE”、“.cODe”是等价的,建议伪指令全部大写。

但是利用伪指令定义的标号(包括段名、宏名、变量名、结构名等)则要区分其字母的大小写,例如标号“Temp”与标号“temp”代表两个不同的标号。

为便于对SPMC65伪指令的语法进行描述,我们采用了下列符号约定:

lable——标号

count——数量

value——常量数值

args——参数

[]——可缺省项目。

如果出现[[……]]的形式,则表示可缺省项的内容本身就带有方括号。

SPMC65伪指令依照其用途可分为五类:

存储类、定义类、条件类、汇编链接类以及调试类。

详见表2.86。

表中用斜线“/”隔开的伪指令是同义伪指令,它们虽然名字不同,但实现的功能是相同的。

例如“ORG/ORGIN”表示ORG与ORGIN两条伪指令可以相互替换。

表2.86伪指令分类列表

类别

用途

伪指令

存储类

定义变量和常量

DB/BYTE/DEFB/STRING,DW/DEFW/WORD,

DD/LONG,FLOAT,DOUBLE,DS/DEFS,DUP,

ASCII,BLKB,BLKL,BLKW

定义类

标号定义

段定义

过程和结构的定义

宏定义

VAR/DEFL/SET、EQU/EQUAL

CODE,DATA,PAGE0,SECTION,ORG/ORGIN

PROC,ENDP,STRUCT,ENDST

MACRO,ENDM/MACEND,MACEXIT

条件类

对汇编指令进行条件汇编

IF/IFN/IFNFALSE/IFNZ/IFTRUE,

IFE/IFFALSE/IFNTRUE/IFZ,IFDIFF/IFNSAME、

IFNDIFF/IFSAME,IFDEF,IFNDEF,IFMA,IFNMA,

IFABS/IFNREL,IFNABS/IFREL,IFSSEQ,IFSSNEQ,

IFPAGE0,IFNPAGE0,IFCLEAR,IFNEXT,

ELSE,ENDIF/ENDC,EXIT

汇编链接类

指导汇编器和连接器

PUBLIC/GLOBAL/XDEF,EXTERN/EXTERNAL/XREF,INCLUDE,LINKLIST,SYMBOLS,COMMENT,ASK,MESSAGE/MESSG,ABSOLUTE,RELATIVE,END

调试类

与调试相关的伪指令

STABF,STABN,STABS

下面将分类介绍比较常用的伪指令。

• 存储类伪指令

1.DB

[功能]以字节型数据的形式来存储常量(定位在ROM区,参见.CODE伪指令)

[同义伪指令]DEFB、BYTE、STRING

[格式]

[label:

].DB[[count]][value][,[count]][value][,…]

[说明]本伪指令把一系列8位常量值存入连续的数据单元中。

多个value值用逗号分隔开,也可在每个value值的前面指定一个[count]值,表示连续存储count个相同的value。

如果存储的常量中含有ASCII字符或字符串,则必须用单引号或双引号将其括起来。

例如:

Lb1:

.DB17h;1个字节,值为17h

.DB3,[2]'d','ef';5个字节,值为3,'d','d','e','f'

Lb3:

.DB“Isn't”;包含单引号的字符串

上述定义将使汇编器分配一段ROM空间用来存储这些数值:

初值

17h

3

‘d'

‘d'

‘e'

‘f'

‘I'

‘s'

‘n'

单引号

‘t'

ROM区存储内容

17h

03h

64h

64h

65h

66h

49h

73h

6Eh

27h

74h

如果利用.DB定义变量(在RAM区存储,参见.PAGE0和.DATA伪指令),那么.DB后面的初始化值将不起作用,汇编器仅仅在RAM中分配相应长度的空间,而不会存入初值,因此不建议使用.DB定义变量。

2.DW

[功能]以16位整型数据的形式来存储常量(定位在ROM区,参见.CODE伪指令)

[同义伪指令]DEFW、WORD

[格式]

[label:

].DW[[count]][value][,[count]][value][,…]

[说明]本伪指令将申请若干连续的16位整型数据单元来存储双字节型常量序列。

其使用方法与.DB伪指令相同。

例如:

Lb1:

.DW1074h;1个双字节,值为1074h

.DW3,[2]'d','ef';5个双字节数据

上述定义将使汇编器分配一段ROM空间用来存储这些数值:

初值

1074h

3

‘d'

‘d'

‘e'

‘f'

ROM区存储内容

74h

10h

03h

00h

64h

00h

64h

00h

65h

00h

66h

00h

如果利用.DW定义变量(在RAM区存储,参见.PAGE0和.DATA伪指令),那么.DW后面的初始化值将不起作用,汇编器仅仅在RAM中分配相应长度的空间,而不会存入初值。

不建议用.DW定义变量。

3.DD

[功能]以32位长整型数据的形式来存储常量(定位在ROM区,参见.CODE伪指令)

[同义伪指令]LONG

[格式]

[label:

].DD[[count]][value][,value][,…]

[说明]本伪指令申请若干连续的32位长整型数据单元来存储四字节型常量。

其使用方法与.DB伪指令相同。

例如:

Lb1:

.DD123456h;占用1个32位单元

.DD3,[2]'d','ef';占用5个32位单元

上述定义将使汇编器分配一段ROM空间用来存储这些数值:

初值

123456h

3

‘d'

ROM区存储内容

56h

34h

12h

00h

03h

00h

00h

00h

65h

00h

00h

00h

初值

‘d'

‘e'

‘f'

ROM区存储内容

65h

00h

00h

00h

66h

00h

00h

00h

67h

00h

00h

00h

如果利用.DD定义变量(在RAM区存储,参见.PAGE0和.DATA伪指令),那么.DD后面的初始化值将不起作用,汇编器仅仅在RAM中分配相应长度的空间,而不会存入初值。

不建议用.DD定义变量。

4.FLOAT

[功能]以单精度浮点型实数的形式来存储常量(定位在ROM区,参见.CODE伪指令)

[格式]

[label:

].FLOAT[[count]][value][,value][,…]

[说明]本伪指令用来把实数常量转换为IEEE格式表示的单精度浮点型数据并存储,每个浮点数将占用4字节的存储空间。

.FLOAT的使用方法与.DB伪指令相同。

同样地,只用当利用.FLOAT定义常量时,value预置的初值才会起作用,而定义的变量(存储于RAM区,参见.PAGE0和.DATA伪指令)不会被相应的value值初始化,仅仅会占用同样大小的RAM空间,因此不建议用.FLOAT定义变量。

例如:

Lb1:

.FLOAT134.576;将134.576转换为IEEE格式(43069375h)

.FLOAT[2]78;将两个78转换为IEEE格式(429C0000h)

上述对常量的定义将使汇编器分配一段ROM空间用来存储这些数值:

初值

134.576

78

78

ROM区存储内容

75h

93h

06h

43h

00h

00h

9Ch

42h

00h

00h

9Ch

42h

5.DOUBLE

[功能]以双精度浮点型实数的形式来存储常量(定位在ROM区,参见.CODE伪指令)

[格式]

[label:

].DOUBLE[[count]][value][,value][,…]

[说明]本伪指令用来把实数常量值转换为IEEE格式表示的双精度浮点型数据并存储,每个浮点数将占用8字节的存储空间。

.DOUBLE的使用方法与.DB伪指令相同。

同样地,只用当利用.DOUBLE定义常量时,value预置的初值才会起作用,而定义的变量(在RAM区存储,参见.PAGE0和.DATA伪指令)仅会占用同样大小的RAM空间,不会被相应的value值初始化。

不建议用.DOUBLE定义变量。

例如:

Lb1:

.DOUBLE134.576;转换为IEEE(4060D26E978D4FDFh)

若上述定义处于常量区,那么将占用一段ROM空间用来存储这些数值:

初值

DFh

4Fh

8Dh

97h

6Eh

D2h

60h

40h

ROM区存储内容

134.576

6.DUP

[功能]与.DB、.DW、.DD、.FLOAT、.DOUBLE等常量存储类伪指令配合使用,用来存放若干个具有相同数值的常量。

[格式]

[label:

].DBcount.DUP(value)

[label:

].DWcount.DUP(value)

[label:

].DDcount.DUP(value)

[label:

].FLOATcount.DUP(value)

[label:

].DOUBLEcount.DUP(value)

[说明]本伪指令将分配co

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1