NEC 78KOR User Guide

用户手册
RA78K0R Ver. 1.00
汇编器
语言篇
78K0R 系列
文件编号 U17835CA1V0UM00 (第一版) 印刷日期 2007年12 CP(K)
© NEC Electronics Corporation 2007
日本印刷
[备忘]
2
用户手册 U17835CA1V0UM00
Windows 是微软公司在美国或其他国家中的注册商标或商标。
z 本文档所刊登的内容有效期截至 2007 12 月。将来可能未经预先通知而更改。在实际进行生产
设计时,请参阅各产品最新的数据表或数据手册等相关资料以获取本公司产品的最新规格。并非 所有的产品和/或型号都向每个国家供应。请向本公司销售代表查询产品供应及其他信息。
z 未经本公司事先书面许可,禁止复制或转载本文件中的内容。本文件所登载内容的错误,本公司
概不负责。
z 本公司对于因使用本文件中列明的本公司产品而引起的,对第三者的专利、版权以及其它知识产
权的侵权行为概不负责。本文件登载的内容不应视为本公司对本公司或其他人所有的专利、版权
以及其它知识产权作出任何明示或默示的许可及授权。
z 本文件中的电路、软件以及相关信息仅用以说明半导体产品的运作和应用实例。用户如在设备设
计中应用本文件中的电路、软件以及相关信息,应自行负责。对于用户或其他人因使用了上述电
路、软件以及相关信息而引起的任何损失,本公司概不负责。
z 虽然本公司致力于提高半导体产品的质量及可靠性,但用户应同意并知晓,我们仍然无法完全消
除出现产品缺陷的可能。为了最大限度地减少因本公司半导体产品故障而引起的对人身、财产造
成损害(包括死亡)的危险,用户务必在其设计中采用必要的安全措施,如冗余度、防火和防故
障等安全设计。
z 本公司产品质量分为:
标准等级专业等级以及特殊等级三种质量等级。
特殊等级仅适用于为特定用途而根据用户指定的质量保证程序所开发的日电电子产品。另外,
各种日电电子产品的推荐用途取决于其质量等级,详见如下。用户在选用本公司的产品时,请事
先确认产品的质量等级。
标准等级: 计算机,办公自动化设备,通信设备,测试和测量设备,音频·视频设备,家
电,加工机械以及产业用机器人。
专业等级: 运输设备(汽车、火车、船舶等),交通用信号控制设备,防灾装置,防止犯
罪装置,各种安全装置以及医疗设备(不包括专门为维持生命而设计的设
备)。
特殊等级: 航空器械,宇航设备,海底中继设备,原子能控制系统,为了维持生命的医疗
设备、用于维持生命的装置或系统等。
除在本公司半导体产品的数据表或数据手册等资料中另有特别规定以外,本公司半导体产品的质
量等级均为标准等级。如果用户希望在本公司设计意图以外使用本公司半导体产品,务必事先
与本公司销售代表联系以确认本公司是否同意为该项应用提供支持。
(注)
1) 本声明中的本公司是指日本电气电子株式会社(NEC Electronics Corporation
及其控股公司。
2) 本声明中的本公司产品是指所有由日本电气电子株式会社开发或制造或为日本电气电子株式会社
(定义如上)开发或制造的产品。
M5 02.11-1
用户手册 U17835CA1V0UM00
3
[备忘]
4
用户手册 U17835CA1V0UM00
前 言
该手册是为了使用户更容易地、正确地理解RA78K0R汇编器包(此后称为RA78K0R)中每个程序的基本功能以
及描述源程序的方法而设计的。
该手册没有说明如何操作RA78K0R中的各个程序。因此,在你理解了本手册中的内容后,请阅读RA78K0R汇编
器包用户手册操作篇(U17836E)(此后称为操作篇)以用来操作汇编器包中的各个程序。
本手册中与RA78K0R相关的描述适用于1.00版或更高的版本。
[目标读者]
写作本手册的目的,是为了帮助使用微控制器(78K0R系列)进行开发应用的工程师更好的理解设备的功能和指令。
[结构]
本手册由以下六个章节和附录组成:
第1章 概述
概述RA78K0R中的所有基本功能。
第2章 如何描述源程序
概述如何描述源程序,并说明了汇编器中的运算符。
第3章 伪指令
说明了如何写入以及使用伪指令,并包含有应用示例。
第4章 控制指令
说明了如何写入以及使用控制指令,并包含有应用示例。
第5章
解释了所有宏功能,包括宏定义、宏引用和宏扩展。 关于宏的伪指令在第3章 伪指令中进行说明。
第6章 产品应用
介绍一些用于描述源程序的推荐方法。
附录
这些附录包括了保留字列表,伪指令列表以及索引。
本手册没有对指令集进行详细说明。关于这些指令的详细信息,敬请参阅软件开发所使用的微控制器用户手册。 同样,关于各个体系结构的指令信息,敬请参阅软件开发所使用的微控制器用户手册(硬件版)。
用户手册 U17835CA1V0UM00
5
[]
对于第一次使用汇编器的用户来说,请阅读本手册的第1章 概述。而对于那些具备一定汇编器知识的用户
来说,则可以跳过本手册的第1章 概述。然而,请务必阅读1.2 程序开发前的提示以及第2章 如何描述源程 序。
对于那些希望了解汇编器的伪指令以及控制指令的用户来说,请分别阅读第3章 伪指令和第4章 控制指令。
每个伪指令或控制指令的格式、功能和用途以及应用示例均在这些章节中进行了详细的说明。
[约定]
以下的符号和缩写用于整本手册中:
: 重复同一格式。
[ ]: 可以省略封闭在方括号中的字符。
{ }: { }中的一个项被选择。
“ ”: 封闭在“ ”(双引号)中的字符是一个字符串。
‘ ’: 封闭在‘ ’(单引号)中的字符是一个字符串。
( ): 在圆括号间的字符是一个字符串。
< >: 封闭在这些括号中的字符(主要为标题)是一个字符串。
__: 下划线用于说明一个重要点或用于表示输入字符串。
: 表示一个或更多的空白字符或制表符。
/: 字符分隔符
~: 连续
粗体: 粗体字符用于提示重要点或引用点。
6
用户手册 U17835CA1V0UM00
[相关文件]
与本手册相关的文件(用户手册)如下。 本文中出现的相关文件可能会包含初稿版本。 然而,不会对初稿版本作特殊标记。
文件名 文件编号
RA78K0R V1.00版汇编器
CC78K0R V1.00版C编译器
SM + 系统仿真器 操作 PM+ 6.20 ID78K0R-QB 3.20版综合调试器 操作
操作 语言 本手册 操作 语言
U17836E
U17838E U17837E U18010E U17990E U17839E
注意 上表列出的相关文档可能会随时改变而不做通知。请确保在设计时使用每个文档的最新版本。
用户手册 U17835CA1V0UM00
7
[备忘]
8
用户手册 U17835CA1V0UM00
目 录
前 言 .........................................................................................................................................................5
目 录 .......................................................................................................................................................9
插图列表 ..........................................................................................................................................12
表格列表 ..........................................................................................................................................13
1
2
概述 ..........................................................................................................................................14
1.1 汇编器概
1.1.1 什么是汇
1.1.2 应用微控
1.1.3 什么是浮
1.2 开发程序
1.2.1 RA78K0R
1.3 RA78K0R的特
.............................................................................................................................14
编器? ........................................................................................................15
制器的产品开发以及RA78K0R的作用........................................................16
动汇编器? .................................................................................................17
前的提示..................................................................................................................19
最大使用性能 ........................................................................................19
....................................................................................................................21
如何描述源程序 ......................................................................................................................22
2.1 基本结构 ................................................................................................................................22
2.1.1 模块头.......................................................................................................................23
2.1.2 模块体.......................................................................................................................24
2.1.3 模块尾.......................................................................................................................24
2.1.4 源程序的
2.1.5 源程序描
2.2 源程序的
描述格式..................................................................................................................29
总体结构.....................................................................................................25
述示例 ........................................................................................................26
2.2.1 语句结构 ...................................................................................................................29
2.2.2 字符集.......................................................................................................................30
2.2.3 符号字段 ...................................................................................................................32
2.2.4 助记符字
2.2.5 操作数字
................................................................................................................36
................................................................................................................36
2.2.6 注释字段 ...................................................................................................................40
2.3 表达式和
2.4 算术运算 +
- * /
运算符 ................................................................................................................................48
运算符 .....................................................................................................................41
.............................................................................................................................44
算符................................................................................................................................45
算符.................................................................................................................................46
算符.................................................................................................................................47
MOD ........................................................................................................................................49
+ 号........................................................................................................................................50
- 号........................................................................................................................................51
2.5 逻辑运算
.............................................................................................................................52
NOT .........................................................................................................................................53
AND .........................................................................................................................................54
OR ...........................................................................................................................................55
XOR .........................................................................................................................................56
2.6 关系运算
.............................................................................................................................57
EQ (=).................................................................................................................................58
NE< >...............................................................................................................................59
GT (>).................................................................................................................................60
GE>=................................................................................................................................61
LT(<)....................................................................................................................................62
LE<=.................................................................................................................................63
2.7 循环移动
运算符 .....................................................................................................................64
SHR .........................................................................................................................................65
SHL..........................................................................................................................................66
2.8 字节分离
运算符 .....................................................................................................................67
HIGH........................................................................................................................................68
LOW.........................................................................................................................................69
用户手册 U17835CA1V0UM00
9
2.9 字分离运
算符 .........................................................................................................................70
HIGHW ....................................................................................................................................71
LOWW .....................................................................................................................................72
2.10 特殊运算
.............................................................................................................................73
DATAPOS ................................................................................................................................74
BITPOS....................................................................................................................................75
MASK.......................................................................................................................................76
2.11 其他运算
.............................................................................................................................77
( )..............................................................................................................................................78
2.12 运算限制 ................................................................................................................................79
2.12.1 运算符和
2.12.2 运算符和
2.12.3 如果检查
2.13 绝对表达
2.14 位位置说
式的定义..................................................................................................................85
明符 .........................................................................................................................86
重定位属性 .................................................................................................79
符号属性.....................................................................................................82
运算中的限制 .............................................................................................84
.............................................................................................................................................87
2.15 操作数的
3
3.1 伪指令概
3.2 区段定义
2.15.1 操作数的
2.15.2 指令所需
2.15.3 操作数的
伪指令.......................................................................................................................................99
特征 .........................................................................................................................89
值的尺寸和地址范围 ..................................................................................89
的操作数的尺寸..........................................................................................95
符号属性和重定位属性...............................................................................95
.............................................................................................................................99
伪指令 ...................................................................................................................100
CSEG.....................................................................................................................................102
DSEG.....................................................................................................................................106
BSEG.....................................................................................................................................110
ORG.......................................................................................................................................114
3.3 符号定义
伪指令 ...................................................................................................................117
EQU .......................................................................................................................................118
SET........................................................................................................................................122
3.4 存储器初
始化和区域保留伪指令 ..........................................................................................124
DB..........................................................................................................................................125
DW.........................................................................................................................................127
DG .........................................................................................................................................129
DS..........................................................................................................................................131
DBIT.......................................................................................................................................133
3.5 链接伪指
...........................................................................................................................134
EXTRN...................................................................................................................................135
EXTBIT ..................................................................................................................................137
PUBLIC..................................................................................................................................139
3.6 目标模块
名称声明伪指令.....................................................................................................141
NAME ....................................................................................................................................142
3.7 自动分支
指令选择伪指令.....................................................................................................143
BR..........................................................................................................................................144
CALL......................................................................................................................................146
3.8 宏伪指令 ..............................................................................................................................148
MACRO .................................................................................................................................149
LOCAL ...................................................................................................................................151
REPT .....................................................................................................................................154
IRP.........................................................................................................................................156
EXITM....................................................................................................................................158
ENDM ....................................................................................................................................161
3.9 汇编终止
伪指令 ...................................................................................................................163
END .......................................................................................................................................164
4
控制指令.................................................................................................................................165
4.1 控制指令
4.2 处理器类
概述 .......................................................................................................................165
型定义控制指令.....................................................................................................167
10
用户手册 U17835CA1V0UM00
PROCESSOR........................................................................................................................168
4.3 调试信息
DEBUG/NODEBUG DEBUGA/NODEBUGA
4.4 交叉引用
输出控制指令.........................................................................................................170
...............................................................................................................171
..........................................................................................................172
列表输出定义控制指令 ..........................................................................................173
XREF/NOXREF .....................................................................................................................174
SYMLIST/NOSYMLIST .........................................................................................................175
4.5 包含控制
指令 .......................................................................................................................176
INCLUDE ...............................................................................................................................177
4.6 汇编列表
控制指令................................................................................................................179
EJECT ...................................................................................................................................180
LIST/NOLIST .........................................................................................................................182
GEN/NOGEN.........................................................................................................................184
COND/NOCOND ...................................................................................................................186
TITLE .....................................................................................................................................187
SUBTITLE..............................................................................................................................189
FORMFEED/NOFORMFEED................................................................................................192
WIDTH ...................................................................................................................................193
LENGTH ................................................................................................................................194
TAB ........................................................................................................................................195
4.7 条件汇编
IF/_IF/ELSEIF/_ELSEIF/E
控制指令................................................................................................................196
LSE/ENDIF ..................................................................................197
SET/RESET...........................................................................................................................201
4.8 日文汉字
kanji)码控制指令 .............................................................................................203
日文汉字(kanji)码 ..............................................................................................................204
4.9 其他控制
5
............................................................................................................................................206
指令 .......................................................................................................................205
5.1 宏概述..................................................................................................................................206
5.2 宏的使用 ..............................................................................................................................207
5.2.1 宏的定义 .................................................................................................................207
5.2.2 宏的引用 .................................................................................................................208
5.2.3 宏的展开 .................................................................................................................209
5.2.4 应用示例 .................................................................................................................209
5.3 宏内的符
...........................................................................................................................210
5.4 宏操作符 ..............................................................................................................................212
6
附录A 附录B
产品应用.................................................................................................................................214
6.1 启动汇编
6.2 如何开发
器时节省时间,减少故障 .............................................................................214
具有高内存利用率的程序 .............................................................................215
保留字列表...............................................................................................................................216
伪指令列表...............................................................................................................................218
索 引 ...................................................................................................................................................220
用户手册 U17835CA1V0UM00
11

