单片机伪指令和指令详解
单片机伪指令详解

伪指令依照其用途可分为五类:定义类、存储类、存储定义类、条件类及汇编方式类。
它们的具体分类及用途详见伪指令的类别一览类别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//声明多个全局标号需用逗号将每一标号分开,空格会被忽略。
MCS-51单片机-伪指令

伪指令并不是真正的指令,也不产生相应的机器 码,它们只是在计算机将汇编语言转换为机器码时, 指导汇编过程,告诉汇编程序如何汇编。下面介绍一 些MCS-51汇编程序常用的伪指令。 (1)汇编起始伪指令ORG 格式:[标号:] ORG 16位地址 功能:规定程序块或数据块存放的起始地址。如: ORG 8000H START: MOV A ,#30H …… 该指令规定第一条指令从地址8000H单元开始存 放,即标号START的值为8000H。
(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伪指令都只对程序存储器起作用,不能 用来对数据存储器的内容进行赋值或进行其它初始化 的工作。
(2)汇编结束伪指令END 格式:[标号:] END [表达式] 功能:结束汇编。 例如: ORG 2000H START: MOV A ,# 00H …… END START 表示标号START开始的程序段结束。 (3)等值指令EQU MOV A,TEST
(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)也都换算为 十六进制数了。
51单片机汇编指令及伪指令小结

51单片机汇编指令及伪指令小结51单片机汇编指令及伪指令小结51单片机是一种广泛应用的基于汇编语言的微控制器。
它的汇编指令集非常丰富,包括了基本的数据处理、逻辑运算、分支跳转、数据存储和输入输出等指令。
汇编指令的灵活运用可以实现各种复杂的功能,因此掌握51单片机的汇编指令是开发嵌入式系统的重要基础。
1. 基本数据处理指令51单片机汇编指令集包括了一系列基本的数据处理指令,如加法(add)、减法(sub)、乘法(mul)、除法(div)等。
这些指令用于实现对数据的基本运算操作。
2. 逻辑运算指令逻辑运算指令用于实现各种逻辑运算,如与(and)、或(or)、非(not)、异或(xor)等。
这些指令通常用于处理数据的开关控制、状态判断等功能。
3. 分支跳转指令分支跳转指令用于实现程序的流程控制。
常用的分支跳转指令包括无条件跳转(jmp)、条件跳转(jz、jnz、jc、jnc等)、循环跳转(loop)等。
这些指令可以根据条件和需求设置程序的执行流程,实现各种循环、分支等功能。
4. 数据存储指令数据存储指令用于实现数据的存储和加载操作。
常用的存储指令包括将数据存储到寄存器或内存中(mov)、将数据从寄存器或内存中加载(ld)等。
这些指令通过对数据的存储和加载,实现对数据的读写操作。
5. 输入输出指令输入输出指令用于实现与外设的数据通信。
常用的输入输出指令包括从端口输入(instr)、输出到端口(outstr)等。
这些指令通过与外部设备的数据交互,实现嵌入式系统与外设的连接。
除了以上的基本指令外,51单片机还提供了一些伪指令,用于程序的组织和调试。
这些伪指令包括宏指令、条件编译指令、调试指令等。
1. 宏指令宏指令是一种通过宏展开的方式来扩展汇编代码的指令。
它通过提前定义一些宏,并在代码中使用这些宏来生成更复杂的汇编代码。
宏指令的好处是可以简化代码的书写,使得程序的逻辑更清晰。
2. 条件编译指令条件编译指令用于根据编译时的条件来选择性地编译代码。
单片机伪指令

32
双精度浮点型 64 (DOUBLE)
无
以IEEE格式表示的64 位浮点数
天津大学电子实习中心
存储定义类 <1>
定义若干指定数据类型的数据存储单元 DUP
天津大学电子实习中心
存储定义类 <2>
DUP 【类 别】存储定义类 【功能描述】本伪指令与DW、FLOAT、DD、 DOUBLE存储类伪指令组合在一起用于存 放若干个具有相同数值的常量;或者申请若 干个备用的整型、单精度浮点型、长整型以 及双精度浮点型数据单元。
天津大学电子实习中心
汇编方式类 <2>
INCLUDE 【功能描述】在汇编文件里包含某个文件 【语法格式】.INCLUDE filename 【举 例】 .INCLUDE hardware.inc .INCLUDE key.h .INCLUDE hardware.h
天津大学电子实习中心
常用定义类伪指令说明&举例<10>
ENDP 【功能描述】结束程序的定义 【语法格式】ENDP 【举 例】 Test1:.PROC PUSH BP to [SP] …… RETF; .ENDP
天津大学电子实习中心
存储类
以指定的数据类型存储数据或设定程序地 址等 DW、DD、FLOAT、DOUBLE、END
天津大学电子实习中心
常用定义类伪指令说明&举例<6>
DATA 【功能描述】切换定义预定义段DATA 【语法格式】.DATA 【举 例】.DATA tone_table: .DW 5,8,6,9,3,8,0 ;
天津大学电子实习中心
常用定义类伪指令说明&举例<7>
CODE 【功能描述】切换定义预定义段CODE 【语法格式】.CODE 【举 例】.CODE .PUBLIC _MAIN;
MCS系列单片机指令系统2

Y
解:本题是十进制数累加,必 须对和要进行BCD码调整;同
N Cy=1?
Y
时加数的增长不能用INC指令, 千、百位加1
数据保存 结束
也必须进行BCD码调整,因此 只能用ADD A,#01指令, 再进行BCD码调整。
BCD码调整 加数1
【例】在内RAM 30H~3FH 存放符号数,试统计中间负数 的个数,将统计结果存放在 40H单元中,试编制程序。
4)DW伪指令 指令格式:
[标号:]DW 16位二进制数表 说明:DW伪指令是定义字的伪指令,即从指定的地址单元 开始,定义若干个16位二进制数据,每个字占用两个单元, 先存高8位,再存低8位。用法同DB伪指令。
5)DS伪指令
指令格式:
地址
[标号:]DS <表达式>
说明:DS伪指令是定义存储区, 2000H
LOOP2:INC R0 DJNZ R2,LOOP1 END
本章小结
主要掌握立即寻址、直接寻址、寄存器寻址、寄存器间接 寻址等寻址方式。 掌握各指令的格式及用法。 能阅读程序,写出结果。 能编写简单结构化程序。
【例】下列程序存放在ROM中的情
况。 源程序
机器语言
ORG 2000H
START:MOV A,#02H 74 02
MOVC A,@A+PC 83
RET
22
DB 41H,”4”,”A”41 34 41
END
地址 2000H 2001H 2002H 2003H 2004H 2005H 2006H
ROM 74 02 83 22 41 34 41
即从标号指定的单元开始保留表 2001H
达式所代表的存储单元数。
2002H
单片机汇编语言伪指令

