伪指令

合集下载

伪指令

伪指令

南京航空航天大学信息科学与技术学院 石燕
DCW ( DCWU )
语法格式: 语法格式: 标号 DCW (或 DCWU ) 表达式 DCW (或 DCWU)伪指令用于分配一片连续的 ) 半字存储单元并用伪指令中指定的表达式初始化。 半字存储单元并用伪指令中指定的表达式初始化。 其中,表达式可以为程序标号或数字表达式。 其中,表达式可以为程序标号或数字表达式。 分配的字存储单元是半字对齐的, 用 DCW 分配的字存储单元是半字对齐的,而用 DCWU分配的字存储单元并不严格半字对齐。 分配的字存储单元并不严格半字对齐。 分配的字存储单元并不严格半字对齐 使用示例: 使用示例: DataTest DCW 1 , 2 , 3 分配一片连续的半字存储单元并初始化。 分配一片连续的半字存储单元并初始化。
南京航空航天大学信息科学与技术学院 石燕
SPACE
语法格式: 语法格式: 标号 SPACE 表达式 SPACE 伪指令用于分配一片连续的存储区域 并初始化为 0。其中,表达式为要分配的字节 。其中, 数。 代替。 也可用 “ % ” 代替。 使用示例: 使用示例: DataSpace SPACE 100 分配连续 100 字节的存储单元并初始化为 0
南京航空航天大学信息科学与技术学院 石燕
SETA 、 SETL 、 SETS
语法格式: 语法格式: 变量名 SETA ( SETL 或 SETS ) 表达式 伪指令 SETA 、 SETL 、 SETS用于给一 用于给一 个已经定义的全局变量或局部变量赋值。 个已经定义的全局变量或局部变量赋值。 SETA 伪指令用于给一个数学变量赋值 SETL 伪指令用于给一个逻辑变量赋值 SETS 伪指令用于给一个字符串变量赋值
南京航空航天大学信息科学与技术学院 石燕

伪指令

伪指令

第6章 6.1.5 伪指令
SEG和OFFSET
SEG返回存储器地址操作数的段地址 OFFSET 返回存储器地址操作数的段内偏移地 址部分
: NUMBER-1 DD ? CCAA EQU SEG NUMBER-1 : MOV AX,SEG NUMBER-1 MOV DS,AX MOV SI,OFFSET NUMBER-1
第6章 6.1.5 伪指令
结构的存储分配和预置
格式:变量 结构名称<赋值说明> LiPing STUDENT_RECORD <,,,’891011’>
LuiYi STUDENT_RECORD <‘LuiYi’,1,,’891011’,80H>
对结构的访问
格式:变量名.字段名 例如:MOV AL,LiPing.AGE 等价于: MOV AL,[BX].AGE
CODE_SEG
第6章:逻辑段的简化定义
.STACK [大小]
;堆栈段定义伪指令 .STACK 创建一个堆栈段,段名是: STACK 。可选的“大小”参数指定堆栈段所占存储区的 字节数,默认是1KB(=1024=400H字节)
.DATA
;数据段定义伪指令 .DATA 创建一个数据段,段名是: _DATA。数据段名可用@DATA预定义标识符表示
第6章 6.1.5 伪指令
TYPE、SIZE、LENGTH
见表6.3
段定义伪指令
SEGMENT/ENDS伪指令 成对使用,说明段的名称和范围,还可指明段 的定位类型、组合类型、分类名
段名
段名
SEGMENT [定位类型][组合类型][分类名] : 本段程序内容(指令或伪指令语句) ENDS
第6章 6.1.5 伪指令

《汇编语言》学习笔记6——伪指令

《汇编语言》学习笔记6——伪指令

《汇编语⾔》学习笔记6——伪指令1.伪指令⼜称伪操作,即不能像汇编指令⼀样⽣成可执⾏的⼆进制机器代码,⽽是在汇编程序对汇编语⾔源程序进⾏汇编(编译)期间,由汇编程序执⾏。

它与C中的说明性语⾔的含义类似,起到说明作⽤,⽤来指出程序分段、数据定义、存储分配、程序开始和结束等信息,这些信息在汇编(编译)完成后就不⽤了。

但程序中没伪指令,则系统就⽆法完成编译。

2.段定义伪指令:⽤来定义各种类型的段 1.格式:段名 SEGMENT [类型参数] ...... 段名 ENDS 1.其中SEGMENT和ENDS必须成对出现,表⽰段的开始和结束。

⼀般的,段名和段的意义⼀致,便于识别。