插图列表

插图编号 标题 页码
1-1 RA78K0R汇编器包.............................................................................................................14
1-
2 汇编器流程 .........................................................................................................................15
1-
3 应用微控制器的产品的开发过程 ........................................................................................16
1-
4 为调试重新进行汇编...........................................................................................................18
1-
5 使用存在的模块的程序开发................................................................................................18
2-
1 源模块的结构 .....................................................................................................................22
2-
2 源模块的总体结构 ..............................................................................................................25
2-
3 源模块结构示例..................................................................................................................25
2-
4 样例程序的结构..................................................................................................................26
2-
5 组成语句的字段..................................................................................................................29
3-
1 段的内存位置 ...................................................................................................................101
3-
2 代码段的重定位................................................................................................................102
3-
3 数据段的重定位................................................................................................................106
3-
2 两模块之间的符号的关系 .................................................................................................134
12
用户手册 U17835CA1V0UM00

表格列表

表格编号 标题 页码
2-1 可以在模块头中描述的指令................................................................................................23
2-
2 字母数字式字符..................................................................................................................30
2-
3 特殊字符.............................................................................................................................30
2-
4 运算符的类型 .....................................................................................................................41
2-
5 运算符的优先级顺序...........................................................................................................42
2-
6 重定位属性的类型 ..............................................................................................................79
2-
7 按照重定位属性区分的项和操作符的组合..........................................................................80
2-
8 用重定位属性组合项和操作符 (外部引用项)......................................................................81
2-
9 操作中的符号属性类型.......................................................................................................82
2-
10 用符号属性组合项和操作符..............................................................................................83
2-
11 指令的操作数值的范围 .....................................................................................................89
2-
12 伪指令的操作数的值范围 .................................................................................................94
2-
13 作为操作数被表述的符号特性 ..........................................................................................96
2-
14 作为伪指令的操作数被描述的符号特性............................................................................97
3-
1 伪指令列表 .........................................................................................................................99
3-
2 段定义方法和内存地址位置..............................................................................................100
3-
3 CSEG的重定位属性 .........................................................................................................103
3-
4 DSEG的重定位属性 .........................................................................................................107
3-
5 BSEG的重定位属性 ......................................................................................................... 111
4-
1 控制指令列表 ...................................................................................................................165
4-
2 控制指令与汇编选项.........................................................................................................166
A-1A-2B-1
保留字的类型....................................................................................................................216
保留字列表........................................................................................................................216
伪指令列表........................................................................................................................218
用户手册 U17835CA1V0UM00
13

1 章 概述

本章节描述了RA78K0R在微控制器软件开发中所起的作用及其特点。

1.1 汇编器概述

RA78K0R汇编器 (后面简称"RA78K0R")是用于将以78K0R系列微控制器的汇编语言来编码的源程序转换为机
器语言编码的一系列程序的通用术语。
RA78K0R包含5个程序:汇编器,连接器,对象转换器,库管理和列表转换器。 另外,RA78K0R也提供了PM+,它可以帮助你在Windows中完成对程序的编辑、编译/汇编,连接和调试等一系
列操作。
1-1 RA78K0R 汇编器包
汇编器
RA78K0R 汇编器包
连接器
目标转换器
库管理程序
列表转换器。
项目管理器

1.1.1 什么是汇编器?

(1) 汇编语言与机器语言
汇编语言是微控制器最基本的程序语言。 微控制器中的微处理器需要程序和数据来完成它的工作。这些程序和数据必须由用户来写入微控制器的内 存中。 由微控制器处理的程序和数据是称为机器语言的二进制数的集合。 然而,对于用户来说,机器语言编码非常难记,因此会导致频繁地发生错误。幸运的是,已经存在易于被 人理解的方法,它通过使用英文缩写或助记符来表示原始机器语言编码的含义。使用这种符号编码方式的 基础程序语言系统称为汇编语言。 由于机器语言是唯一的可以被微控制器直接处理的程序语言,因此需要另一个可以将在汇编语言中创建的 程序转换为机器语言的程序。这个程序就称为汇编器。
以汇编语言写的程序 以二进制数编码的机器语言程序
(源模块文件) (汇编器) (目标模块文件)
1 章 概述
1-2 汇编器流程
用户手册 U17835CA1V0UM00
15
1 章 概述

1.1.2 应用微控制器的产品开发以及RA78K0R的作用

下图说明了在产品开发过程中汇编语言程序设计所处的位置。
1-3 应用微控制器的产品开发过程
硬件开发 软件开发
逻辑设计
生产
检查 汇编
OK
产品规划
系统设计
系统评价
产品营销
软件设计
汇编语言程序代码
RA78K0R
的位置
OK
调试
OK
16
用户手册 U17835CA1V0UM00
1 章 概述

1.1.3 什么是浮动汇编器?

源语言通过汇编器转换后得到的机器语言在使用前会被写入微控制器的内存中。要完成这个操作,必须确定每
个机器语言指令在内存中所写入的位置。
因此,说明每个机器语言指令在内存中所处位置的信息将被添加到由汇编器汇编的机器语言中。 根据将地址置于机器语言指令的方法,汇编器总的来说可以分成完全汇编器和可重定位汇编器。
- 完全汇编器 完全汇编器将以汇编语言进行汇编的机器语言指令放置到绝对地址中。
- 可重定位汇编器 在可重定位汇编器中,为汇编语言进行汇编得到的机器语言指令所分配的地址是暂定的。绝对地址随后将 由连接器来确定。
过去,当使用完全汇编器来创建一个程序时,通常必须同时完成全部的程序设计。然而,如果一个大的程序中 所有组成部分被创建为一个唯一的实体,那么程序将变得非常复杂,程序的分析和维护都会变得非常困难。为了避 免这种情况,将这类大的程序分成多个子程序来开发,这些子程序称为模块,代表每个功能组件。这种程序设计技 术被称为模块化程序设计。
可重定位汇编器是一种适合于模块化程序设计的汇编器,它具有以下优势:
(1) 提高开发效率
同时完成一个大型程序是非常困难的。在这种情况下,将程序根据每个功能分成多个模块能让两个或更多 的程序员来并行开发子程序,同时也提高了开发效率。 此外,如果在程序中发现任何漏洞,将不需要汇编整个程序,而只需改正程序中的一部分,即重新汇编那 个必须要改正的模块。这就缩短了调试的时间。
用户手册 U17835CA1V0UM00
17
1 章 概述
1-4 为调试重新进行汇编
由单一模块组成的程序 由两个或更多的模块所组成的程序
模块
发现漏洞!
发现漏洞! 模块
xxx
模块
xxx
整个程序
模块
必须重新汇编
模块
(2) 资源利用
以前创建的具有高可靠性和通用性的模块可以重新用于另一个程序的创建。如果你将这类高通用性的模块 累积为软件资源,你将可以在开发一个新程序的过程中节省时间和人力。
1-5 使用存在的模块的程序开发
模块A 模块D
新程序
模块B 模块C
新模块
模块A
新模块
模块D
只有该模块需要重新汇编
18
用户手册 U17835CA1V0UM00
1.2 开发程序前的
提示
开始开发程序之前请参考以下内容。

1.2.1 RA78K0R的最大使用性能

(1) 汇编器的最大使用性能
符号数量(局部+公共) 65,535 个符号
可以输出交叉引用表的符号的数量 65,534 个符号
用于一个宏引用的宏体的尺寸
所有宏体的总尺寸
一个文件中的区段数量 256 个区段
一个文件中的宏和要包含的规范
一个被包含的文件中的宏和包含的规范
可重定位的数据
行号数据 65,535 个项目
一个文件中的 BR/CALL 指令的数量 32,767 条指令
每行中的字符数 2,048 个字符
符号长度 256 个字符
开关名定义的数量
开关名的字符长度
区段名称的字符长度 8个字符
模块名称的字符长度(NAME 伪指令) 256 个字符
宏定义伪指令中的形参数量 16 个参数
宏引用时的实参数量 16 个参数
IRP 伪指令中的实参数量 16 个参数
宏定义内的本地符号数量 64 个符号
宏的嵌套层数(宏引用,REPT 伪指令,IRP 伪指 令)
通过 TITLE 控制指令,-lh 选项指定的字符数量
通过 SUBTITLE 控制指令指定的字符数量 一个文件中 include 指令的嵌套层数 8 层 条件汇编嵌套层数 8 层
-I 选项指定包含文件的路径数量
通过-d 选项定义的符号数量 30 个符号
2
65,535 个项目
4
4
31 个字符
1 章 概述
条目 最大使用性能
1
1 MB
10 MB
10,000
10,000
3
1,000
8
5
60 个字符
72 个字符
64 个路径
用户手册 U17835CA1V0UM00
19
1. 不包括模块名称和区块名称的数量。 使用存储器,如果没有存储器,则使用文件。
2. 当汇编器不能解决符号值时,被传递到连接器中的信息。 例如,当一个外部引用符号被MOV指令引用时,将会在.rel文件中生成两个重定位信息。
3. 这里包含CRLF代码。如果在一行中描述2049个或更多的字符,那么将输出一个警告消息并
忽略2049之后的字符。 注4. 开关名称由SET/RESET伪指令设置为真/ 假,且被$IF 等一起使用。 注5. 如果在汇编列表文件(“X”)的单行指定的字符数量最大为119,该数字为“X-60”或更少。
(2) 连接器的最大使用性能
符号数量(局部+公共) 65,535 个符号 同一区段的行号数据 65,535个项目 区段的数量 65,535 个区段注 输入模块的数量 1,024 个模块 存储器区域名称的字符长度 256个字符 存储器区域的数量 100个区域注 通过-b选项可以指定的库文件数量 64个文件 由-I选项指定包含文件的路径数量 64个路径
默认包含这些已经定义的。
1 章 概述
项目 最大工作特性
20
用户手册 U17835CA1V0UM00

1.3 RA78K0R的特点

RA78K0R具有以下特点:
(1) 宏功能
当同一组指令必须在源程序中反复描述时,可以用宏定义来描述一组指令的执行。 通过使用该宏功能,可以提高编码效率和程序的可读性。
(2) 分支指令的优化功能
RA78K0R具有自动分支指令选择导引( BRCALL)
为了创建一个带有高存储效率的程序,字节分支指令必须依照分支指令的分支目的范围来进行描述。然 而,对于程序员来说,描述一个分支指令的同时,又需要注意每个分支的目的范围是非常麻烦的。通过描 述BR指令或CALL指令,汇编器将会依照分支目的范围生成适当的分支指令。这被称为分支指令的优化功 能。
(3) 条件汇编功能
使用该功能时,一部分源程序可以依照预先确定的条件指定为汇编语言或非汇编语言。 如果在源程序中描述调试语句,是否将调试语句转换为机器语言,则可以通过为条件汇编设置一个开关来 选择。当不再需要调试语句时,源程序可以加入汇编且不会对程序进行大的修改。
1 章 概述
用户手册 U17835CA1V0UM00
21

2 章 如何描述源程序

本章节描述了源程序的描述方法,表达式和运算符。

2.1 基本结构

当通过将源程序分为几个模块来对其进行描述时,成为输入到汇编器中单元的每个模块都将被称为源模块(如
果一个源程序由单一的模块组成,那么源程序就是源模块)。
作为输入到编译程序中的单元的每个模块主要由以下三部分组成:
(1) 模块头
(2) 模块体
(3) 模块尾
2-1 源模块的结构
模块头
模块体
模块尾
2 章 如何描述源程序