单片机汇编语言伪指令1.BIT---用于汇编程序的一开始创建一个常量.FLASH_COUNT BIT3EH;创建一个名为FLASH_COUNT的常量,并把立即数3EH赋给这个常量,在程序中就可以直接把FLASH_COUNT等同于立即数3EH进行操作.2.DATA---定义一个指向特殊功能寄存器区地址的变量.DPTRSW DATA0A2H;DPTRSW指向特殊功能寄存器0A2H地址上.3.DB---用于汇编程序中定义若干个长度为1个字节的字,这若干个字使用逗号分隔开,如果逗号之间没有数据,汇编器默认为00H.DB10H,11H,,3FH,20H;在目标文件中生成10H,11H,00H,3FH,20H4.DS---用于保留一块存储器空间给程序变量使用或别的用途.STORAGE DS10;保留一块名叫"STORAGE"的10字节存储空间5.DW---定义若干个长度为两个字节的字,这若干个字使用逗号分隔开,如果逗号之间没有数据,汇编器默认为0000H.DW0FFFEH,,0102H;在目标文件中生成代码:FFH,FEH,00H,00H,01H,02H6.END---该伪指令告诉汇编器程序的结束点.7.EQU---定义某一个符号的值,一旦一个符号被定义后,就不能被另一个EQU或SET指令重复定义.BEEP_COUNT EQU1+1;表达式把2定义给符号BEEP_COUNT8.IF、ELSE、ENDIF---这3个伪指令是条件选择语句,它们告诉汇编器根据表达式的值,是否汇编某一块程序,没有汇编的块在目标文件中是不存在对应的执行代码的.IF P1.0;如果P1.0=1,就汇编下一行ELSE01H,02H,03H;在存储器中定义字01H、02H、03HENDIF;条件选择结束,如果P1.0≠1,上一行不被汇编.9.INCL---该指令用于在汇编时把其他文件与当前文件结合在一起汇编.INCL"const.def";即把文件"const.def"与当前文件结合在一起汇编.---该伪指令用于设置程序计数器PC的初始值.ORG0000H;指令的执行代码在单片机的程序存储器中从0000H开始存储(也可简单写成00H).11.SET---该伪指令类似EQU,但不同的是SET可以通过另一个SET伪指令重复定义变量的值.COUNT SET3COUNT SET1;最终COUNT=112.$---美元符号表示当前地址,意味着程序计数器PC的值不变,在程序中表示"本行程序". DJNZ R5,$;工作寄存器R5减1,如果不等于0就调回本行---直到R5减至0为止,执行下一条指令.。
MCS-51单片机汇编伪指令的用法解析