2.段名实际就是段地址,在汇编过程中,系统给出具体的地址值,⼀个段必须有⼀个名字来标识。

3.参数是可选项(可有可⽆),⽤于指出段的边界、段的组合、类别标识,⼀般⽤于多模块程序设计中。

2.类型参数 1.定位类型 PARA 该段的起始地址必须为⼩段的⾸地址,即起始地址的16进制数最低位为0 BYTE 该段可以从任意地址开始 WORD 该段必须从字边界开始,即起始地址为偶数 DWORD 该段必须从双字边界开始,即起始地址的16进制数为最低应为4的倍数 PAGE 该段必须从页边界开始,即起始地址的16进制数最低两位为00(能被256整除) 若不指定定位类型,系统默认为PARA 2.组合类型 PRIVATE 该段为私有段,连接时不与其他同名段合并 PUBLIC 连接时可与其他模块中的同名段按顺序连接成⼀个段 COMMON 表⽰该段与其他模块中的同名段有相同的起始地址,如果连接将产⽣覆盖,连接后段的长度为同名段中的最长者 STACK 表⽰该段为堆栈段 AT 表达式 该段直接定位在表达式指出的位置上 若不指定组合类型,默认为PRIVATE 3.类型标识:在引号中给出段的类型名。

在连接时,类别标识相同的段放在连续的存储区中。

(如:"STACK"⽤啦标识该段为堆栈段) 4.END:结束标记,若碰到伪指令END则停⽌编译3.ASSUME伪指令:⽤于指明段寄存器与段的对应关系 1.格式:ASSUME 段寄存器:段名,[段寄存器:段名,段寄存器:.....]【[]中标识可选项】 2.除了代码段寄存器CS不能⽤MOV指令赋值外,其他段寄存器都可⽤MOV指令进⾏初始化。

汇编常见伪指令

汇编常见伪指令

汇编常见伪指令汇编常见伪指令转⾃:⼀、与宏有关的伪指令在宏定义时,为了满⾜某种特殊需要,汇编语⾔还提供了⼏个伪指令。

9.3.1 局部标号伪指令LOCAL在宏定义体中,如果存在标号,则该标号要⽤伪指令LOCAL说明为局部标号,否则,当在源程序中,有多于⼀次引⽤该宏时,汇编程序在进⾏宏扩展后将会给出:标号重复定义的错误。

伪指令LOCAL的⼀般格式如下:LOCAL 标号1, 标号2, ……伪指令LOCAL必须是伪指令MACRO后的第⼀条语句,并且在MACRO和LOCAL之间也不允许有注释和分号标志。

汇编程序在每次进⾏宏扩展时,总是把由LOCAL说明的标号⽤⼀个唯⼀的符号(从??0000到??FFFF)来代替,从⽽避免标号重定义的错误。

例9.7 编写求⼀个求绝对值的宏。

解:⽅法1:ABSMACROword1CMPword1, 0JGEnextNEGword1next:ENDM假设对宏ABS有以下两次引⽤,点击它们将会显⽰汇编程序对它们进⾏宏扩展后所得到程序⽚段: ABS BX 1 CMP BX, 0 1 JGE next 1 NEG BX 1 next:… ABS AL 1 CMP AL, 0 1 JGE next 1 NEG AL 1 next:在上述程序⽚段中,显然标号next定义了⼆次,所以,汇编程序将显⽰“标号重复定义”的错误信息。

为了避免这种情况的发⽣,我们需要⽤下⾯的⽅法来定义该宏。

⽅法2:ABSMACROword1LOCALnextCMPword1, 0JGEnextNEGword1next:ENDM假设对宏ABS有以下两次引⽤,点击它们将会显⽰汇编程序对它们进⾏宏扩展时所得到程序⽚段: ABS BX 1 CMP BX, 0 1 JGE ??0000 1 NEG BX 1 ??0000:… ABS AL 1 CMP AL, 0 1 JGE ??0001 1 NEG AL 1 ??0001:在上述程序⽚段中,宏体内部的局部标号next分别⽤符号??0000和??0001来对应它的⼆次引⽤。

汇编 第四章伪指令及汇编语言源程序结构

汇编 第四章伪指令及汇编语言源程序结构