2.1.1 模块头

下表中显示的是可以在模块头中进行描述的控制指令。注意,这些控制指令只能在模块头中进行描述。
模块头也可以省略。
2-1 可以在模块头中描述的指令
可以描述的项目 说明 在本手册中的章/节
- PROCESSOR
- XREF/NOXREF
- DEBUG/NODEBUG,
DEBUGA/NODEBUGA
与汇编器选项具有相同功能 的控制指令
由高级程序例如C语言编译 器输出的特殊控制指令
- TITLE
- SYMLIST/NOSYMLIST
- FORMFEED/NOFORMFEED
- WIDTH
- LENGTH
- TAB
- KANJICODE
- TOL_INF
- DGS
- DGL
4章 控制指令
用户手册 U17835CA1V0UM00
23
2 章 如何描述源程序

2.1.2 模块体

不能在模块体中进行描述以下指令:
- 与汇编器选项具有相同功能的控制指令
所有其他伪指令,控制指令以及可以在模块体中进行描述的指令。 必须通过将模块体分为称作“段”的单元对其进行描述。
用户可以使用与每个段相应的指令来定义以下四个段:
(1) 代码段
必须以CSEG指令来定义。
(2) 数据段
必须以DSEG指令来定义。
(3) 位段
必须以BSEG指令来定义。
(4) 绝对段
必须通过将字单元地址指定为具有重定位属性(AT字单元地址),并以CSEG,DSEGBSEG伪指令来定义 该段。也可以以ORG指令来定义。
模块体可以以任何段的组合来构成。 然而,在代码区段前应该定义一个数据区段和一个位区段。

2.1.3 模块尾

模块尾表明源模块结束。在这部分中必须有END指令。 如果任何不同于注释,空格,制表符或换行符代码的内容接在EDN指令后进行描述,那么编译程序将输出一
个警告消息并忽略在END指令后描述的字符。
24
用户手册 U17835CA1V0UM00
)
V
M
E
ENDF
W
S
$

2.1.4 源程序的总体结构