MCS-51单片机汇编伪指令的用法解析
1、DS ---预留存储区命令
格式:〔标号:〕DS 表达式值
其功能是从指定地址开始,定义一个存储区,以备源程序使用。
存储区预留的存储单元数由表达式的值决定。
TMP:DS 1
从标号TEP地址处开始保留1个存储单元(字节)。
2、BIT---定义位命令
格式:字符名称BIT 位地址
其功能用于给字符名称定义位地址。
SPK BIT P3.7
经定义后,允许在指令中用SPK代替P3.7。
3、USING指令
USING指令通知汇编器使用8051的哪一个工作寄存器组。
格式:USING 表达式(值必须为0-3,默认值为0。
)
USING 0
使用第0组工作寄存器。
4、SEGMENT指令
SEGMENT 指令用来声明一个再定位段和一个可选的再定位类型。
格式:再定位段名SEGMENT 段类型〔再定位类型〕
其中,“再定位段名”用于指明所声明的段。
“段类型”用于指定所声明的段将处的存储器地址空间。
可用的段类型有CODE、XDATA、DATA、IDATA和BIT。
STACK_SEG SEGMENT IDATA
DATA_SEG SEGMENT DATA
5、RSEG---再定位段选择指令。
单片机db指令

单片机db指令1单片机DB指令在单片机的应用过程中,很多情况下需要使用到DB指令。
DB指令是单片机汇编语言中的一种指令,用于将数据存储到数据段中。
本文将从以下几个方面来详细介绍DB指令的相关知识。
2DB指令介绍DB指令是单片机汇编语言中的一种伪指令,用于向数据段中存放数据。
其语法格式如下:DB数据1,数据2,数据3,…,数据n以上语句中,数据可以是整数、字符或字符串。
多个数据之间用逗号隔开,最后一个数据无需加逗号。
每个数据占据一个字节的空间,所以数据的长度最好不要超过8位,否则可能会出现编译错误。
3使用DB指令存储数据使用DB指令存储数据需要先在数据段中定义一个变量。
例如,我们要在数据段中定义一个单字节的变量x,并将其初始化为10,可以使用以下语句:data SEGMENTx DB10data ENDS以上语句中,SEGMENT和ENDS是固定的语句,用于定义数据段的开始和结束。
x是变量名,可以自己定义。
DB指令后面的10是变量的初始值。
4使用DB指令存储字符或字符串DB指令不仅可以用于存储整数,还可以用于存储字符或字符串。
例如,我们要在数据段中定义一个字符串str,并将其初始化为“Hello,world!”,可以使用以下语句:data SEGMENTstr DB'Hello,world!',0data ENDS以上语句中,字符串需要用单引号或双引号括起来,最后一个字符必须是0,表示字符串的结束。
如果不加0,那么程序在读取字符串时可能会出现错误。
5DB指令的应用示例下面以一个简单程序为例,演示如何使用DB指令存储数据。
该程序实现了将两个数的和存储在数据段中的功能。
要实现这个功能,我们需要先在代码段中定义两个变量a和b,并使用DB指令将它们的值初始化。
然后使用ADD指令将它们相加,并将结果存储到数据段中的变量c中。
最后使用MOV指令将c的值移动到寄存器AL中,然后使用INT21H调用DOS中的打印字符串函数显示结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ASM-51汇编伪指令
一、伪指令分类
1.符号定义
SEGMENT, EQU, SET, DATA, IDATA, XDATA, BIT, CODE
2.存储器初始化/保留
DS, DB, DW, DBIT
3.程序链接
PUBILC, EXTRN, NAME
4.汇编程序状态控制
ORG, END
5.选择段的伪指令
RSEG, CSEG, DSEG, XSEG, ISEG, BSEG, USING
二、伪指令具体说明
1.符号定义伪指令
1)SEGMENT伪指令
格式:段名SEGMENT 段类型
说明:SEGMENT 伪指令说明一个段。
段就是一块程序代码或数据存储器。
允许使用的段类型为:
●CODE代码空间
●DATA 可以直接寻址的内部数据空间
●XDATA外部数据空间
●IDATA可以间接寻址的整个内部数据空间
●BIT位空间
例子:(段符号用于表达式时,代表被连接段的基地址)
STACK SEGMENT IDATA
RSEG STACK
DS 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 0
COUNT SET COUNT+1
4)BIT伪指令
格式:符号名 BIT 位地址
说明: BIT伪指令把一个地址赋予规定的符号名。
该符号类型取段类型BIT.
例子:
RSEG DATA_SEG;
CONTROL: DS 1
ALATM BIT CONTROL.0;
OPEN_BOARD BIT ALATM+1 ;下一位
RESET_BOARD BIT 60H ;下一个绝对的位
5)DATA伪指令
格式:符号名 DATA 表达式
说明:DATA伪指令把片内的数据地址赋予所规定的符号名。
符号段类型为DATA. 例子:CONIN DATA SBUF;定义CONIN 到串行口缓冲器的地址
TABLE_BASE DATA 70H ;把TABLE_BASE 定义到位置70H
6)XDATA伪指令
格式:符号名 XDATA 表达式
说明: XDATA伪指令把片外的数据地址赋予所规定的符号名。
段类型为XDATA. 例子:
RSEG XSEG1
ORG 100H
DATE DS 5;定义DATE在偏离XSEG1的100H处
TIME XDATA DATE+5;定义TIME为DATE后面的5个字节.
7)IDATA伪指令
格式:符号名 IDATA 表达式
说明: IDATA伪指令将间接的内部数据地址赋予所规定的符号名。
类型为IDATA. 例子:BUFFER IDATA 60H
BUFFER_LEN EQU 20H
BUFFER_END IDATA BUFFER+BUFFER_LEN-1
8)CODE伪指令
格式:符号名 CODE 表达式
说明:CODE 伪指令把一个代码地址赋予所规定的符号名。
符号段类型为CODE。
2.存储器初始化及保留
1)DS伪指令
格式:标号 DS 表达式
说明: DS伪指令以字节为单位保留空间。
可以用于除BIT类型段以外的任何段。
2)DBIT伪指令
格式:标号 DBIT 表达式
说明: DBIT伪指令以位为单位保留空间。
它仅用于BIT类型段。
在BIT段中,位置计数器的基本单位是位而不是字节。
3)DB伪指令
格式:标号 DB 表达式
说明:DB伪指令用字节值对代码存储器初始化。
段类型为CODE型,其表达式列表是一个由逗号(,)分开的一个或多个字节值或串。
例子:AGE: DB ‘MARY’,0,27
ORIMES:DB 1,2,3,5
4)DW伪指令
格式:标号 DW 表达式
说明:DW伪指令是用字(16位)值对代码存储器初始化。
段类型为CODE型。
该表达式可以是一个由逗号(,)分开的一个或多个字值,字值可为绝对的或可重新定位的表达式。
若在列表中用了位置计数器$,它计算出正被初始化字的代码地址。
列表中的每一项以它出现在该列表中的顺序放入存储器,其高字节在前,低字节在后。
例子:ARRIVAL DW 710, ‘AM’
JUMP_TABLE DW GO_PROC,BREAK_PROC,DISPLAY_PROC;由产生地址的清单成一个跳转表。
3.程序的链接
1)PUBLIC伪指令
格式:PUBLIC 符号名列表
说明:PUBLIC伪指令允许当前被汇编模块的符号为外部公用。
符号名对于一个时,用逗号(,)分开。
寄存器或段符号名(通过SEGMENT伪指令声明了的)不可以规定为PUBLIC。
例子:PUBLIC putctrl,put_data,liner
2)EXTRN伪指令
格式:ERTRN [段类型(符号名列表)],。
说明:EXTRN伪指令列出当前模块中要访问的在其他模块中定义了的符号。
这个伪指令可以出现在程序的任何地方。
外部符号必须符合与上每一个符号相关的段类型。
(这些类型是CODE,XDATA,DATA,IDATA,BIT及NUMBER,即一个无类型的符号)
例子:EXTRN CODE(pntcrif,putstring,getnum),DATA(count,total)
EXTRN CODE(binas,ascbin),NUMBER(table-size)
3)NAME 伪指令
格式: NAME 模块名
说明:NAME伪指令用来定义当前的程序模块,应放在该模块全部伪指令及指令代码的前面。
若无NAME伪指令,则源文件名作为系统对其设置的名称,但不得以数字开始。
4.汇编程序的状态控制
1)END
格式: END
说明:END语句不得有标号,允许在它的行上出现一个注释。
END语句是程序的最后一行,否则将产生一个错误。
2)ORG
格式: ORG 表达式
说明:ORG伪指令用来对汇编程序的位置计数器做修改,以设置一个新的程序起点。
该表达式应当是一个绝对的或是可重新定位的表达式,它访问当前的段而不含向前的访问。
ORG伪指令改变位置计数器,但它并不产生一个新段。
如果当前段为绝对段,其值便是当前段的一个绝对地址,如果该段是可以重新定位的,其值是当前段基地址的偏移。
例子:ORG ($+10H) AND 0FFF0H ;将位置计数器设为下一个16字节边界ORG 50 :将位置计数器设置为50
5.段选择伪指令
可重定位段:RSEG
格式:RSEG 段名
说明:其段名一定要在前面使用SEGMENT伪指令定义过
绝对段: CSEG XSEG DSEG ISEG BSEG
格式:
●CSEG [ AT 绝对地址] ;在代码地址空间选择一个绝对段
●XSEG [ AT 绝对地址] ;在外部数据地址空间选择一个绝对段
●DSEG [ AT 绝对地址] ;在内部数据地址空间选择一个绝对段
●ISEG [ AT 绝对地址] ;在间接内部数据地址空间选择一个绝对段
●BSEG [ AT 绝对地址] ;在位地址空间选择一个绝对段
如果使用[ AT 绝对地址],汇编器便结束以前规定的绝对段并生成一个从该地址开始的新的绝对段。
如果未规定一个绝对地址,该段类型的原来绝对段便继续生效。
如果选择段类型为以前未定义的绝对段而且省略了绝对地址,则在位置0开始生成一个段。
例子:
BSEG AT 70H
DECIMAL_MODE DBIT 1
CHAT_MIDE DBIT 1
ING伪指令
格式: USING 表达式
说明: USING伪指令通知汇编器其后面的代码所使用的寄存器组。
其表达式是一个数(0-3之间),它指向四个寄存器组之一。
例子:
USING 3
PUSH AR2 ;压入第三组的第二个寄存器
USING 1
PUSH AR2 ;压入第一组的第二个寄存器。