MOV AL, BUF1
ADD AL, BUF2 MOV SUM, AL
;取第一个加数
;两数加 ;和放入SUM单元
3
伪指令(指 示性)语句: 提供相关辅 助信息。
指令性语句: 完成一定功 能,能翻译 成机器码。
伪指令语句
DATA SEGMENT ;DATA段定义开始 BUF1 DB 34H BUF2 DB 27H SUM DB ? DATA ENDS ;DATA段定义结束 CODE SEGMENT ;CODE段定义开始 ASSUME CS:CODE ASSUME DS:DATA ;段性质规定 START: MOV AX,DATA MOV DS,AX ;给DS赋值 MOV AL, BUF1 ;取第一个加数 ADD AL, BUF2 ;两数加 MOV SUM, AL ;和放入SUM单元 MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;CODE段定义结束 END START ;源程序结束
14
二、= 等号伪指令
格式:符号名 = 表达式 功能:为常量、表达式及其他各种符号定义一个等价的符号 名,并能对所定义的符号多次重复定义,且以最后一次定义 的值为准。 例:COST = 20 M = MOV LOST = COST+10 ;30→LOST M = ADD ;M=ADD 注 : “ = ” 伪 指 令 的 格 式 和 功 能 与 EQU 类 似 。 二者区别:在同一程序中,“=”可以对一个符号重 复定义,EQU不能对同一符号重复定义。
26
三、变量、标号的分析运算和合成运算
例:DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 3,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX ┆

单片机伪指令和指令详解

单片机伪指令和指令详解

ASM-51汇编伪指令一、伪指令分类1.符号定义SEGMENT, EQU, SET, DATA, IDATA, XDATA, BIT, CODE2.存储器初始化/保留DS, DB, DW, DBIT3.程序链接PUBILC, EXTRN, NAME4.汇编程序状态控制ORG, END5.选择段的伪指令RSEG, CSEG, DSEG, XSEG, ISEG, BSEG, USING二、伪指令具体说明1.符号定义伪指令1)SEGMENT伪指令格式:段名SEGMENT 段类型说明:SEGMENT 伪指令说明一个段。

段就是一块程序代码或数据存储器。

允许使用的段类型为:●CODE代码空间●DATA 可以直接寻址的内部数据空间●XDATA外部数据空间●IDATA可以间接寻址的整个内部数据空间●BIT位空间例子:(段符号用于表达式时,代表被连接段的基地址)STACK SEGMENT IDATARSEG STACKDS 10H ;保留16字节做堆栈MOV SP , #STACK-1 ;堆栈指针初始化2)EQU伪指令格式:符号名 EQU 表达式符号名 EQU 特殊汇编符号说明:EQU表示把一个数值或特殊汇编符号赋予规定的名字。

一个表达式赋予一个符号,必须是不带向前访问的表达式。

例子:N27 EQU 27;ACCUM EQU A ;定义ACCUM代替特殊汇编符号A(累加器)HERE EQU $; HERE为当前位置计数器的值3)SET伪指令格式:符号名 SET 表达式符号名 SET 特殊汇编符号说明:SET类似EQU,区别在于可以用另一个SET伪指令在以后对定义过的符号重新定义。

例子:COUNT SET 0COUNT SET COUNT+14)BIT伪指令格式:符号名 BIT 位地址说明: BIT伪指令把一个地址赋予规定的符号名。

该符号类型取段类型BIT.例子:RSEG DATA_SEG;CONTROL: DS 1ALATM BIT CONTROL.0;OPEN_BOARD BIT ALATM+1 ;下一位RESET_BOARD BIT 60H ;下一个绝对的位5)DATA伪指令格式:符号名 DATA 表达式说明:DATA伪指令把片内的数据地址赋予所规定的符号名。

汇编言语——常用伪指令

汇编言语——常用伪指令