源模块(源程序)的总体结构如下所示。
与汇编器选项具有同等功能的控制指令
由高级程序例如 C 语言编译器输出的特 殊控制指令
伪指令
2 章 如何描述源程序
2-2 源模块的总体结构
模块头
控制指令
指令
END 指令
简单的源模块结构示例显示在2-3中。
模块头
模块体
$ PROCESSOR(f1166a0
ECT CSEG AT 0H
AIN CSEG
模块体
模块尾
2-3 源模块结构示例
PROCESSOR(f1166a0)
LAG BSEG
ORK DSEG
UB CSEG
模块尾
ND
用户手册 U17835CA1V0UM00
25
2 章 如何描述源程序
C
C
C
R
S
N
E

2.1.5 源程序描述示例

在本小节中,源模块(源程序)的描述示例显示为样例程序。样例程序的结构可以按如下进行简单说明。
2-4 样例程序的结构
<主程序>
NAME SAMPM
DATA DSEG AT 0FE20H
变量定义
CODE CSEG AT 0H MAIN: DW START
CSEG
START:
<子程序>
ONVAH:
AME SAMPS
SEG
ALL !SASC
CSEG
ASC:
RET
CALL !CONVAH
END
ND
ET
26
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
<主程序>
NAME SAMPM ; (1) ; *********************************************** ; HEX -> ASCII Conversion Program ; main-routine ; *********************************************** PUBLIC MAIN , START ; (2) EXTRN CONVAH ; (3) EXTRN _@STBEG ; (4) <-- Error DATA DSEG AT 0FFE20H ; (5) HDTSA : DS 1 STASC : DS 2 CODE CSEG AT 0H ; (6) MAIN : DW START CSEG ; (7) START : ; 芯片初始化
MOVW SP , #_@STBEG MOV HDTSA , #1AH MOVW HL , #LOWW ( HDTSA ) ; set hex 2-code data in HL registor CALL !CONVAH ; convert ASCII <- HEX ; output BC-register <- ASCII code MOVW DE , #LOWW ( STASC ) ; set DE <- store ASCII code table MOV A , B MOV [ DE ] , A INCW DE MOV A , C MOV [ DE ] , A BR $$ END ; (8)
(1) 模块名称的声明。
(2) 被另一个模块中作为而外部引用符号引用的符号声明。
(3) 在另一个模块中定义为一个外部引用符号的符号声明。
(4) 从连接器的”-S”选项中生成一个外部引用符号作为堆栈解决符号的声明(如果连接时没有指定”-S”选项,将会 产生一个错误)。
(5) 数据段开始声明(位于saddr中)
(6) 代码段开始声明(设置为一个从地址0H开始的绝对区段)
(7) 代码段开始声明(表示绝对段结束)
(8) 模块结束声明
用户手册 U17835CA1V0UM00
27
2 章 如何描述源程序
NAME SAMPS ; (1) ; ************************************************************* ; HEX -> ASCII Conversion Program ; sub-routine ; ; input condition : ( HL ) <- hex 2 code ; output condition : BC-register <- ASCII 2 code ; ************************************************************* PUBLIC CONVAH ; (2) CSEG ; (3) CONVAH : XOR A , A ROL4 [ HL ] ; hex upper code load (4) CALL !SASC MOV B , A ; store result
XOR A , A ROL4 [ HL ] ; hex lower code load CALL !SASC MOV C , A ; store result RET
; ************************************************************* ; subroutine convert ASCII code ; ; input Acc ( lower 4bits ) <- hex code ; output Acc <- ASCII code ; ************************************************************* SASC : CMP A , #0AH ; check hex code > 9 BC $SASC1 ADD A , #07H ; bias ( +7H ) SASC1 : ADD A , #30H ; bias ( +30H ) RET END ; (5)
(1) 模块名称的声明
(2) 被另一个模块中作为而外部引用符号引用的符号声明。
(3) 代码段开始声明
(4) 由于ROL4指令是针对78K0系列的,而78K0R系列编译器不支持该指令,需要指定汇编选项(-compati)
关于汇编选项(-compati),敬请参阅RA78K0R系列汇编器操作篇用户手册。
(5) 声明模块的结束
28
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
2.2 源程序的描述

2.2.1 语句结构

格式
源程序由语句所组成。 每个语句包含下图显示的四个字段。
2-5 组成语句的字段
语句
符号字段 助记符字段 操作数字段 注释字段
[ CR ] LF
(1) (2)
(3)
(4)
(1) 符号字段和助记符字段间必须用冒号(:),或一个或更多的空格或制表符隔开(它根据在助记符字段描述的指令
决定来决定是否使用冒号或空格)。
(2) 助记符字段和操作数字段间必须用一个或更多的空格或制表符隔开。根据在助记符字段中所描述的指令,可能
不需要操作符字段。 (3) 如果使用注释字段,则必须在前面加上分号(;)。 (4) 每一行必须用一个LF码来定界(在LF码前可能会存在一个CR码)。
一个语句必须在一行内进行描述。每行最多可以描述 2048 个字符(包括 CR LF)。 每个 TAB 或独立的 CR 都被计作一个字符。如果描述了 2049 个或更多的字符,将会输出一条警告消息且任何 2049 之后的任何字符都会被忽略。然而,2049 个或更多的字符将被输出到汇编列表中。
独立的 CR 不会被输出到汇编列表中。
以下的行也可以被描述:
(1) 虚拟行(没有语句描述的行)
(2) 仅由符号字段组成的行
(3) 仅由注释字段组成的行
用户手册 U17835CA1V0UM00
29
2 章 如何描述源程序

2.2.2 字符集

可以在一个源文件中进行描述的字符被分为以下三类:
- 语言字符
- 字符数据
- 注释字符
(1) 语言字符
语言字符是用于在源程序中描述指令的字符。 它包括字母,数字和特殊字符。
2-2 字母数字式字符
名称 字符
数字字符 字母字符
字符 名称 主要用途
? @ _
HT ( 09H )
逗号 操作数的分隔 : 冒号 标签的分隔 ; 分号 表示注释字段开始的符号
CR ( 0DH )
LF ( 0AH )
大写字母 小写字母
问号 相当于字母字符的符号 圈 a 相当于字母字符的符号 下划线 相当于字母字符的符号 空格 每个字段的分隔 制表码 相当于空格的字符
回车码 表示行结束的符号(在汇
换行码 表示行结束的符号
0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T UV W X Y Z a b c d e f g h i j k l m n o p q r s t uv w x y z
2-3 特殊字符
编器中忽略)
分隔符号
30
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
2-3 特殊字符
字符 名称 主要用途
+
­* / . ( , )
加号 加法运算符或正号 减号 减法运算符或负号 星号 乘法运算符 斜杠 除法运算符 句点 字节的位说明符 左,右圆括号 指定要执行的算术运算的顺序的符号
汇编器运算符
< , > = '
$
& # ! [ ]
(2) 字符数据
字符数据指的是用于描述串常量,字符串和控制指令(TITLE, SUBTITLE, INCLUDE)的字符。
备注1. 除了”00H”外的所有字符都可以使用(包括kanji(日语字符);根据不同的操作系统代码可
备注2. 如果已经描述了任一非法字符,编译程序将会以”!”来代替非法字符用来输出到汇编列表(独
备注3. 使用Windows时,编译程序将”1AH”码解释为文件结束(EOF),因此代码不能作为输入数据中
(3) 注释字符
注释字符指的是用于描述一个注释语句的字符。
备注 可以在注释语句中使用的字符和那些为字符数据设置的字符是相同的。然而,即使已经描述
不等号 关系运算符 等号 关系运算符 单引号 表示字符常量开始或结束的符号
表示一个完整的宏参数的符号
美元符号 表示位置计数器的符号
表示相当于汇编器选项的控制指令的 开始
指定相对寻址的符号 和号 连接符号(在宏体中使用) 井号 指定立即寻址的符号 感叹号 指定绝对寻址的符号 方括号 指定间接寻址的符号
能会不同)。如果”00H”已经被描述,那么将会产生一个错误,并且之后在封闭单引号前的 字符将会被忽略。
立的CR(0DH)码不会被输出到汇编列表中)。
的一部分。
”00H”码也不会产生错误。相反,编译程序将会通过以”!”来代替非法字符将其输出到汇编列表 中。
用户手册 U17835CA1V0UM00
31
2 章 如何描述源程序

2.2.3 符号字段

符号是在符号字段中进行描述的。名词“符号”指的是用于数字数据或地址的名称。 通过使用符号,源程序的内容可以变得易于理解。
(1) 符号类型
根据符号的用途和定义方法,符号被分成在下表中所显示的类型。
符号类型 用途 定义方法 名称 在源程序中用作数字数据或地址 该类型在EQU,SET或DBIT指令的符号字
段中进行描述。
标签 在源程序中用作地址数据 该类型通过在符号后使用一个冒号(:)后缀
来定义。
外部引用名称
名称
模块名称
名称
通过另一模块来使用由模块定义的符号 该类型在EXTRNEXTBIT指令的操作数
字段中进行描述。
在连接器运算过程中使用的符号 该类型在CSEG, DSEG, BSEG 或ORG
指令的符号字段中定义。
在符号调试中使用 该类型在NAME指令的操作数字段中进行
描述。
在源程序中用于宏引用 在MACRO指令的符号字段中进行描述。
注意 四种类型的符号,名称,标签,区段名称和宏名称,都可以在符号字段中描述。
32
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
(2) 符号描述的约定
所有符号必须依照以下规则进行描述:
(a) 符号必须由字母数字字符和可以用作字母字符的特殊字符(?, @, and _)来组成。 数字字符0至9都不能用作符号的首字符。 (b) 每个符号中包含的字符不能多于256个。超过最大符号长度的字符将被忽略。 (c) 保留字不能用作符号。保留字显示在表A-2中。 (d) 同一符号不能被多次定义 然而,以SET指令定义的名称可以用SET指令重新定义。 (e) 编译程序可以区别小写和大写字符。 (f) 当在符号字须中描述一个标签时,”:”(冒号)必须在标签后立即进行描述。
<正确的符号描述示例>
CODE01 CSEG ;“CODE01” 是一个段名。 VAR01 EQU 10H ;“VAR01” 是名称。 LAB01 : DW 0 ;“LAB01” 是一个标签 NAME SAMPLE ;“SAMPLE” 是一个模块名。 MAC1 MACRO ;“MAC1” 是一个宏名
<不正确的符号描述示例>
1ABC EQU 3 ; 数字字符不能用作符号的首字符。 LAB MOV A , R0 ; “LAB”是一个标签且必须使用冒号(:)来和助记符字段隔开。 FLAG : EQU 10H ; 冒号(:)在名字中不是必需的。
<过长符号的示例>
A123456789B12 Y1234567890123456 EQU 70H
257
; 超过最大符号长度(256
; 字符)的字符”6”被忽略。 ; 符号将会被定义为“A123456789B12
; Y123456789012345”
<仅由一个符号组成的语句的示例>
ABCD : “ABCD”将会被定义为一个标签。
用户手册 U17835CA1V0UM00
33
(3) 关于符号的一些注意事项
符号“??RAnnnn (n = 0000 到 FFFF)”是每次在宏体内开发一个局部符号时都将会被汇编器自动替换的符 号。须注意不要对该符号定义两次。 当段名不是通过段定义指令来指定时,编译程序将会自动生成一个段名。这些段名显示在下表中。 复制段名定义会产生一个错误。
段名 指令 重定位属性
?An ( n = 0000 到 FFFF ) ORG伪指令 (无) ?CSEG UNIT ?CSEGUP UNITP ?CSEGT0 CALLT0 ?CSEGFX FIXED ?CSEGSI SECUR_ID
?CSEGB BASE ?CSEGP64 PAGE64KP ?CSEGU64 UNIT64KP ?CSEGMIP MIRRORP ?CSEGOB0 ?DSEG UNIT ?DSEGUP UNITP ?DSEGS SADDR ?DSEGSP SADDRP ?DSEGBP BASEP ?DSEGP64 PAGE64KP ?DSEGU64 ?BSEG
2 章 如何描述源程序
CSEG伪指令
DSEG 伪指令
BSEG 伪指令
OPT_BYTE
UNIT64KP UNIT
34
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
(4) 符号属性
所有名字和标签都有一个值和一个属性。 值就是定义的数字数据或地址数据本身的值。 区段名称,模块名称和宏名称不含有值。 符号的属性被称作符号属性且必须是显示在下表中的八种类型之一。
属性类型 类别
数字
- 被赋于数字常量的名称
- 用EXTRN指令定义的符号
- 数字常量
地址
- 定义为标签的符号
- 用EQU和SET指令定义为标签的名称
- 定义为位值的名称
- BSEG内的名称
- 用EXTBIT指令定义的符号
SFR
SFRP
CSEG DSEG BSEG
模块 NAME指令定义的模块名(如果没有定
用MACRO伪指令定义的宏名
使用EQU伪指令定义的名称,和SFR一 样。 使用EQU伪指令定义的名称,和SFR一 样。 用CSEG指令定义的段名 用DSEG指令定义的段名 用BSEG指令定义的段名
义的模块名从输入源文件名中的主要名称 中创建)
<>
TEN EQU 10H ; 名称”TEN”具有属性”数字”和值”10H”。
ORG 80H START : MOV A , #10H ; 标签”START”具有属性”地址”和值”80H” BIT1 EQU 0FE20H.0 ; 名称”BIT1”具有属性”位”和值“0FE20H.0”。
十进制表示:0 1,048,575 十六进制表示: 符号型) 十进制表示:0 1,048,575 十六进制表示:
0H FFFFFH
SFR区域
这些属性类型不具有值
00000H
00000H
FFFFFH(无
FFFFFH
用户手册 U17835CA1V0UM00
35
2 章 如何描述源程序

2.2.4 助记符字段

助记指令,伪指令或宏引用在助记符字段中进行描述。 使用指令或需要一个或更多的操作数的伪指令时,助记符和操作数字段必须用一个或更多的空格或制表符来隔
开。
然而,使用以“#”, “$” ,“!”, “[”开头的指令的第一操作数时,即使在助记符字段和第一操作数字段间不存在任何 内容,汇编器仍将正常执行。
<正确描述的示例>
MOV A , #0H CALL !CONVAH
RET
<不正确描述的示例>
MOVA #0H ; 在助记符和操作数字段间不存在空格。 C ALL !CONVAH ; 在助记符中存在空格。 ZZZ ; 78K0 系列没有诸如”ZZZ”的指令。

2.2.5 操作数字段

用于执行指令,伪指令或宏引用的数据(操作数)在操作数字段中进行描述。 根据指令或伪指令,在操作数字段中将不需要操作数,而在操作数字段中必须描述两个或更多的操作数。 当描述两个或更多的操作数时,需用逗号(,)为每个操作数来定界。 以下类型的数据可以在操作数字段中进行描述:
- 常量(数字常量和串常量)
- 字符串
- 寄存器名
- 特殊字符( $ , # , ! , and [ ] )
- 段定义伪指令的重定位属性
- 符号
- 表达式
- 位项
所需操作数的尺寸和属性根据指令或伪指令可能会不同。关于操作数的尺寸和属性,请参考“2.15 操作数的特
关于在指令集中的操作数表达格式和描述方法,请参见开发中软件的微控制器用户手册。
关于每种可以在操作数字段使用的数据类型,详细描述如下
36
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
(1) 常量
常量是一个固定的值或数据项目,也可以被称为立即数。 常量被分为数字常量和字符串常量。
(a) 数字常量
二进制数,八进制数,十进制数或十六进制数可以被描述为数字常量。 每个数字常量类型的表示方法都显示在下表中。 数字常量将会被处理为无符号的32位数据。 值的范围: 0 <
n < 0FFFFFFFFH
描述一个负值时,使用负号运算符。
常量 表示方法 例 二进制常量 将字符”B”或”Y”用作数字值的后缀。
八进制常量 将字符”O”或”Q”用作数字值的后缀
十进制常量 数字值按原样描述,或将字符”D””T”
十六进制常量
作数字值的后缀。
- 将字符”H”用作数字值的后缀。
- 如果第一个字符以“A”, “B”, “C”, “D”,
“E”, “F”开头,那么”0” 必须用作
常量的后缀。
1101B 1101Y 74O
74Q 128 128D 128T 8CH 0A6H
(b) 字符串常量
通过将“2.2.2 字符集”中显示的一串字符封闭在一对单引号(‘)中来表示一个字符串常量。 作为汇编处理的结果,字符串常量通过将校验位(MSB)设为”0”来转换成7位ASCII码。 串常量的长度是0到2个字符。 为了将单引号本身用作一个串常量,单引号必须被连续输入两次。
<字符串常量描述示例>
' ab ' ; 表示“6162H” ' A ' ; 表示“0041H” ' A ''' ; 表示“4127H” ' ' ; 表示“0020H”(一个空格)
(2) 字符串
通过将2.2.2 字符集中显示的一串字符封闭在一对单引号(‘)中来表示一个字符串。字符串主要用于在
DBCALL指令中的操作数和TITLESUBTITLE控制指令。
用户手册 U17835CA1V0UM00
37
2 章 如何描述源程序
<字符串的应用示例>
CSEG MAS1 : DB ' YES ' ; 以字符串”YES”开始。 MAS2 : DB ' NO ' ; 以字符串”NO”开始。
(3) 寄存器名
以下寄存器可以在操作数字段中进行描述。
- 通用寄存器
- 通用寄存器对
- 特殊功能寄存器
通用寄存器和通用寄存器对可以以它们的绝对名(R0R7 RP0RP3)来描述,也可以用它们的功能名(X, A,
B, C, D, E, H, L, AX, BC, DE, HL)来描述。
可以在操作数字段中描述的寄存器名根据指令的类型可能会不相同。关于描述每个寄存器名描述方法的详细说
明,请参考开发中的软件的各个设备的用户手册。
(4) 特殊字符
下表显示了可以在操作数字段中描述的特殊字符。
特殊字符 功能
$
!
- 表示分支指令的绝对寻址模式。
# [ ]
<特殊字符的应用示例>
地址 源程序
100 ADD A , #10H 102 LOOP : NC A 103 BR $$ - 1 ; (a)
105 BR !$ + 100H ; (b)
(a) 在操作数中的第二个$表示地址103H。在同一运算中描述“BR $-1”的结果。 (b) 在操作数中的第二个$表示地址105H。在同一运算中描述“BR $+100H”的结果。
(5) 段定义指令的重定位属性
重定位属性可以在操作数字段中进行描述。 关于重定位属性的详细说明,请参考3.2 段定义指令”。
表示具有该操作数的指令的字单元地址(或在地址带有一个
-
多字节指令的情况下,该地址中的第一个字节)。
- 表示分支指令的相对寻址模式。
- 表示允许以一个MOV指令来指定所有内存空间的add16的
规范。
- 表示立即数。
- 表示间接寻址模式。
38
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
(6) 符号
如果在操作数字段中描述一个符号,那么分配到该符号中的地址(或值)将变成操作数值。
<符号的应用示例>
VALUE EQU 1234H MOV A , #VALUE ; 该描述可以写作“MOV A, #1234H”
(7) 表达式
表达式是与运算符连接的常量,$(表示一个字单元地址),名称或标签。. 表达式可以在表示数字值的地方描述为指令操作数。 关于表达式和运算符的详细资料,请参考“2.3 表达式和运算符”。
<表达式的示例>
TEN EQU 10H
MOV A , #TEN - 5H
在该例中,“TEN-5H”是一个表达式。 在该表达式中,名称和数字常量与一个-(减号)运算符相连。表达式的值为“BH”。 因此,该描述可以被写作“MOV A, #0BH”。
(8) 位项
位项可以通过位位置说明符来获取。关于位项的详细说明,请参考2.14 字节中位的位置说明符
<位项的示例>
CLR1 A.5 SET1 1 + 0FE30H.3 ; 操作数的值为 0FE31H.3。 CLR1 0FE40H.4 + 2 ; 操作数的值为 0FE40H.6。
用户手册 U17835CA1V0UM00
39
2 章 如何描述源程序

2.2.6 注释字段

在注释字段中,注释或备注可以在输入一个分号(;)后进行描述。 注释字段是从分号到该行或EOF的换行码。 通过在注释字段中描述一个注释语句,可以创建一个易于理解的源程序。 在注释字段中的注释语句不受汇编器运算(也就是转换为机器语言)的影响,但将会被原封不动地输出到汇编
列表中。
可以在注释字段中进行描述的字符是那些显示在2.2.2 字符集中的字符。
<注释的示例>
NAME SAMPM ; ***************************************** ; HEX -> ASCII Conversion Program ; 仅由注释字段组成的行 ; main-routine ; *****************************************
PUBLIC MAIN , START EXTRN CONVAH EXTRN @STBEG DATA DSEG saddr HDTSA : DS 1 STASC : DS 2
CODE CSEG AT 0H MAIN : DW START
CSEG START : ; chip initialize 仅由注释字段组成的行 MOVW SP , #_@STBEG MOV HDTSA , #1AH MOVW HL , #HDTSA ; set hex 2-code data in HL register CALL !CONVAH ; convert ASCII <- HEX ; output BC-register <- ASCII code 在注释字段中描述注释的行 MOVW DE , #STASC ; set DE <- store ASCII code table MOV A , B MOV [ DE ] , A INCW DE MOV A , C MOV [ DE ] , A BR $$
END
40
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
2.3 表达式和运算
表达式是与符号,常量,字单元地址(用$表示)中的一个相组合的运算符,或是运算符的组合。 表达式中不同于运算符的元素被称为项,并且按它们的描述顺序从左到右依次被称为第一项,第二项等。 在表2-4中所显示的运算符的类型是可用的,且它们在计算时的优先级已经按表2-5中所显示的被预先规定。 圆括号”()”用于更改执行计算时顺序。
< >
MOV A , #5 * ( SYM + 1 ) ; ( 1 )
在上述(1)中,“5* (SYM+1)”是一个表达式。”5”是表达式中的第一项,“SYM” “1”则分别是第二项和第三 项,“*”“+”,和 “( )”则是运算符。
2-4 运算符的类型
运算符的类型 运算符
算术运算符 +号, -号, + , - , * , / , MOD 逻辑运算符 关系运算符 EQ(=), NE(< >), GT(>), GE(>=), LT(<), LE(<=) 位移运算符 字节分离运算符 特殊运算符 其它运算符
上述运算符也可以被分为一元运算符,特殊一元运算符,二进制运算符,n元运算符和其他运算符。
运算符的类型 运算符 一元运算符 +号, -号, NOT , HIGH , LOW 特殊一元运算符 二进制运算符
n元运算符 其他运算符
NOT , AND , OR , XOR
SHR , SHL HIGH , LOW DATAPOS , BITPOS , MASK ( )
DATAPOS , BITPOS + , - , * , / , MOD , AND , OR , XOR ,
EQ (=), NE (< >), GT (>), GE (>=), LT (<), LE (<=), SHR, SHL MASK
( )
用户手册 U17835CA1V0UM00
41
2 章 如何描述源程序
2-5 运算符的优先级顺序
优先级 优先级别 运算符
2 3 4 5 6
1
+ , - , NOT , HIGH , LOW , DATAPOS , BITPOS , MASK * , / , MOD , SHR , SHL + , - AND OR , XOR
EQ 或 = , NE < > , GT > , GE >= , LT < , LE <=
依照以下规则来执行表达式的运算:
(1) 依照每个运算符的优先级顺序来执行运算。
如果在一个表达式中存在两个或更多的具有同一优先级的运算符,将执行最左边的运算符所指定的运算。 至于一元运算符,将按从右到左的顺序来执行运算。
(2) 圆括号内的表达式在圆括号外的表达式之前执行。 (3) 允许在两个或更多的一元运算符间的运算。
: 1 = --1 == 1
-1 = -+1 = -1
(4) 表达式在32位内进行无符号数的计算。
如果由于表达式超过32位而在运算时发生溢出,溢出值将被忽略。 (5) 如果一个常量超过32位(0FFFFH),将会产生一个错误,且计算结果的值将被认为是0 (6) 在除法中,结果中的小数部分将被清除。如果除数为0,则将会发生一个错误,且结果将会是0 (7) 负值要用2的补码形式表示。 (8) 在汇编过程中认为外部引用符号的值为零(该值的赋入是在连接时决定)。 (9) 在操作区段描述的表达式结果必须满足指令的要求。
如果在需要8位操作数的指令中使用了重定位表达式或使用外部引用的表达式,目标将从低8位的值获得,
并要求重定位信息按照16位输出。然后连接器检测已经被确定的值是否可以用8位来表示,如果溢出则在连
接时发生错误。
如果描述中出现绝对表达式,汇编器决定该表达式的值,并检查该值是否在要求范围内。
比如,MOV指令要求8位操作数,所以使用的值应该在0H0FFH之类。
42
用户手册 U17835CA1V0UM00
<正确表达的示例>
MOV A , #'2*' AND 0FH MOV A , #4 * 8 * 8 - 1
<错误表达的示例>
MOV A , #'2*.
MOV A , #4 * 8 * 8
<求值示例>
表达式 评估值 2 + 4 * 5 22 ( 2 + 3 ) * 4 20 10 / 4 2 0 - 1 0FFFFFFFFH
-1 > 1 00H (False)
EXT
+ 1
EXT:外部引用符号
2 章 如何描述源程序
1
用户手册 U17835CA1V0UM00
43

2.4 算术运算符

可以使用的算术运算符描述如下:
- +
- -
- *
- /
- MOD
- + sign
- - sign
2 章 如何描述源程序
44
用户手册 U17835CA1V0UM00
2 章 如何描述源程序

+ 运算符

[功能]
- 返回表达式第一项和第二项的值的和。
[应用示例]
ORG 100H START : BR !$ + 6 ; ( a )
[说明]
- BR指令产生一个转移到“当前字单元地址加6”,也就是地址跳转到“100H+6H = 106H”
因此,上例中的(a)也可以被描述为:START: BR !106H
用户手册 U17835CA1V0UM00
45
2 章 如何描述源程序

- 运算符

[功能]
- 返回从第一项的值中减去第二项的值所得到的结果。
[应用示例]
ORG 100H BACK : BR BACK - 6H ; ( b )
[说明]
- BR指令产生一个转移到“赋值到BACK减6的地址”,也就是产生一个转移到“100H-6H=0FAH”。 因此,上例中的(b)也可以被描述为:BACK: BR !0FAH
46
用户手册 U17835CA1V0UM00
2 章 如何描述源程序

* 运算符

[功能]
- 返回表达式的第一和第二项的值的乘积。
[应用示例]
TEN EQU 10H MOV A , #TEN * 3 ; ( c )
[说明]
- 使用EQU指令将”TEN”的值定义为“10H”。 “#”表示立即数。表达式“TEN*3”与“10H*3”相同,并且返回值”30H”
因此,在上述表达式中的(c)也可以被描述为:MOV A,#30H
用户手册 U17835CA1V0UM00
47
2 章 如何描述源程序

/ 运算符

[功能]
- 将表达式第一项的值除以表达式第二项的值,并返回到结果的整数部分。
结果的小数部分将会被清除。如果除法运算中的除数(第二项)为0,则将产生一个错误
[应用示例]
MOV A , #256 / 50 ; ( d )
[说明]
- 除法运算“256/50”的结果是5余6。
运算符返回到值”5””5”是除法运算的结果的整数部分。 因此,上述表达式中的(d)也可以被描述为:MOV A, #5
48
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
MOD
[功能]
- 获取表达式第一项的值除以表达式第二项的值所得结
果中的余数。
如果除数(第二项)为0,则将产生一个错误。 在MOD运算符的前后均需有一个空格。
用示例]
[
MOV A , #256 MOD 50 ; ( e )
[说明]
- 除法运算“256/50”的结果是5余6。
MOD运算符返回余数6。
因此,上述表达式中的(e)也可以描述为:MOV A,#6
用户手册 U17835CA1V0UM00
49
2 章 如何描述源程序
+
[功能]
- 原封不动地
[应用示例]
FIVE EQU +5
[说明]
- 原封不动地返回项的值”5”。
使用EQU指令定义变量”FIVE”的值为”5”
返回表达式中项的值。
50
用户手册 U17835CA1V0UM00
-
[功能]
- 以二进制补码返回表达式中项的值。
[应用示例]
NO EQU -1
[说明]
- -1变成1的二进制补码。
二进制数0000 0000 0000 0001的二进制补码变成: 1111 1111 1111 1111
因此,使用EQU指令定义变量”NO”的值为“0FFFFH”
2 章 如何描述源程序
用户手册 U17835CA1V0UM00
51

2.5 逻辑运算符

可以使用的逻辑运算符描述如下:
- NOT
- AND
- OR
- XOR
2 章 如何描述源程序
52
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
NOT
[功能]
- 将表达式中
项的值按位取反,并将结果返回。
NOT运算符和项之间需有一个空格。
[应用示例]
MOVW AX , #NOT 3H ; ( a )
[说明]
- 按以下方式在”3H”上执行逻辑非:
NOT ) 0000 0000 0000 0000 0000 0000 0011
1111 1111 1111 1111 1111 1111 1100
返回0FFFFFFFCH
因此,(a)可以被描述为:MOVW AX, #0FFFFFFFCH
用户手册 U17835CA1V0UM00
53
2 章 如何描述源程序
AND
[功能]
- 在表达式的第一项的值和第二项的值之间按位执行AND(逻辑与)运算,并且将结果返回。
AND运算符
[应用示例]
MOV A , #6FAH AND 0FH ; ( b )
[说明]
- 按以下方式在 “6FAH” “0FH” 两个值之间执行AND运算:
AND ) 0000 0000 0000 0000 0000 0000 0000 1111
返回结果0AH。因此,上述表达式中的(b)也可以被描述为:MOV A, #0AH
的前后均需有一个空格。
0000 0000 0000 0000 0000 0110 1111 1010
0000 0000 0000 0000 0000 0000 0000 1010
54
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
OR
[功能]
- 在表达式的第一项的值和第二项的值之间按位执行OR(逻辑或)运算,并且将结果返回。
OR运算符的前后均需有一个空格。
[应用示例]
MOV A , #0AH OR 1101B ; ( c )
[说明]
- 按以下方式在 “0AH” “1101B” 两个值之间执行OR运算:
0000 0000 0000 0000 0000 0000 0000 1010
OR ) 0000 0000 0000 0000 0000 0000 0000 1101
0000 0000 0000 0000 0000 0000 0000 1111
返回结果0FH
因此,上述表达式中的(c)也可以被描述为:MOV A, #0FH
用户手册 U17835CA1V0UM00
55
2 章 如何描述源程序
XOR
[功能]
- 在表达式的第一项的值和第二项的值之间按位执行Ex 在XOR运算符的前后均需有一个空格。
[应用示例]
MOV A , #9AH XOR 9DH ; ( d )
[说明]
- 按以下方式在 “9AH” “9DH” 两个值之间执行XOR运算:
0000 0000 0000 0000 0000 0000 1001 1010
XOR ) 0000 0000 0000 0000 0000 0000 1001 1101
0000 0000 0000 0000 0000 0000 0000 0111
返回结果7H
上述表达式中的(d)也可以被描述为:MOV A, #7H
clusive-OR(逻辑异或)运算,并且将结果返回。
56
用户手册 U17835CA1V0UM00

