单片机汇编伪指令共30页文档
单片机伪指令详解
伪指令依照其用途可分为五类:定义类、存储类、存储定义类、条件类及汇编方式类。
它们的具体分类及用途详见伪指令的类别一览类别a定义类用于对以下内容进行定义的伪指令:1.程序;2.程序中所用数据的性质、范围或结构;3.宏或结构4.程序5.其它1CODE、DATA、TEXT2IRAM、ISRAM、ORAM、OSRAM、RAM、SRAM3MACRO、MACEXIT、ENDM4PROC、ENDP、STRUCT、ENDS;5.DEFINE、VAR、PUBLIC、EXTERNAL、EQU、VDEFb存储类以指定的数据类型存储数据或设定程序地址等DW、DD、FLOAT、DOUBLE、ENDc存储定义类定义若干指定数据类型的数据存储单元DUPd条件类对汇编指令进行条件汇编IF、ELSE、ENDIF;IFMA、IFDEF、IFNDEFe汇编方式类包含汇编文件或创建用户定义段INCLUDE;SECTION详解:定义类伪指令DEFINE【类别】定义类【功能描述】定义常量符号【语法格式】.DEFINE variable[value][,…]【应用解释】给常量符号所赋之值既可是一已定义过的常量符号,亦可是一表达式。
切忌符号超前引用,即如果赋值引用的符号不是在引用前定义的,则会出现“非法超前引用”的错误。
【举例】.DEFINE BODY1;.DEFINE IO_PORT0x7016;.IFDEF BODY;R1=0xFFFF;[IO_PORT]=R1;.ENDIFPUBLIC【类别】定义类【功能描述】声明将被引用在其它文件中的全局标号【语法格式】.PUBLIC label[,label][,…]【应用解释】本伪指令用来在文件中声明将被引用在外部文件中的全局标号。
故在外部文件中用伪指令EXTERNAL所声明的标号必须是用PUBLIC伪指令声明过的。
类似地,当要声明多个全局标号时,要用逗号(,)将每一标号分开。
【举例】.PUBLIC sym1//声明要引用在其它文件中的全局标号.PUBLIC sym1,sym2//声明多个全局标号需用逗号将每一标号分开,空格会被忽略。
keilA51汇编语言伪指令
以前定义过代码段,汇编将从上一个代码段的结尾开始。
5、ISEG 定义一个绝对 IdATA 段
格式:ISEG AT address
ISEG 在 Idata 存储区选择一个绝对段,如果 address 被指定,汇编器将从这个绝对地址开始
编译,有效值00h-ffh。如果 address 被省略将从0H 开始汇编(前面没有定义过代码段)如果
格式:RSEG segment
例: MYPROG SEGMENT CODE ; Declare the segment
RSEG MYPROG ; Select the segment
八、符号定义类
1、BIT 定义一个位地址
格式 symbol BIT address
2、CODE 在 CODE 区定义一个地址
格式: label: DB expression [, expression ...] 如果 express 为空,默认为00H
例如定义5个存储区,10H,11H,00H,3FH,20H:
DB 10H,11H, ,3FH,20H
expression 还可以是字符串 例如
DB 1+1, "CAT","C"+1
P103 PROC TASK TG1 INTNO I20=20 NOP ; ... RET
P103 ENDP
END
2、LABEL 为符号名分配一个地址 格式: symbol : LABEL type
六、程序连接控制类
1、EXTRN 定义外部声明
格式 EXTRN class (symbol <[>, symbol ...<]>)
3、USING 指定使用的寄存器区 格式:USING expression 例: using 3 ;使用寄存器组3
汇编指令、伪指令大全
MOV指令为双操作数指令,两个操作数中必须有一个是寄存器.MOV DST , SRC // Byte / Word执行操作: dst = src1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器).2.立即数不能直接送段寄存器3.不允许在两个存储单元直接传送数据4.不允许在两个段寄存器间直接传送信息PUSH入栈指令及POP出栈指令: 堆栈操作是以"后进先出"的方式进行数据操作.PUSH SRC //Word入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器.入栈时高位字节先入栈,低位字节后入栈.POP DST //Word出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器.执行POP SS指令后,堆栈区在存储区的位置要改变.执行POP SP 指令后,栈顶的位置要改变.XCHG(eXCHanG)交换指令: 将两操作数值交换.XCHG OPR1, OPR2 //Byte/Word执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp1.必须有一个操作数是在寄存器中2.不能与段寄存器交换数据3.存储器与存储器之间不能交换数据.XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码.XLAT (OPR 可选) //Byte执行操作: AL=(BX+AL)指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码.LEA(Load Effective Address) 有效地址传送寄存器指令LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中.执行操作: REG = EAsrc注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器MOV BX , OFFSET OPER_ONE 等价于 LEA BX , OPER_ONEMOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中LDS(Load DS with pointer)指针送寄存器和DS指令LDS REG , SRC //常指定SI寄存器。
单片机伪指令和指令详解
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伪指令把片内的数据地址赋予所规定的符号名。
【转】51单片机汇编伪指令
【转】51单片机汇编伪指令51单片机汇编伪指令0、ALTNAME功能: 这一伪指令用来自定义名字,以替换源程序中原来的保留字,替换的保留字均可等效地用于子程序中。
格式: ALTNAME 保留字自定义名注意: 自定义名与保留字之间首字符必须相同。
1、BIT功能:指令用于将一个位地址赋给指定的符号名。
指令格式:符号名BIT 位地址经BIT 指令定义过的位符号名不能更改。
例如:X_ON BIT 60H ;定义一个绝对位地址X_OFF BIT 24h.2 ;定义一个绝对位地址BIT---定义位命令格式:字符名称 BIT 位地址功能用于给字符名称定义位地址。
SPK BIT P3.7 经定义后,允许在指令中用SPK代替P3.7。
2、BSEG功能:绝对选择指令指令BSEG选择绝对位寻址数据段指令格式如下:BSEG [AT 绝对地址表达式]3、CODE功能:用于将程序存储器ROM 地址赋给指定的符号名。
指令格式:符号名 CODE 表达式例如:RESET CODE 00H4、CSEG功能:绝对选择指令CSEG选择绝对代码段;指令格式如下:CSEG [AT 绝对地址表达式]5、DATA(BYTE)功能:指令用于将一个内部RAM 的地址赋给指定的符号名指令格式:符号名 DATA 表达式数值表达式的值应在0~255 之间,表达式必须是一个简单再定位表达式。
例如:REGBUF DATA (BYTE) 40HPORT0 DATA(BYTE) 80HDATA与BYTE的区别:DATA与BYTE是相类似的伪指令。
当程序运行到DATA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。
6、DB功能:DB伪指令用于定义一个连续的存储区,给该存储区的存储单元赋值。
该伪指令的参数即为存储单元的值,在表达式中对变元个数没有限制,只要此条伪指令能容纳在源程序的一行内,其格式为:标号: DB 表达式只要表达式不是字符串,每一表达式值都被赋给一个字节。
PIC汇编伪指令
3.2.3MPASM的伪指令我们在第一章中已经详细介绍了中档PIC单片机的35条指令,源程序的编写主要就是用这些基本的指令实现你的控制任务。
但为了增加源程序的可读性和可维护性,我们引入了伪指令的概念。
伪指令本身不会产生可执行的汇编指令,但它们可以帮组“管理”你编写的程序,其实用性和必要性绝不亚于35条正真的汇编指令。
我们在此着重介绍最常用的几种伪指令。
z#include 或 include#include伪指令的作用是把另外一个文件的内容全部包含复制到本伪指令所在的位置。
被包含复制的文件可以是任何形式的文本文件,当然文件中的内容和语法结构必须是MPASM能够识别的。
最经常被“include”的是针对PIC单片机内部特殊功能寄存器定义的包含头文件,在MPLAB安装后它们全部放在路径“C:\Program Files\MPLAB IDE\MCHIP_Tools”下,每一个型号的PIC单片机都有一个对应的预定义包含头文件,扩展名是“.inc”。
除了一些符号预定义文件,你也可以把现有的其它程序文件作为一个代码模块直接“包含”进来作为自己程序的一部分。
见例3-01。
#include <p16f877a.inc> ;把预定义的PIC16F877A寄存器符号包含到此处#include ”math.asm” ;把现有的程序文件包含进来作为自己代码的一部分例3-01请注意被包含文件的引用方式。
一种是<>尖括号引用,这种引用意味着让编译器去默认的路径下寻找该文件,MPASM默认的寄存器预定义文件存放路径即为上面提及的MPLAB安装后的目录;另一种是””双引号引用,这种引用方式的意思是指示编译器从引号中指定的全程文件路径下寻找该文件。
例3-01中”math.asm”没有指定路径,即意味着在当前项目路径下寻找math.asm文件。
如果编译器找不到被包含的文件,将会有错误信息告知。
请在你的源程序中尽量用MPLAB标准头文件定义的寄存器符号。
汇编-伪指令
[汇编]伪指令(一)段定义伪指令段定义伪指令是表示一个段开始和结束的命令,80x86有两种段定义的方式:完整段定义和简化段定义,分别使用不同的段定义伪指令来表示各种段。
1 完整的段定义伪指令完整段定义伪指令的格式如下:段名SEGMENT...段名ENDS段名由用户命名。
对于数据段、附加段和堆栈段来说,段内一般是存储单元的定义、分配等伪指令语句;对于代码段中则主要是指令及伪指令语句。
定义了段还必须说明哪个段是代码段,哪个段是数据段。
ASSUME伪指令就是建立段和段寄存器关系的伪指令,其格式为:ASSUME段寄存器名: 段名,…段寄存器名必须是CS、DS、ES和SS中的一个,而段名必须是由SEGMENT定义的段名。
·定位类型:说明段的起始边界值(物理地址)。
·组合类型:说明程序连接时的段组合方法。
·类别:在单引号中给出连接时组成段组的类型名。
连接程序可把相同类别的段的位置靠在一起。
例4.1; * * * * * * * * * * * * * * * * * * * * * * *data_seg1 segment ; 定义数据段...data_seg1 ends; * * * * * * * * * * * * * * * * * * * * * * *data_seg2 segment ; 定义附加段...data_seg2 ends; * * * * * * * * * * * * * * * * * * * * * * *code_seg segment ; 定义代码段assume cs:code_seg, ds:data_seg1, es:data_seg2start: ; 程序执行的起始地址; set DS register to current data segmentmov ax, data_seg1 ; 数据段地址mov ds, ax ; 存入DS寄存器; set ES register to current extra segmentmov ax, data_seg2 ; 附加段地址mov es, ax ; 存入ES寄存器...code_seg ends ; 代码段结束; * * * * * * * * * * * * * * * * * * * * * * * * * *end start由于ASSUME伪指令只是指定某个段分配给哪一个段寄存器,它并不能把段地址装入段寄存器中,所以在代码段中,还必须把段地址装入相应的段寄存器中:MOV AX,DATA_SEG1 ; 数据段地址MOV DS,AX ; 存入DS寄存器MOV AX,DATA_SEG2 ; 附加段地址MOV ES,AX ; 存入ES寄存器如果程序中还定义了堆栈段STACK_SEG,也需要把段地址装入SS中:MOV AX,STACK_SEG ; 堆栈段地址MOV SS,AX ; 存入ES寄存器注意,在程序中不需要用指令装入代码段的段地址,因为在程序初始化时,装入程序已将代码段的段地址装入CS寄存器了。
(完整版)汇编语言中常用的伪指令档
汇编语言中常用的伪指令分类:软件相关2013-01-23 20:13 515人阅读评论(0) 收藏举报areaequ伪指令常用汇编语言汇编语言中,指令语句在源程序汇编时会产生可供计算机执行的指令代码,即目标代码。
汇编程序除指令语句外,还需要提供一些指令,用于辅助源程序的汇编。
比如指定程序或数据存放的起始地址,为数据分配一段连续的内存单元等。
这些指令在汇编时并不生成目标代码,不影响程序执行,因此称之为伪指令。
本文简单总结了常用的伪指令,如下。
1、EQU(Equate)一般格式为:标号:EQU 操作数指令功能为将操作数赋予标号,两边的值完全相等。
使用EQU伪指令给一个标号赋值后,此标号在整个源文件中值固定。
AREA: EQU 1000H ;将标号AREA赋值为1000H2、ORG(Origin)一般格式为:ORG xxxxH(绝对地址或标号)XxxxH决定此语句后第一条指令(或数据)的地址。
该段源程序或数据被连续存放在此后的地址内,直到下一条ORG指令为止。
ORG 8000H ;此后目标代码存储在存储器中以0x8000h开始的地址空间中。
ADD R1,#1MOV R2, #23、DB(Define Byte)一般格式为:标号:DB 字节常数或字符或表达式标号字段可有可无,字节常数或字符是指一个字节数据。
此伪指令的功能是把字节常数或字节串存放至内存连续的地址空间中。
ORG 8000HDATA1:DB 43H,09H,08HDATA2:DB 07H伪指令DB指定了43H,09H,08H 顺序存放在8000H开始的存储单元中,DATA2中的07H紧挨着DATA1的地址空间存放,即07H存放在8003H单元中。
注:DW(Define Word)指令定义与DB类似,区别在于DW定义一个字,DB定义一个字节。
4、END一般格式为:标号:END 地址或标号地址或标号可以忽略。
此伪指令用于指示汇编语言程序段结束。
因此一个源程序中仅有一个END,且一般放在程序最后。
MCS-51单片机汇编语言的伪指令-文档资料
Copyright 2006
题意分析:
本例是典型的分支程序,根据两个无符号数的 比较结果(判断条件),分别点亮相应的发光二极 管。
6.定义空间伪指令DS
4.定义字节数据伪指令DB
格式:[标号:] DS 表达式
格式:[标号:] DB 字节数据表
功能:从指定的地址开始,保留
功能:字节数据表可以是多个字节数 多少个存储单元作为备用的空间。
据、字符串或表达式,它表示将字节数据表中的 数据从左到右依次存放在指定地址单元。
如: ORG 1000H
Copyright 2006
JC L1 CLR P1.0
SJMP FIN L1:CLR P1.1 FIN:SJMP $
END
;CY=1,转移到 L1 ;CY=0,(40H)≥(50H),点亮 P1.0 连 接的LED1 ;直接跳转到结束等待
;(40H)<(50H),点亮P1.1接的LED2
7. 数据地址赋值伪指令XDATA
格式:符号名 XDATA 表达式
功能:将表达式的值或某个特定 汇编符号定义为一个指定的符号名,可以 先使用后定义,并且用于双字节数据定义。
例如:
DELAY XDATA 0356H
LCALL DELAY ;执行指令后,程 序转到0356H单元执行
Copyright 2006
BUF: DS 50 ;
例如:ORG 1000H
TAB: DB 22H ;22H存放在1032H单元。
TAB: DB 2BH, 0A0H, ‘A’, 2*4 ;
表示从1000H单元开始的地方存放数 据2BH,0A0H,41H(字母A的ASCII码), 08H
51单片机伪指令和指令详解
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伪指令把片内的数据地址赋予所规定的符号名。
MCS-51单片机-伪指令
(5)定义字命令 DW 格式:[标号:] DW 16位二进制数表 例如, ORG 1000H TAB: DW 1234H , 0ABH , 10 汇编后: (1000H)=12H (1001H ) = 34H (1002H ) = 00H ( 1003H ) = ABH (1004H ) =00H (1005H) =0AH DB、DW伪指令都只对程序存储器起作用,不能 用来对数据存储器的内容进行赋值或进行其它初始化 的工作。
ቤተ መጻሕፍቲ ባይዱ
(4)定义字节指令DB 格式:[标号:] DB 8位二进制数表 DB命令是从指定的地址单元开始,定义若干个8 位内存单元的内容。例如, ORG 1000H TAB; DB 23H,73, “6”, “B” TABl: DB 110B 以上伪指令经汇编以后,将对从1000H开始的若 干内存单元赋值: (1000H)=23H (1001H)=49H (1002H)=36H (1003H)=42H (1004H)=06H 其中36H和42H分别是字符6和B的ASCII码,其 余的十进制数(73)和二进制数(110B)也都换算为 十六进制数了。
伪指令语句伪指令并不是真正的指令也不产生相应的机器码它们只是在计算机将汇编语言转换为机器码时指导汇编过程告诉汇编程序如何汇编
伪指令语句
伪指令并不是真正的指令,也不产生相应的机器 码,它们只是在计算机将汇编语言转换为机器码时, 指导汇编过程,告诉汇编程序如何汇编。下面介绍一 些MCS-51汇编程序常用的伪指令。 (1)汇编起始伪指令ORG 格式:[标号:] ORG 16位地址 功能:规定程序块或数据块存放的起始地址。如: ORG 8000H START: MOV A ,#30H …… 该指令规定第一条指令从地址8000H单元开始存 放,即标号START的值为8000H。
第3.3章 汇编 伪指令
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP宏指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
3 AR3PLC
R/W-0
2 AR2PLC
R/W-0
1 AR1PLC
R/W-0
0 AR0PLC
R/W-0
R/W 可进行读写访问 —X X是DSP复位后的值,如果X是pin,X是pin上复位后的电平
BIT 向状态寄存器保护地址的写操作无效,在读操作时这个位总是0
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
DSP汇编伪指令集讲解
IFR是中断
微机原理与汇编-伪指令
2.段分配伪指令 ASSUME
段分配伪指令用来完成段的分配,说明当前哪些 逻辑段被分别定义为代码段、数据段、堆栈段和 附加段。
1、代码段用来存放被执行的程序; 2、数据段用来存放程序执行中需要的数据和运 算结果; 3、当用户程序中使用的数据量很大或使用了串 操作指令时,可设置附加段来增加数据段的容量; 4、堆栈段用来设置堆栈。
DT(define ten bytes):定义一个十字节类型的变量,其后的每个 操作数均占用5个字(10个字节)。 其中,各变量定义伪指令都将高位字节数据存放在高地址中,低位字 节数据存放在低地址中。
格式1又可分为以下几种具体用法 :
(1)用数值表达式定义变量 【例2】 K1 DB 10, 4, 10H
段名 ENDS
任何一个逻辑段从SEGMENT语句开始,以ENDS语句结束。伪指令名 SEGMENT和ENDS是本语句的关键字,不可以默认,并且必须成对出现。 语句中段名是必选项,定位类型、组合类型、字长类型、类别为可选项。 用户自己选定,不能省略,其规定同变量或标号,一个段开始与结尾用 的段名应一致。
④ 段寄存器的装入。
【例1】
DATA SEGMENT ; 定义数据段
XX
DB ?
YY
DB ?
ZZ
DB
DATA ENDS
EXTRA SEGMENT ; 定义附加段
RSS1 DW ?
RSS2 DW ?
RSS3 DD ?
EXTRA ENDS
STACK SEGMENT ; 定义堆栈段
DW 50 DUP( )
K2 DW 100, 100H, -5 K3 DD 3*20, 0FFFDH 变量K1, K2, K3经汇编后的结果如图1所示。
汇编语言伪指令
汇编语言伪指令在汇编语言程序里,有一些特殊的助记符,这些助记符与指令系统的助记符不同,它们没有对应的机器码。
这些助记符在源程序中的作用是完成汇编程序的各种准备工作,包括定义变量、分配数据存储空间、控制汇编过程、定义程序入口等。
它们仅仅在汇编的过程中起作用,一旦汇编过程结束,它们的使命也就完成了。
这些助记符称为伪指令,它们所完成的操作称为伪操作。
不同汇编器的伪指令可能存在少量的区别,并非所有的伪指令在任何编译器上都能被识别。
一、符号定义伪指令符号定义(Symbol Definition)伪指令用于定义ARM汇编程序中的变量,对变量赋值和定义寄存器别名等,如表1所列。
表1 符号定义伪指令实例:GBLL P_ON ; 定义全局逻辑变量P_ON P_ON SETL {TRUE} ; 给全局逻辑变量P_ON赋值为真LCLA NUM ; 定义局部数字变量NUM NUM SETA 100 ; 给全局数字变量NUM赋值为100RegList RLIST {R0-R5,R8,R10} ; 定义一个寄存器列表RegList,可用微处理器系统结构与嵌入式系统设计(第3版)2; LDM/STM指令访问该列表二、数据定义伪指令数据定义(Data Denfinition)伪指令一般用于为特定的数据分配存储单元,同时完成对已分配存储单元的初始化工作。
数据定义伪指令如表2所示。
表2 数据定义伪指令从使用方法上来讲,数据定义伪指令可以分为以下3类。
1.SPACE伪指令SPACE用于分配一片连续的存储区,并初始化为0。
其中表达式中的数字表示分配的字节数。
SPACE也可以用%代替。
实例:DataSpace SPACE 100 ; 分配连续100字节的存储单元并初始化为0 2.MAP和FIELD伪指令MAP和伪指令FIELD经常结合在一起使用。
MAP用于定义一个结构化的内存表的首地址,可以用“^”替代。
FIELD用于定义一个结构化的内存表中的数据域,可以用“#”代替。
汇编编程_伪指令
10、 INCLUDE <file specification> a> 文件名必须有引号包围(?) b> 包含文件查找顺序:先找当前工作目录,后找GENPATH环境变量指定的位 置。 c> 例: INCLUDE “..\LIBRARY\macros.inc”
汇编管理指令-伪指令汇总
11、
LIST …… NOLIST a> 影响紧随其后的语句是否出现在list和 debug文件中; b> 最终是否有效,还依赖环境变量-L: Generate a listing file
MLIST [ON/OFF] 决定macro是否被展开出现在list和debug文件中
Directive
12、
13、
ORG <expression> 其中expression不能包含任何未定义、以后会定义以及外部references
汇编管理指令-伪指令汇总
14、 MEXIT XDEF entry storage: EQU $00FF save: MACRO LDX LDA STA LDA STA IFC ENDC LDA STA
Directive
;重新定义一个段 1 1 1 * ;offset是如何辅助访问struct的
DataSec: SECTION 000000 Struct: DS.B SIZE CodeSec: SECTION entry: 000003 CE xxxx LDX #Struct 000006 8600 LDA #0 000008 6A00 STA ID, X 00000A 6201 INC COUNT, X 00000C 42 INCA 00000D 6A03 STA VALUE, X