(5)可以用ASSUME伪指令指定两个或两个以上的段寄存 器作为同一个段中标识符的缺省段寄存器。当数据定义与指令 写在同一个段中时,就会出现以CS、DS甚至ES一起作为一个 段的缺省段寄存器的情况。此时,有关数据的操作(取值、存 数等)优先以DS作为段寄存器。 (6)ASSUME可以在程序的不同行上出现多次,并且可以 对一个段寄存器进行两次或两次以上的对应关系指定。当程序 中用ASSUME指定了一个段寄存器是某个段的缺省段寄存器后, 在程序的后续行中一直有效,除非再次使用ASSUME伪指令改 变该段寄存器与段的对应关系。
【解】变量a的定义中出现的$是带引号的,表示ASCII码 值为24H的符号而不是偏移地址;定义变量b时用的两个$没有 加引号,表示偏移地址,按照地址分配原则,第一个$代表 0001H,第二个$代表0003H;在变量c的定义中,$出现在数值 表达式中,是当前偏移地址0005H,变量a的起始偏移地址是 0000H,两者相减的结果是5,并且不再有类型,因此可以作 为字节型变量的一项初值。图5.6是该数据段对应的内存图。 a b
5.3 ASSUME
ASSUME伪指令占一行,用于指出后续程序中所使用的变 量、标号等标识符在涉及到逻辑地址的段地址部分时,用哪 个段寄存器作为缺省段地址。 【格式】ASSUME R1:S1 , R2:S2 , ... 【说明】 (1)格式中的Ri代表段寄存器名。必须是DS、ES、SS、 CS四个之一,Si是段地址,只能是一个段名或者“SEG 变量 名”的形式。 (2)Ri:Si是一组对应关系,表示Si段中的标识符都使用Ri 作为缺省段寄存器。 。
5.6 $ $是汇编语言中的一个特殊符号,代表汇编程序在处理到$ 所在的位置时当前安排的偏移地址值。程序中出现的$可以作 为常量看待,但是不同位置上的$,其代表的值是不同的。与 一般的数据不同的是,通常所说的常量(数值)是没有类型的, 包括“OFFSET 变量名”也没有类型,但$所表示的数据一定 是字型。$一般作为字型变量定义时的一个初值使用。 【例5.18】分析下面数据段中各$符所表示的值。 data SEGMENT a DB '$' b DW $,$ c DB $-a data ENDS

第四章 伪指令

第四章  伪指令

数据定义伪指令的格式为: [变量名] DB(DW、DD、DQ、DT) 表达式1,表达式2,… 表达式1,表达式2……是给变量或指定的存储单元赋予初值,它们有以下几种形式: (a)数值表达式 数据定义伪指令可以为一个或连续的存储单元设置数值初值。 (b)字符串表达式 对于DB伪指令,字符串的长度允许超过2个字符,但不能超过255个字符,字符 串必须用单引号括起来,它可为字符串中的每个字符分配1字节单元,字符串 从左至右以字符的ASCII码形式按地址递增的顺序依次存放。 (c)?表达式 不带引号的?,用于为变量预留内存单元,暂时不存入数据,即表示所定义的 变量无确定的初值。 例如:A DW ?,?为变量A预留2个字单元。 (d)地址表达式 操作数为地址表达式时,只适用于DW和DD这两种数据定义伪指令。如果地址表 达式为一变量(标号)名,用DW伪指令则是取它的偏移地址来初始化变量;用 DD伪指令则是取它的段首地址和偏移地址来初始化变量。 (e)带DUP的表达式 格式为:n DUP (表达式),其中n为重复因子,只能取正整数,它表示定义了 n个相同的数据存储单元。
在8086汇编语言中,运算符分为:算术运算符、逻辑运算符、关系运算
符、数值返回运算符、属性运算符和字节分离运算符。
(一)、表达式
(1)数值表达式 数值表达式是由常量与算术运算符、逻辑运算符或关系运算符构成的有意 义的式子。数值表达式在汇编期间进行运算,运算结果为一数值常量,它 只有大小而没有属性。
数据定义伪指令的格式为: [变量名] DB(DW、DD、DQ、DT)
Байду номын сангаас
表达式1,表达式2,„
其中:变量名是可选项,它仅代表所定义数据存储区第一个单元的地址; DB、DW、DD、DQ和DT是伪指令符,具体一条数据定义伪指令取5种之一。 DB定义的是字节类型的变量,每个表达式被分配1个字节单元。 DW定义的是字类型的变量,每一个表达式被分配1个字单元(2个字节)。 DD定义的是双字类型的变量,每一个表达式被分配2个字单元(4个字节)。 DQ定义的是四字类型的变量,每一个表达式被分配4个字单元(8个字节)。 DT定义的是十字节类型的变量,每一个表达式被分配10个字节单元。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