2.6 关系运算符

可以使用的关系运算符描述如下:
- EQ (=)
- NE (< >)
- GT (>)
- GE (>=)
- LT (<)
- LE (<=)
2 章 如何描述源程序
用户手册 U17835CA1V0UM00
57
2 章 如何描述源程序

EQ =

[功能]
- 如果表达式
EQ运算符的前后均需有一个空格。
[应用示例]
A1 EQU 12C4H A2 EQU 12C0H
MOV A , #A1 EQ ( A2 + 4H ) ;( a ) MOV X , #A1 EQ A2 ; ( b )
[说明]
- 在上述的(a)中,表达式“A1 EQ (A2+4H)”变成“12C4H EQ (12C0H+4H)” 运算符返回0FFH,因为第一项的值等于第二项的值。
- 在上述的(b)中,表达式“A1 EQ A2” 变成 “12C4H EQ 12C0H”
运算符返回00H,因为第一项的值不等于第二项的值。
中第一项的值等于第二项的值则返回0FFH(真),如果两项的值不相等则返回00H(假)。
58
用户手册 U17835CA1V0UM00
2 章 如何描述源程序

NE< >

[功能]
- 如果表达式
中第一项的值不等于第二项的值则返回0FFH(真),如果两项的值相等则返回00H(假)。
NE运算符的前后均需有一个空格。
[应用示例]
A1 EQU 5678H A2 EQU 5670H
MOV A , #A1 NE A2 ; ( c ) MOV A , #A1 NE ( A2 + 8H ) ;( d )
[说明]
- 在上述的(c)中,表达式“A1 NE A2”变成“5678H NE 5670H” 运算符返回0FFH,因为第一项的值不等于第二项的值。
- 在上述的(d)中,表达式“A1 NE (A2+8H)”变成“5678H NE (5670H+8H)”
运算符返回00H,因为第一项的值等于第二项的值。
用户手册 U17835CA1V0UM00
59
2 章 如何描述源程序

GT >

[功能]
- 如果表达式 项的值则返回00H(假)。
GT运算符的前后均需有一个空格。
[应用示例]
A1 EQU 1023H A2 EQU 1013H
MOV A , #A1 GT A2 ; ( e ) MOV X , #A1 GT ( A2 + 10H ) ; ( f )
[说明]
- 在上述的(e)中,表达式“A1 GT A2”变成“1023H GT 1013H” 运算符返回0FFH,因为第一项的值大于第二项的值。
- 在上述的(f)中,表达式“A1 GT (A2+10H)”变成“1023H GT (1013H+10H)”
运算符返回00H,因为第一项的值等于第二项的值。
中第一项的值大于第二项的值则返回0FFH(真),如果表达式中第一项的值等于或小于第二
60
用户手册 U17835CA1V0UM00
2 章 如何描述源程序

GE>=

[功能]
- 如果表达式中第一项的值大于或等于第二项的值则返回0
FFH(真),如果表达式中第一项的值小于第二项
值则返回00H(假)。
- 在GE运算符的前后均需有一个空格。
[应用示例]
A1 EQU 2037H A2 EQU 2015H
MOV A , #A1 GE A2 ; ( g ) MOV X , #A1 GE ( A2 + 23H ) ; ( h )
[说明]
- 在上述的(g)中,表达式“A1 GE A2”变成“2037H GE 2015H” 运算符返回0FFH,因为第一项的值大于第二项的值。
- 在上述的(h)中,表达式“A1 GE (A2+23H)”变成“2037H GE (2015H+23H)”
运算符返回00H,因为第一项的值小于第二项的值。
用户手册 U17835CA1V0UM00
61
2 章 如何描述源程序

LT<

[功能]
- 如果表达式 项的值则返回00H(假)。
LT运算符的前后均需有一个空格。
[应用示例]
A1 EQU 1000H A2 EQU 1020H
MOV A , #A1 LT A2 ; ( i ) MOV X , # ( A1 + 20H ) LT A2 ; ( j )
[说明]
- 在上述的(i)中,表达式“A1 LT A2”变成“1000H LT 1020H” 运算符返回0FFH,因为第一项的值小于第二项的值。
- 在上述的(j)中,表达式“(A1+20H) LT A2”变成“(1000H+20H) LT 1020H”
运算符返回00H,因为第一项的值等于第二项的值。
中第一项的值小于第二项的值则返回0FFH(真),如果表达式中第一项的值等于或大于第二
62
用户手册 U17835CA1V0UM00
2 章 如何描述源程序

LE<=