A51汇编解释---伪指令 2011-05-11 17:51:46| 分类:默认分类| 标签: |举报 |字号大中小订阅一:定义符号的伪指令1)SEGMENT格式: 段名符号 SEGMENT 段类型 [再定位类型]SEGMENT指令可声明一个可再定位(区别于CSEG,DSEG,XSEG,BSEG,ISEG等定义的在相对应的空间固定地址定义的绝对段—在连接的过程中不允许重新定位)的段符号和一个可选的再定位类型,段符号可以用来定义段,L51连接器可将多个模块内的具有相同段名和再定位类型的几个段合成为一个段.段类型说明了段所处的地址空间.如果是编写的汇编程序要与C源程序接口,即被C源程序调用,则全部的汇编子程序所命名的定义的代码段的段名必须是可用SEGMENT来定义的,而且名字的命名的方法也应该参照C51编译器产生的局部段的段名的转换规则.段名的作用主要是在汇编的时候用RSEG来激活的,在连接定位的时候用到的.与段名相应的是用于存储和传递参数的别名,可以在汇编源程序中直接应用局部段的别名,这个别名主要是在传递函数参数的时候用的.在汇编程序中要用PUBLIC 声明被其他模块引用的全局符号.DATA (可直接寻址的内部RAM空间)IDATA (可间接寻址的内部RAM空间)XDATA (外部数据存储空间)BIT (内部RAM低地址区的可位寻址的空间)CODE (程序存储器空间)可选的再定位类型定义了L51连接时的定位方式,再定位类型:UNIT:定义一个可开始于任一单元的段对于BIT型的段,一个单元是一个位,其它所有的段一个单元是一个字节.PAGE:定义一个起始地址必须是256的整数倍的段,段的绝对地址由L51自己计算,该类型只允许用于XDATA和CODE类型段.INPAGE:定义一个由L51连接后必须包含在256B的块中,只适用于XDATA和CODE段. INBLOCK:定义一个L51连接后必须包含在2KB中的段,只适用于CODE段. OVERLAYABLE:定义一个可与其他段交叠的覆盖段,其段名符号必须按C51或者PL/M51的规则命名.C51把局部数据段和局部位段定义成?DT?FUNCTIONNAME?MODULENAME 和?BI?FUNCTIONNAME?MODULENAME这是在small模式下.其他的模式略有不同。

BITADDRESSABLE:定义一个L51连接后位于可位寻址的区,段长不能超过16B.2) EQU格式: 符号名 EQU 表达式符号名 EQU 寄存器名EQU伪指令定义一表示数值或寄存器的符号,该符号可用于表达式或助记符指令的操作数,EQU指令定义的符号不能被改变或重新定义,其段类型取决于表达式中的操作数类型类型,无类型的EQU符号可用于任何表达式中.LIMIT EQU 200VALUE EQU LIMIT-100+’A’COUNTER EQU R53) SET格式: 符号名 SET 表达式符号名 SET 寄存器名SET指令的功能与EQU指令的功能一样,区别是SET指令定义的符号可以再定义和改变.VALUE EQU 200VALUE SET VALUE/2COUNTER SET R1TEMP SET COUNTER/24) BIT格式: 符号名 BIT 表达式BIT指令定义一表示位地址的符号,该符号一经定义便不能重新定义和改变.DATA_BSEG SEGMENT BITRSEG DATA_BSEGCTRL DS 1FLAG BIT CTRL.1FLAG2 BIT FLAG+15) DATA格式: 符号名 DATA 表达式DATA指令定义一表示MCS-51内部数据存储器字节地址的符号,表达式必须是一个绝对地址值或者是一个简单的再定位表达式(即数值确定的,且其值必须在0—255之间,类型必须是DATA 或者是NUMBER类型)例如在汇编程序中:PORT DATA 90HRESULT_L DATA 40HRESULT_H DATA RESULT_L+16) XDATA,IDATA,CODE 均是也和DATA一样,都是定义一个代表相应存储空间单元的地址符号,表达式也必须是相对应的类型或者是NUMBER类型。

二初始化和保留指令1)DS格式: [标号:] DS 表达式DS指令以字节为单位,在内部或者外部地址空间中保留存储空间,表达式中不能包含前向地址参考量,可为除BIT段的任何类型。

该伪指令语句使当前地址计数器加上表达式的值,需要注意的是地址计数器加上表达式结果的值不能超出地址空间的范围。

(无论是汇编器还是编译器,对每一种不同类型的地址空间(DATA,CODE,PDATA,XDATA,BIT)都产生一个独立的地址计数器,每汇编一条指令,计数器都会自动增加,不过可以用ORG伪指令改变当前段地址计数器,用ORG伪指令表达式的值作为当前段地址计数器的初值,而当前段的改变可以用RSEG 伪指令来改变。

RSEG ?DT?FUNCTION?MODULENAE----声明当前段为局部数据段?FUNCTION?BYTE:-------------函数局部段的别名TIME: DS 52) DBIT格式 [标号:] DBIT 表达式以位为单位在可位寻址段内保留存储空间, 表达式中不能包含前向地址参考量或者是再定位的符号和外部符号,该指令使当前地址计数器增加表达式结果值,其增加量以位为单位. 3) DB DW格式: [标号]: DB/DW 表达式1[,表达式2,………]这两个指令的作用相同,均是以字节或者是字初始化程序存储空间,上面是保留存储空间,存储空间可以使RAM和ROM,而这两个指令直接就是初始化程序存储空间.Table: DB “any key to continue!”Requst: DB LOW(Table),HIGH(Table)三:程序连接伪指令1) PUBLIC格式: PUBLIC 符号1 [,符号2,符号3….]PUBLIC 指令声明可被其他模块使用的全局符号,该符号必须在本模块内定义,但是寄存器和段名不能声明全局符号,全局符号在汇编模块中就是语句前的标号,一般在编写C调用用汇编语言实现的函数很有用.例如: ?PR?FUNCTION_NAME?FILE_NAME ? SEGMENT CODEPUBLIC FUNCTION_NAME/_FUNCTIONAMERSEG ?PR?FUNCTION_NAME?FILE_NAME?FUNCTION_NAME/_FUNCTIONAME:从寄存器或者存储区域中取回需要的参数汇编代码 ;把返回值放入需要规定的寄存器RET/RETI --------返回FUNCTION_NAME前有没有下滑线取决于函数有没有使用寄存器传递参数.2) EXTRN格式 EXTRN 段类型1 (符号表1) [,段类型2 (符号表2) , …]指令声明本模块引用的外部全局符号,该指令可出现在出现在源程序的任何地方,每个外部符号都必须是CODE,DATA,IDATA,XDATA,BIT或者NUMBER等段类型之一,段的类型限制了符号使用的范围,例如CODE只能做JMP和CALL等转移和调用类指令的目标地址,而不能做MOV等指令的操作数,L51在连接的时候检查外部符号是否和相应的全局符号相匹配,无类型的符号可以任何段类型的同名符号相匹配.3) NAME格式 NAME 目标模块名 --- module_name 目标模块名NAME指令定义当前程序模块的目标模块名,目标模块名不同于目标文件名,也不同于源程序名,当未给出目标模块名的时候,则以不带扩展名的源文件名命名,且每个目标模块只允许一个名字.四:状态和段选择指令1) END该指令必须位于源程序的最后一行,且只能在程序中出现一次,在END的语句不汇编.2) ORG格式 ORG 表达式ORG伪指令改变当前汇编器当前段地址计数器,用表达式的值作为当前段地址计数器的值,表达式中不能有前向参考量,并且只能是一个绝对地址或简单再定位表达式.3) RSEG格式 RSEG 段名RSEG指令选择一个已定义的再定位的段作为当前有效段,具体什么段,由在定义段名的时候段的类型决定, 可在当前段保留存储空间,初始化程序空间,安排程序代码.例如: DATA_SEG SEGMENT DATACODE_SEG SEGMENT CODERSEG DATA_SEGDS 2COUNT: DS 3RSEG CODE_SEGSTRING: DB “Press any key to continue”,0START: MOV A,#80H&lt;汇编代码&gt;END4) CSEG,DSEG,ISEG,XSEG,BSEG格式: CSEG [AT 绝对地址值]DSEG [AT 绝对地址值]ISEG [AT 绝对地址值]XSEG [AT 绝对地址值]BSEG [AT 绝对地址值]以上的几条指令分别和CODE,DATA,IDATA,XDATA,BIT段相对应,当指令中包含一个基地址(AT 绝对地址值时),汇编器结束当前段并产生一个起始于绝对地址的新段,如果指令中不包含一个基地址选项,则当汇编器已经有当前段的时候,则不改变当前段,即忽略该指令,例如:BSEG AT 70HDECMODE: DS 2CSEG AT 0HLJMP MAINLJMP INT_0需要注意的是:这里的AT和变量的绝对定位_at_不一样,那是C51编译器的关键字的扩展,在C元文件中可以用的,而这个指令是在A51中的.5) USING格式 :USING 表达式USING指令使A51选择适当的寄存器组计算寄存器的绝对地址,该指令类似于C51中的REGISTERBANK编译控制指令的功能,USING不进行寄存器组的切换,表达式的值必须是0—3之间,由表达式的值A51可以计算出寄存器符号AR0—AR7的绝对地址,当程序中需要使用Arn的时候,有必要先使用Using.例如: USINGPOP AR2PUSH AR3。

相关文档
最新文档