[功能] ]
- 如果表达式
中第一项的值小于或等于第二项的值则返回0FFH(真),如果表达式中第一项的值
大于第二项的值则返回00H(假)。
LE运算符的前后均需有一个空格。
[应用示例]
A1 EQU 103AH A2 EQU 1040H
MOV A , #A1 LE A2 ; ( k ) MOV X , # ( A1 + 7H ) LE A2 ; ( l )
[说明]
- 在上述的(k)中,表达式“A1 LE A2”变成“103AH LE 1040H” 运算符返回0FFH,因为第一项的值小于第二项的值。
- 在上述的(l)中,表达式“(A1+7H) LE A2”变成“(103AH+7H) LE 1040H”
运算符返回00H,因为第一项的值大于第二项的值。
用户手册 U17835CA1V0UM00
63
2.7 循环移动运算
可以使用的循环移动运算符描述如下:
- SHR
- SHL
2 章 如何描述源程序
64
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
SHR
[功能]
- 返回的值是将表达式中第一项的值向右移动,移动的位数由第二项的值所指定。相当于循环移动过程 中,指定位数个0被移动到字节的高位中。
SHR运算符的前后均需有一个空格。
[应用示例]
MOV A , #01AFH SHR 5 ; ( a )
[说明]
- 该运算符将值“01AFH”右移5位。
0000 0000 0000 0000 0000 0001 1010 1111
0000 0000 0000 0000 0000 0000 0000 1101
0111 1
插入0
返回值“000DH”。 因此,上例中的(a)也可以描述为:MOV A, #0DH
右移5位
用户手册 U17835CA1V0UM00
65
2 章 如何描述源程序
SHL
[功能]
- 返回的值是将表达式中第一项的值向左移动,移动的位数由第二项的值所指定。相当于循环移动过程 中,指定位数个0被移动到字节的低位中。
SHL运算符的前后均需有一个空格。
[应用示例]
MOV A , #21H SHL 2 ; ( b )
[说明]
- 该运算符将值“21H”左移2位。
0000 0000 0000 0000 0000 0000 0010 0001
00
左移2位
返回值“84H”。 因此,上例中的(b)也可以描述为:MOV A, #84H
0000 0000 0000 0000 0000 0000 1000 0100
插入0
66
用户手册 U17835CA1V0UM00
2.8 字节分离运算
可以使用的字节分离运算符描述如下:
- HIGH
- LOW
2 章 如何描述源程序
用户手册 U17835CA1V0UM00
67
2 章 如何描述源程序

HIGH

[功能]
- 返回项的高
HIGH运算符和项之间需有一个空格。
[应用示例]
MOV A , #HIGH 1234H ; ( a )
[说明]
- 通过执行MOV指令,该运算符可以返回表达式“1234H”的高位中的8位值“12H”。
因此,上例中的(a)也可以被描述为:MOV A, #12H
位中的8位值。
68
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
LOW
[功能]
- 返回项的低
位中的8位值。
LOW运算符和项之间需有一个空格。
[应用示例]
MOV A , #LOW 1234H ; ( b )
[说明]
- 通过执行MOV指令,该运算符可以返回表达式“1234H”的低位中的8位值“34H”。
因此,上例中的(b)也可以被描述为:MOV A, #34H
用户手册 U17835CA1V0UM00
69

2.9 字分离运算符

可以使用的字分离运算符描述如下:
- HIGHW
- LOWW
2 章 如何描述源程序
70
用户手册 U17835CA1V0UM00
2 章 如何描述源程序

HIGHW

[功能]
- 返回项的高
位中的16位值。
HIGHW运算符和之间需有一个空格。
[应用示例]
MOVW AX , #HIGHW 12345678H ; (a) MOV ES , #HIGHW LAB ; (b)
MOVW AX , ES:!LAB
[说明]
- 通过执行MOVW指令,该运算符可以返回表达式“12345678H”的高位中的16位值“1234H” 因此,上例中的(a)也可以被描述为:MOVW AX, #1234H
- 通过执行(b)行的MOV指令,标签LAB的高端地址就被赋给ES寄存器。
[备注]
- 对某个SFR名称执行HIGHW操作,使用下列描述的任何一种方法:
HIGHW Δ SFR 名称
HIGHW[Δ] ([Δ]SFR 名称[Δ])
操作中获得的结果是绝对NUMBER属性的操作数。 不能对SFR名称进行其他操作。
<>
Symbol field Mnemonic field Operand field MOVW RP0 , #HIGHW PM0 MOVW RP1 , #HIGHW PM1 + 1H ; 等价于#( HIGHW PM1 ) + 1 MOVW RP1 , #HIGHW ( PM1 + 1H ) ; 会返回一个错误 ; 因为对 SFR 名称指定了
; HIGH, LOW, HIGHW, LOWW ; 之外的操作数。
用户手册 U17835CA1V0UM00
71
2 章 如何描述源程序

LOWW

[功能]
- 返回项的低 在LOWW运算符和项之间需有一个空格。
[应用示例]
MOVW A , #LOWW 12345678H ; ( a )
[说明]
- 通过执行MOVW指令,该运算符可以返回表达式“12345678H”的低16位值“1234H” 因此,上例中的(a)也可以被描述为:MOVW AX, #5678H
[备注]
- 对某个SFR名称执行LOWW操作,使用下列描述的任何一种方法:
LOWW Δ SFR 名称
LOWW[Δ] ([Δ]SFR 名称[Δ])
操作中获得的结果是绝对NUMBER属性的操作数。 不能对SFR名称进行其他操作。
<>
Symbol field Mnemonic field Operand field MOVW RP0 , # LOWW PM0 MOVW RP1 , # LOWW PM1 + 1H ; 等价于#( LOWW PM1 ) + 1 MOVW RP1 , # LOWW ( PM1 + 1H ) ; 会返回一个错误 ; 因为对 SFR 名称指定了
; HIGH, LOW, HIGHW, LOWW ; 之外的操作数。
位中的16位值。
72
用户手册 U17835CA1V0UM00

2.10 特殊运算符

可以使用的特殊运算符描述如下:
- DATAPOS
- BITPOS
- MASK
2 章 如何描述源程序
用户手册 U17835CA1V0UM00
73
2 章 如何描述源程序

DATAPOS

[功能]
- 返回位符号
[应用示例]
SYM EQU 0FE68H.6 MOV A , !DATAPOS SYM ; ( a )
[说明]
- EQU指令将 “SYM” 的值定义为0FE68H.6。 “DATAPOS SYM” 表示 “DATAPOS 0FE68H.6”,并返回“0FE68H”。
因此,在上例中的(a)也可以被描述为:MOV A, !0FE68H
的地址部分(字节地址)。
74
用户手册 U17835CA1V0UM00
2 章 如何描述源程序

BITPOS

[功能]
- 返回位符号
的位部分(位位置)。
[应用示例]
SYM EQU 0FE68H.6 CLR1 [ HL ] .BITPOS SYM ; ( b )
[说明]
- EQU指令将 “SYM” 的值定义为0FE68H.6。 “BITPOS.SYM” 表示 “BITPOS 0FE68H.6”,并返回”6”。 CLR1指令将[HL].6清0。
用户手册 U17835CA1V0UM00
75
2 章 如何描述源程序

MASK

[功能]
- 返回一个16位值,值中的指定位位置为1且其他位位置均被设为0。
用示例]
[
MOVW AX , #MASK ( 0 , 3 , 0FE00H.7 , 15 )
[说明]
- MOVW指令返回值“8089H”。
F E D C B A 9 8 7 6 5 4 3 2 1 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1
MASK ( 0 , 3 , 0FE00H.7 , 15 )
76
用户手册 U17835CA1V0UM00

2.11 其他运算符

可以使用的其他运算符描述如下:
- ( )
2 章 如何描述源程序
用户手册 U17835CA1V0UM00
77
2 章 如何描述源程序
( )
[功能]
- 使得圆括号中的运算比圆括号外的运算优先被执行。 该运算符用于改变其他运算符的优先级别。 如果圆括号被嵌入多个级别中,最内部圆括号中的表达式将先被计算。
用示例]
[
MOV A , # ( 4 + 3 ) * 2
[说明]
( 4 + 3 ) * 2
( 1 )
( 2 )
按表达式<1> <2>的顺序来执行计算,且返回值”14”来作为结果。
如果没有使用圆括号,
4 + 3 * 2
( 1 )
( 2 )
将按以上显示的顺序来执行计算,且返回会下”10”来作为结果。 关于运算符的优先级别,参见表2-5
78
用户手册 U17835CA1V0UM00
2 章 如何描述源程序

2.12 运算限制

通过将项与运算符连接来执行表达式的运算。描述为项的元素包括常量,$,名称和标签。每个项具有一个重
定位属性和一个符号属性。
根据每个项内固有的重定位属性和符号属性的类型,在项上执行的运算符将会受限制。因此,当描述一个表达
式时,注意构成表达式中每项的重定位属性和符号属性是非常重要的。
2.12.1 运算符
正如先前所提到的,构成表达式的每个项都具有一个重定位属性和一个符号属性。 当根据项的重定位属性来分类时,项可以被分为三类:绝对项,浮动项和外部引用项。 在运算中的重定位属性的类型,每个属性的性质,适用于每个属性的项显示在表 2-11中。
类型 性质 适用项 绝对项 值和常量在汇编时间中确定的项 常量
浮动项 值不在汇编时间中确定的项 在一个浮动段中定义的标签
外部引用项
注 以下五个运算符可以在外部引用项上起作用:‘+’, ‘–’, ‘HIGH’, ‘LOW’和”BANKNUM”。只有一个外部引用符号
和重定位属性
2-6 重定位属性的类型
在一个绝对段中定义的标签 表示在一个绝对段中定义的字单元地址的
$
以常量,上述标签,上述$或绝对值定义 的名称
表示在浮动段中定义的字单元地址的$
在外部引用另一模块中的符号的项 以EXTRN指令定义的标签
以一个浮动符号定义的名称
EXTBIT指令定义的名称
可以在表达式中进行描述。在这种情况下,外部引用符号必须与一个”+”运算符连接。
用户手册 U17835CA1V0UM00
79
2 章 如何描述源程序
运算符的类型和可以在上面执行每个运算符的项的组合显示在2-12中。
2-7 按照重定位属性区分的项和操作符的组合
操作符类型 项的重定位属性
X: ABS Y: ABS
X + Y A R R
X – Y A R
X * Y A
X / Y A
X MOD Y A
X SHL Y A
X SHR Y A
X EQ Y A
X LT Y A
X LE Y A
X GT Y A
X GE Y A
X NE Y A
X AND Y A
X OR Y A
X XOR Y A
NOT X A A
+ X A A R R
– X A A
HIGH X A A
LOW X A A
HIGHW X A A
LOWW X A A
MASK (X) A A
DATAPOS X.Y A
BITPOS X.Y A
MASK (X.Y) A
DATAPOS X A A R
BITPOS X A A A
X: ABS Y: REL
X: REL Y: ABS
2
R
R
2
R
R
2
R
R
2
R
R
X: REL Y: REL
1
A
1
A
1
A
1
A
1
A
1
A
1
A
2
2
2
2
R
A
80
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
<表格说明>
ABS : 绝对项
REL : 浮动项 A : 运算的结果变成一个绝对项。 R : 运算的结果变成一个浮动项。
- : 不能执行运算。
1. 只有当XY在同一段中进行定义,并且它们不是在上面执行HIGH,LOW,DATAPOS的浮动项时
才可以执行运算。
2. 只有当X和Y不是执行HIGN,LOW,BANDKNUM,DATAPOS的浮动项时才可以执行运算。
以下五个运算符可以在外部引用项上执行:“+” , “-” , “HIGH” , “LOW” , “BANKNUM”(然而,须注意只有一个
部引用项可以在表达式中进行描述)。 运算符类型和可以在上面执行运算符的外部引用项的组合依照表2-13中的重定位属性进行分类。
2-8 用重定位属性组合项和操作符 (外部引用项)
项的重定位属性 操作符类型
X:ABS Y:EXT
X:EXT Y:ABS
X:REL Y:EXT
X:EXT Y:REL
X:EXT Y:EXT
X + Y E E
X – Y E
+ X A E R E E
HIGH X A
LOW X A
HIGHW X A
LOWW X A
1
R
E
1
R
E
1
R
E
1
R
E
2
E
2
E
2
E
2
E
1
E
1
E
1
E
1
E
1
1
1
1
MASK (X) A — — — —
DATAPOS X.Y — — — — —
BITPOS X.Y — — — — —
MASK (X.Y) — — — — —
DATAPOS X A E R E E
BITPOS X A E A E E
用户手册 U17835CA1V0UM00
81
2 章 如何描述源程序
<表格说明>
ABS : 绝对项
EXT : 外部引用项
REL : 浮动项
A : 运算的结果变成一个绝对项。 E : 运算的结果变成一个外部引用项。 R : 运算的结果变成一个浮动项。
- : 不能执行运算。
1. 只有当XY不是在上面执行HIGH , LOW , BANKNUM , DATAPOS , BITPOS的外部引用项时才
可以执行运算。
2. 只有当XY不是在上面执行HIGH,LOW,BANKNUM, DATAPOS的浮动项时才可以执行运
算。
2.12.2 运算符
和符号属性
正如先前所提到的,构成表达式的每个项除了具有一个重定位属性外还具有一个符号属性。当根据项的符
号属性来分类时,项可以被分为两种类型:数字项和地址项。
在运算中的符号属性的类型和适用于每个属性的项显示在2-14中。
2-9 操作中的符号属性类型
符号属性类型 可用项
NUMBER 项 具有 NUMBER 属性的符号
常量
ADDRESS 项 具有 ADDRESS 属性的符号
$表示位置计数器
运算符的类型和根据项的符号属性可以在上面执行每个运算符的项的组合显示在表 2-15 中。
82
用户手册 U17835CA1V0UM00
2-10 用符号属性组合项和操作符
操作符类型
X + Y A A N
X – Y N A N
X * Y — — — N
X / Y A A A N
X MOD Y N A N N
X SHL Y N N N N
X SHR Y N N N N
X EQ Y N N N N
X LT Y N N N N
X LE Y N N N N
X GT Y N N N N
X GE Y N N N N
X NE Y N N N N
X AND Y N N N N
X OR Y N N N N
X XOR Y N N N N
NOT X N N N N
+ X N N N N
X N N N N
HIGH X A A N N
LOW X A A N N
HIGHW X A A N N
LOWW X A A N N
DATAPOS X A A N N
MASK X N N N N
X:ADDRESS Y:ADDRESS
<表格说明> ADDRESS : 地址项 NUMBER : 数字项 A : 运算的结果变成一个地址项。 N : 运算的结果变成一个数字项。
- : 不能执行运算。
2 章 如何描述源程序
项的符号属性
X:ADDRESS
Y:NUMBER
X:NUMBER
Y:ADDRESS
X:NUMBER Y:NUMBER
用户手册 U17835CA1V0UM00
83
2 章 如何描述源程序

2.12.3 如果检查运算中的限制

此处显示了每项中根据重定位属性和符号属性的运算示例。
< >
BR $TABLE + 5H
这里假设”TABLE”是一个在浮动码段中定义的标签。
[运算符和重定位属性]
因为“TABLE+5H”是“浮动项+绝对项”,因此该运算可以用于表2-7。 运算符的类型 : X + Y
项的重定位属性 : X : REL , Y : ABS
从表中,你可以发现结果为R(也就是一个浮动项)。
[运算符和符号属性]
因为“TABLE+5H”地址项+数字项,因此该运算可以用于2-10
运算符的类型 : X + Y
项的符号属性 : X : 地址 , Y : 数字
从表中,你可以发现结果为A(也就是一个地址项)。
84
用户手册 U17835CA1V0UM00
2 章 如何描述源程序

2.13 绝对表达式的定义

如果在汇编时就已经对表达式求值,并决定了该表达式的值。这样的表达式被称为绝对表达式。
下列表达式被称为绝对表达式:
常量
表达式中只包含常量(常量表达式)
常量,使用EQU符号定义的常量表达式,或者SET符号
涉及上述目标某种操作的表达式。
备注 这些符号仅支持向后引用。
用户手册 U17835CA1V0UM00
85

2.14 位位置说明符

可以通过使用位位置说明符(. )来访问位。
2 章 如何描述源程序
86
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
[格式描述]
X [ ∆ ] . [ ∆ ] Y
位项
X (第一项)
通用寄存器 控制寄存器 特殊功能寄存器
内存
A PSW
sfr
[ HL ]
注 关于特定描述的详细说明,参见各个设备的用户手册。
Y (第二项) 表达式( 0到7 )
表达式( 0到7 ) 表达式( 0到7 )
表达式( 07 )
[功能]
- 位位置说明符以它的第一项指定一个字节地址,以它的第二项指定位的位置。通过该位位置说明符可以访
特定的位。
[说明]
- 位项指的是一个使用位位置说明符的表达式。
- 位位置说明符不受运算符的优先级别的影响。位位置说明符的的左侧被认为是第一项,它的右侧被认为 是第二项。
- 以下限制用于第一项: (1) 带有数字或地址属性的表达式,能够进行位访问的SFR的名称或寄存器名(A)可以被描述。
(2) 绝对值表达式在第一项中进行描述时,它必须在0FE20H到0FF1FH的范围内。
(3) 可以描述一个外部引用符号。
- 以下限制用于第二项: (1) 表达式的值必须在0到7的范围内。如果超过该值范围,将会产生一个错误。
(2) 只有带有数字属性的绝对表达式可以被描述。
(3) 没有外部引用符号可以被描述。
用户手册 U17835CA1V0UM00
87
2 章 如何描述源程序
[运算和重定位属性]
- 按重定位属性组合的第一和第二项显示在表2-17中。
按重定位属性组合的第一和第二项。
项组合 X 项组合 Y
X.Y A — R — — E — — —
ABS ABS REL REL ABS EXT REL EXT EXT
ABS REL ABS REL EXT ABS EXT REL EXT
<表格说明> ABS : 绝对项 EXT : 外部引用项 REL : 浮动项 A : 运算的结果变成一个绝对项。 E : 运算的结果变成一个外部引用项。 R : 运算的结果变成一个浮动项。
- : 不能执行运算。
[位符号的值]
- 通过描述在EQU指令的操作数字段中使用位位置说明符的位项来定义一个位符号时,位符号将会具有的值会
显示在下2-18中。
操作数类型 符号值
A.注2 1. PSW. 注2 FFFFAH. sfr1.
2
FFFxxH.
3
expression. 位注2 xxxxH. 位注4 注 1. 关于详细的描述,请参考各个设备的用户手册。 注 2. 位=0到7。 注 3. FFFxxH表示sfr的地址。 注 4. xxxxxH 表示表达式的值。
[应用示例]
SET1 0FFE20H.3 SET1 A.5
CLR1 P1.2 SET1 1 + 0FFE30H.3 ; 等于 0FFE31H.3 SET1 0FFE40H.4 + 2 ; 等于 0FFE40H.6
88
用户手册 U17835CA1V0UM00
2 章 如何描述源程序

2.15 操作数的特征

需要一个或多个操作数的指令和伪指令不同于在所需操作数值的的尺寸和地址范围中的各个类型的指令以及在 操作数的符号属性中的各个类型的指令。 例如,指令“MOV r, #byte”可以将由”byte”所表示的值转移到寄存器”r”中。假使这样,因为r是一个8位寄存器, 因此要转移的数据”byte”的尺寸必须是8位或小于8位。 如果指令被描述为“MOV R0, #100H”,将产生一个汇编错误,因为指令的第二操作数“100H”的尺寸起来8位寄 存器R0的容量。
因此,当描述一个操作数时,必须注意以下几点:
- 操作数的尺寸或地址范围是否适合于指令的操作数(数字数据,名称或标签)?
- 符号属性是否适合于指令的操作数(名称或标签)?

2.15.1 操作数的值的尺寸和地址范围

可以为描述为指令的操作数的数字数据,名称或标签的值的尺寸和地址范围设置一定的条件。 使用指令时,为操作数值的尺寸和地址范围所设置的条件是由每个指令的操作数表达格式来支配的。使用指令 时,为操作数值的尺寸和地址范围所设置的条件是由指令的类型来支配的。
这些条件显示在下表中。
2-11 指令的操作数值的范围
操作数表达格式 值的范围
字节
Saddr Saddrp Sfr
Sfrp
Addr20
8-位值 0H to FFH word [ B ]
word [ C ] word [ BC ]
数值常数和NUMBER属性符号0H FFFFH ADDRESS属性符号 (1)范围内或者(2)区域内 (1) F0000H至FFFFFH (2) 当MAA=001000H0xxxxH 时,映射到RAM空间的区域,或当 MAA=111000H1xxxxH)时
1
映射
RAM空间的区域
ES : word [ B ] ES : word [ C ] ES : word [ BC ]
其它 FFE20H至FFF1FH FFE20H至FFF1FH
数值常数和NUMBER属性符号 0H FFFFH ADDRESS属性符号 0HFFFFH
16-位值 0H FFFFH
4
4
之间的偶地址值 FFF20HFFFFFH:特殊功能寄存器符号(SFR的符号), 以及数值常数和NUMBER属性符号
5
FFF20HFFFFFH:特殊功能寄存器符号(可以以16位单元 操控的SFR的符号,必须为偶数值),以及数值常数和
NUMBER属性符号 !!addr20 $addr20
5
0HFFFFFH 0HFFFFFH,跟在跳转指令之后,可 以跳转的范围为-80H+7FH
$!addr20
0HFFFFFH,跟在跳转指令之后,可
以跳转的范围为-8000H+7FFFH
用户手册 U17835CA1V0UM00
89
2 章 如何描述源程序
操作数表达格式 值的范围
Addr16 ! addr16
(BR, CALL指令)
! addr16
(BR, CALL之外的 指令)
0H FFFFH
(对数值常量和符号指定同样的范围)
数值常数和NUMBER属性符号
3
0H
FFFFH ADDRESS属性符号 (1)范围内或者(2)区域内 (1) F0000H至FFFFFH (2) 当MAA=001000H0xxxxH 时,映射到RAM空间的区域,或当 MAA=111000H1xxxxH)时
1
映射
RAM空间的区域。
ES: ! addr16
! addr16.bit
数值常数和NUMBER属性符号 0H FFFFH ADDRESS属性符号
3
0H至FFFFH
DBIT符号,SFBIT属性或SABIT属性位
符号,使用EQU伪指令定义的位符号 (只有操作数含有ADDRESS属性符号 时)。
(1)范围内或者(2)区域内 (1) F0000H至FFFFFH (2) 当MAA=001000H0xxxxH 时,映射到RAM空间的区域,或当 MAA=111000H1xxxxH)时
1
映射 到RAM空间的区域 其他的位符号
0HFFFFH
ES: ! addr16.bit
DBIT符号,SFBIT属性或SABIT属性位
符号,使用EQU伪指令定义的位符号 (只有操作数含有ADDRESS属性符号 时),0H至FFFFH。 其他的位符号
0HFFFFH
Addr5 Bit N
0080H00BFHcallt指令表区域,必须为偶数值) 3位的值 0至7 2位的值 0至3
90
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
1 映射到RAM空间的地址范围会根据使用设备器件而有所不同,更多细节,敬请参阅所使用设备
的用户手册。
2sfr或2ndsfr作为操作数,可以描述为!sfr或!2ndsfr。这些会作为!addr16的操作数输出到代码
中。 注3 指定使用16位数据时只能用偶地址。 注4 为了和78K0系列兼容,FE20H至FF1FH的值可以描述为数值常数和NUMBER属性符号。 注5 对于数值常数和NUMBER属性符号,检查指定地址的SFR读/写存取限制。
[操作数的符号属性会影响addr16或字支持的值范围,原因如下]
当使用addr16或字,对操作数的符号属性的描述会影响操作数允许的范围值。原因描述如下。 关于更多细节,敬请参阅“2.2.3(4) 符号属性”。
1 !addr16(BR, CALL之外的指令)
示例1解释了为什么addr16的操作数允许值的范围会变化,可以选择为数值常数和NUMBER属性符
号和ADDRESS属性符号。
<示例1>
NUMBER0 EQU 0F100H ; (a) NUMBER1 EQU 0F102H NUMBER2 EQU 0F103H D0 DSEG AT 0FF100H ADDRESS0: DS 1 ADDRESS1: DS 1 ADDRESS2: DS 1 CSEG MOV !NUMBER0 , A ; (b) MOV !0F100H , A ; (c) MOV !ADDRESS0 , A ; (d)
用户手册 U17835CA1V0UM00
91
2 章 如何描述源程序
示例1中的(a)行的代码包含NUMBER属性符号,下列解释了当该符号被用作!addr16操作数的情况。
在指令
MOV !addr16 , A中,基于!addr16的操作数执行直接寻址。将寄存器A中的值转移到地址
0FF100H”的过程在(b)行进行。(a)行的代码包含NUMBER属性符号,它可以用(c)行内容替代,
于是,
!addr16使用的NUMBER属性符号NUMBER0和数值0F100H其实为地址0FF100H
也就是说,使用NUMBER属性符号,
FFFFH
,其实就是地址F0000HFFFFFH
!addr16(BR, CALL之外的指令)可以使用的值范围是“0H
下列解释了标签ADDRESS0被用作!addr16操作数的情况。
代码中的(d)行出现的ADDRESS0的符号值表明RAM空间的“FxxxxHFFFFFH”,而addr16的目
标范围是
数,通过选择操作数的值域为“F0000HFFFFFH”,代码可以简化。
FFFFH
而且,将ROM区域映射到RAM区域必须用!addr16来处理。
0xxxxH”,或者当MAA = 1时,MO区段位于“11000H 1xxxxH”
1xxxxH”。这样就使得
中,!addr16可以接受的范围是
0xxxxH”“11000H 1xxxxH”,所以应该在程序这样描述操作数。
0HFFFFH,这就导致了一个错误的发生。如果标签ADDRESS0ADDRESS属性符号)被用作操作
也就是说,使用ADDRESS属性符号,
,所以应该在程序这样描述操作数。
在示例2种,MO的区段位于ROM空间,这块区域被映射到RAM空间内。当MAA = 0时,MO区段位于“01000H
!addr16(BR, CALL之外的指令)可以使用的值范围是“0H
代码中的(e)行出现的ADDRESS0的符号值表明RAM空间内的
“01000H 0xxxxH”“11000H
e)行的描述可以实现,它引用了一个符号,该符号位于将要被映射的区段
“01000H 0xxxxH”“11000H 1xxxxH”
也就是说,使用ADDRESS属性符号,
!addr16(BR, CALL之外的指令)可以使用的值范围是“01000H
<示例2>
M0 CSEG MIRRORP ADDRESS0: DB 12H ADDRESS1: DB 34H ADDRESS2: DB 56H CSEG
MOV A , !ADDRESS0 ; (e)
92
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
2 Es:!addr16
示例3解释了为什么 Es:!addr16 的操作数允许值的范围会变化,可以选择为数值常数和NUMBER
属性符号和ADDRESS属性符号。
<示例3>
DATA CSEG AT 12345H ADDRESS0: DB 12H ADDRESS1: DB 34H ADDRESS2: DB 56H CSEG MOV ES , #HIGHW ADDRESS0 ; (f) MOV A , ES:!ADDRESS0 ; (g)
下列解释说明了执行(f)行和(g)行的ADDRESS0的值转移到寄存器A的过程。
代码中的(g)行出现的ADDRESS0的符号值为“12345H”,而addr16的目标范围是
这就导致了一个错误的发生。
这就说明了如果能将ADDRESS0的范围限制在
0HFFFFH的话,(g)行的描述方式就可以实
0HFFFFH
现,代码也能够简化。
也就是说,使用ADDRESS属性符号,ES:
这样描述操作数。
!addr16可以使用的值范围是0HFFFFH,所以应该在程序
3 !addr16.bitES:!addr16.bit
示例4解释了为什么 !addr16.bit ES:!addr16.bit 的操作数允许值的范围会变化,可以选择为
DBIT符号、SFBIT属性、SABIT属性位符号、使用EQU伪指令定义的位符号(只有操作数含有 ADDRESS属性符号时)以及其它符号。
<示例4>
BSEG DBITSYM0 DBIT ; (h) DBITSYM1 DBIT DBITSYM2 DBIT BIT1_PM0 EQU PM0.1 ; (i) BIT2_P0 EQU P0.2 ; (j) DSEG ADDRESS0: DS 1 ADDRESS1: DS 1 ADDRESS2: DS 1 ADR_BIT0 EQU ADDRESS0.0 ; (k) ADR_BIT1 EQU ADDRESS0.1 ADR_BIT2 EQU ADDRESS0.2 CSEG SET1 !DBITSYM0 ; (l) SET1 !BIT1_PM0 ; (m) SET1 !BIT2_P0 ; (n)
SET1 !ADR_BIT0 ; (o)
用户手册 U17835CA1V0UM00
93
2 章 如何描述源程序
上例说明描述字的操作数时,可以使用(h)行描述的DBIT符号,(i)行和(j)行描述的SFBIT属 性和SABIT属性位符号,以及(k)行描述的使用EQU伪指令定义的位符号(只有操作数含有ADDRESS 属性符号时)。操作如(i)至(o)行语句所示,所以值的范围决定于描述时使用的符号属性。
同样的原因也适用于ES:!addr16.bit使用的符号属性值域。
4 word(字)
示例5解释了为什么字的操作数允许值的范围会变化,可以选择为数值常数和NUMBER属性符号和
ADDRESS属性符号。
<示例5>
DSEG ADDRESS0: DS 1 ADDRESS1: DS 1 ADDRESS2: DS 1 CSEG MOV B , #0 MOV ADDRESS0[B] , A ; (p) MOV C , #1 MOV ADDRESS0[C] , A ; (q) MOVW BC , #2
MOV ADDRESS0[BC] , AX ; (r)
使用“字”作为操作数的语句,比如(p)至(r)行出现的word[B], word[C]和word[BC],一般也可以接受标 签(ADDRESS属性符号)作为操作数。这样通过!addr16同样的方式来描述标签就可以简化代码。 同样的原因,ES:word[B], ES:word[C], ES:word[BC]的代码也可以被简化。
2-12 伪指令的操作数的值范围
伪指令类型 伪指令 值范围
区段定义伪指令
符号定义伪指令
存储器初始化和区域保留伪 指令
自动分支指令选择伪指令
CSEG AT
DSEG AT
BSEG AT
ORG
EQU
SET
DB
DW
DG
DS
BR/CALL
0H FEFFH(不包括 SFR 2ndSFR
0H FEFFH(不包括 SFR 2ndSFR
0H FEFFH(不包括 SFR 2ndSFR
0H FEFFH(不包括 SFR 2ndSFR
20-bit 0H FFFFH
20-bit 0H FFFFH
8-bit 0H FFH
16-bit 0H FFFFH
20-bit 0H FFFFH
8-bit 0H FFFFH
0H FEFFH
94
用户手册 U17835CA1V0UM00
2 章 如何描述源程序

2.15.2 指令所需的操作数的尺寸

指令可以被分为机器指令和伪指令。对于需要立即值和符号来作为操作数的指令来说,所需的操作数的尺寸根
据每个指令而变化。因此,当描述的数据超过指令所需操作数的尺寸时,将产生一个错误。
表达式的运算按照无符号数的32位来进行。如果计算结果超过0FFFFFFFF H32位),则将输出一个警告消
息。
然而,当在操作数中描述可重定位符号或外部引用符号时,值在汇编器中不会被确定。取而代之的是,连接器
将会确定值并检查值的范围。
2.15.3 操作数
的符号属性和重定位属性
当名称、标签和$(表示位置计数器)被描述为指令操作数时,它们不一定会被描述为操作数。这取决于用作
它们的表达式中的项的符号属性和重定位属性(参见2.12 操作限制),也取决于名称和标签的引用方向。
名称和标签的引用方向可以是反向引用或正向引用。
- 反向引用:引用为操作数的名称或标签,操作数在名称或标签之前在行中被定义。
- 正向引用:引用为操作数的名称或标签,操作数在名称或标签之后在行中被定义。
<>
NAME TEST CSEG L1 : 反向引用
BR !L1 BR !L2 L2 : 正向引用
END
关于这些符号属性和重定位属性,与名称及标签的引用方向一样,都显示在如下表。
用户手册 U17835CA1V0UM00
95
2 章 如何描述源程序
2-13 作为操作数被表述的符号特性
符号属性
NUMBER ADDRESS NUMBER
重定位属性 绝对项 绝对项 可重定位项 外部引用项
引用模式 后向 前向 后向 前向 后向 前向 后向 前向
byte
word
saddr
saddrp
sfr
sfrp
addr20
addr16
addr8
addr5
bit
n
OK OK OK OK OK OK OK OK NG
OK OK OK OK OK OK OK OK NG
OK OK OK OK OK OK OK OK
OK OK OK OK OK OK OK OK
5
OK 
OK OK OK OK OK OK OK
NG NG NG NG NG NG NG NG
OK OK OK OK OK OK OK OK NG
OK OK OK OK OK OK OK OK NG
OK OK OK OK OK OK OK OK NG
OK OK OK OK OK OK OK OK NG
OK OK NG NG NG NG NG NG NG
OK OK NG NG NG NG NG NG NG
ADDRESS
sfr
保留字
Ο 
Ο 
Ο 
Ο 
23
24
26
27
1
<说明>
前向: 表示前向引用。 后向: 表示后向引用。
OK 表示可以这样描述。 NG 表示错误 —: 表示不可以这样描述。
1. 被定义符号指定 sfr 或 sfrp(指 sad dr 或 sfr 不会覆盖的 sfr 域)作为 EQU 伪指令的操作数,该符号仅可作
为后向引用,禁止前向引用。
2. 如果一个指令的操作数组合里存在经由 saddr/saddrp 转变得到的 sfr/sfrp 组合,且 saddr 域的 sfr 保留字
已为该指令所描述,则代码作为 saddr/saddrp 输出。 注 3. saddr 域的 sfr 保留字 注 4. saddr 域的 sfrp 保留字 注 5. 仅绝对表达式 6. 仅允许 8 位访问的 sfr 保留字 7. 仅允许 16 位访问的 sfr 保留字
96
用户手册 U17835CA1V0UM00
2 章 如何描述源程序
2-14 作为伪指令的操作数被描述的符号特性
符号属性
重定位属性 绝对项 绝对项 可重定位项 外部引用项 绝对项 可重定位项 外部引用项
引用方向
伪指令
ORG
2
EQU
SET
DB
大小
初始值
DW
大小
初始值
DG
大小
初始值
DS
BR
NUMBER ADDRESS, SADDR1, SADDR2 BIT
后向 前向 后向 前向 后向 前向 后向 前向 后向 前向 后向 前向 后向 前向
1
OK
OK
OK
OK
OK OK OK OK OK OK OK OK
OK
OK OK OK OK OK OK OK OK
OK
OK OK OK OK OK OK OK OK
OK
OK
— — — — — — — — — — — —
OK
———
OK
1
— — — — — — — — — — — — —
1
— — — — — — — — — — — — —
3
OK
OK
3
— — — — —
1
— — — — — — — — — — — — —
— — — — —
1
— — — — — — — — — — — — —
— — — — —
4
— — — — — — — — — — — — —
— — — — — — — — — — — — —
OK: 可以描述
—: 不可以描述
— — —
用户手册 U17835CA1V0UM00
97
2 章 如何描述源程序
1. 只有绝对表达式可以被描述。 2. 如果表达式中包含下列模式之一,则出错:
HIGH 绝对 ADDRESS 属性
LOWW 绝对 ADDRESS 属性
DATAPOS 绝对 ADDRESS 属性
MASK 绝对 ADDRESS 属性
当操作结果可被上述 8 模式的优化所影响时
3. 不允许 HIGH/LOW/HIGHW/LOWW/DATAPOS/MASK 操作符创建一个可重定位的项。 4. 参考 “3.4 存储器初始化和区域保留伪指令”。
ADDRESS 属性 - ADDRESS 属性
• ADDRESS 属性 相关操作符 ADDRESS 属性
LOW 绝对 ADDRESS 属性
HIGHW 绝对 ADDRESS 属性
98
用户手册 U17835CA1V0UM00

3 章 伪指令

本章对伪指令进行了说明。 伪指令是控制 RA78K0R 执行一系列操作处理所必需的指令,可以指导所有类型的指令。

3.1 伪指令概述

指令作为汇编结果被翻译成目标代码(机器语言)。但是原则上,伪指令不能转换成目标代码。伪指令主要具有
如下功能:
方便源程序的描述
初始化和保留内存区
为汇编器和连接器执行特定操作提供所需信息
下表列出了伪指令的类型
3-1 伪指令列表
类型 伪指令
段定义伪指令
符号定义伪指令
存储器初始化和区域保留伪指令
链接伪指令
对象模块名声明伪指令
自动分支指令选择伪指令
宏伪指令
汇编终止伪指令
后续章节将详细解释各种伪指令。 在描述各伪指令的格式时,“[ ]”表示中括号内的参数可从定义中省略,“...”表示同一格式的重复描述。
CSEG, DSEG, BSEG, ORG
EQU, SET
DB, DW, DG, DS, DBIT
PUBLIC, EXTRN, EXTBIT
NAME
BR, CALL
MACRO, LOCAL, REPT, IRP, EXITM, ENDM
END
用户手册 U17835CA1V0UM00
99
3 章 伪指令
3.2 区段定义伪指
源模块必须以区段为单位进行描述。 区段定义伪指令用于定义以下四种类型的段:
代码区段
数据区段
位区段
绝对区段
段的类型决定了每个区段在存储器中的地址范围。 下表列出了每个区段的定义方法以及每个区段的存储地址。
表 3-2 段定义方法和内存地址位置
区段类型 定义方法 每个区段的存储地址
代码区段 CSEG 伪指令 内部或外部 ROM 地址内
数据区段 DSEG 伪指令 内部或外部 RAM 地址内
位区区段 BSEG 伪指令 内部 RAM 的 saddr 区内
绝对区段
用 CSEG、DSEG 或 BSEG 伪指令指定位置 地址(AT 位置地址),为重定位属性
指定地址
如果用户想要确定区段的分配地址,则将区段当作绝对区段进行描述。对于堆栈区,用户需要在数据段保留一个
区域并设置栈指针。
下表给出了一个区段不能分配的区域示例。
选项字节区域 C0 C2H (用户的选项字节), C3H (在片调试功能
选项字节) 当指定安全 ID 时 C4H 至 CDH 当使用在片调试功能时 02H 至03H, CE至 D7H (为在片调试功能保留)
程序的区域从用户指定的-go 选项地址开始
区段分配的示例如下。
100
用户手册 U17835CA1V0UM00
Loading...