51单片机汇编指令及伪指令小结

合集下载

5-MCS-51单片机讲义(宏汇编伪指令)

5-MCS-51单片机讲义(宏汇编伪指令)

第五章 MCS-51宏汇编伪指令伪指令是对汇编起某种控制作用的特殊命令,但自身并不产生机器码,不属于指令系统,而仅仅为汇编服务的一些指令,因此称为伪指令。

其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令。

许多伪指令要求带参数,这在定义伪指令时由“表达式”域指出,任何数值与表达式均可以作为参数。

不同汇编程序允许的伪指令并不相同,以下所述的伪指令适用于Intel公司的MASM51系统,但一些基本的伪指令在大部份汇编程序中都能使用,当使用其它的汇编程序版本时,只要注意一下它们之间的区别就可以了。

MASM51中常用的伪指令共分为五大类:1. 程序计数与结束伪指令:ORG、END;2. 符号定义伪指令:EQU、SET、DATA、BYTE、WORD、BIT、ALTNAME、DB、DW、DS;3. 附加文件伪指令:INCLUDE;4. 程序清单格式化伪指令:TITLE、PAGE;5. 一般控制伪指令:LIST、NOLIST、NOCODE。

下面简要介绍一下各条伪指令的功能:5.1 ORG功能:程序计数伪指令,用于设置由表达式决定的初始地址,ORG也称为起始伪指令。

表达式缺省为0。

格式:ORG 16位地址例如:ORG 0100HSTART:MOV A,#05HADD A,#08HMOV 20H,AORG 0100H表示该伪指令下面第一条指令的起始地址是0100H,即“MOV A,#05H”指令的首字节地址为0100H,或标号START代表的地址为0100H。

5.2 END功能:是汇编语言源程序的结束标志。

在END以后所写的指令,汇编程序不再处理。

一个源程序只有一个END指令,放在所有指令的最后。

源程序中若没有END语句,汇编将报出错。

5.3 EQU功能:将一个数值或寄存器名赋给一个指定的符号名。

格式:符号名 EQU 表达式或符号名EQU 寄存器名符号名=表达式例如:DELY EQU 3344HDELY1 EQU 30HPP EQU R0ORG 0000HJMP MAINORG 0050HMAIN:MOV DPTR,#DELY ;(DPTR)=3344HMOV A,#DELY ;(A)=44HMOV A,#DELY1 (A)=30HMOV PP,#10 ;(PP)=10MOV A,PP ;(A)=10NOPEND5.4 SET功能:SET指令的功能与EQU指令类似,不同的是,用SET指令定义过的符号名可被重新定义。

51单片机汇编指令及伪指令小结

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. 条件编译指令条件编译指令用于根据编译时的条件来选择性地编译代码。

51汇编伪指令详解

51汇编伪指令详解

51汇编伪指令伪指令是对汇编起某种控制作用的特殊命令,其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令。

许多伪指令要求带参数,这在定义伪指令时由“表达式”域指出,任何数值与表达式匀可以作为参数。

不同汇编程序允许的伪指令并不相同,以下所述的伪指令仅适用于MASM51系统,但一些基本的伪指令在大部份汇编程序中都能使用,当使用其它的汇编程序版本时,只要注意一下它们之间的区别就可以了。

MASM51中可用的伪指令有:ORG 设置程序起始地址END 标志源代码结束EQU 定义常数SET 定义整型数DATA 给字节类型符号定值BYTE 给字节类型符号定值WROD 给字类型符号定值BIT 给位地址取名ALTNAME 用自定义名取代保留字DB 给一块连续的存储区装载字节型数据DW 给一块连续的存储区装载字型数据DS 预留一个连续的存储区或装入指定字节。

INCLUDE 将一个源文件插入程序中TITLE 列表文件中加入标题行NOLIST 汇编时不产生列表文件NOCODE 条件汇编时,条件为假的不产生清单一、ORG伪指令ORG用于为在它之后的程序设置地址值,它有一个参数,其格式为:ORG 表达式表达式可以是一个具体的数值,也可以包含变量名,如果包含变量名,则必须保证,当第一次遇到这条伪指令时,其中的变量必须已有定义(已有具体的数值),否则,无定义的值将由0替换,这将会造成错误。

在列表文件中,由ORG定义的指令地址会被打印出来。

ORG指令有什么用途呢?指令被翻译成机器码后,将被存入系统的ROM中,一般情况下,机器码总是一个接一个地放在存储器中,但有一些代码,其位置有特殊要求,典型的是五个中断入口,它们必须被放在0003H,000BH,0013H,001BH和0023H的位置,否则就会出错,如果我们编程时不作特殊处理,让机器代码一个接一个地生成,不能保证这些代码正好处于这些规定的位置,执行就会出错,这时就要用到ORG伪指令了。

单片机伪指令和指令详解

单片机伪指令和指令详解

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汇编伪指令详解word资料17页

51汇编伪指令详解word资料17页

51汇编伪指令伪指令是对汇编起某种控制作用的特殊命令,其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令。

许多伪指令要求带参数,这在定义伪指令时由“表达式”域指出,任何数值与表达式匀可以作为参数。

不同汇编程序允许的伪指令并不相同,以下所述的伪指令仅适用于MASM51系统,但一些基本的伪指令在大部份汇编程序中都能使用,当使用其它的汇编程序版本时,只要注意一下它们之间的区别就可以了。

MASM51中可用的伪指令有:ORG 设置程序起始地址END 标志源代码结束EQU 定义常数SET 定义整型数DATA 给字节类型符号定值BYTE 给字节类型符号定值WROD 给字类型符号定值BIT 给位地址取名ALTNAME 用自定义名取代保留字DB 给一块连续的存储区装载字节型数据DW 给一块连续的存储区装载字型数据DS 预留一个连续的存储区或装入指定字节。

INCLUDE 将一个源文件插入程序中TITLE 列表文件中加入标题行NOLIST 汇编时不产生列表文件NOCODE 条件汇编时,条件为假的不产生清单一、ORG伪指令ORG用于为在它之后的程序设置地址值,它有一个参数,其格式为:ORG 表达式表达式可以是一个具体的数值,也可以包含变量名,如果包含变量名,则必须保证,当第一次遇到这条伪指令时,其中的变量必须已有定义(已有具体的数值),否则,无定义的值将由0替换,这将会造成错误。

在列表文件中,由ORG定义的指令地址会被打印出来。

ORG指令有什么用途呢?指令被翻译成机器码后,将被存入系统的ROM中,一般情况下,机器码总是一个接一个地放在存储器中,但有一些代码,其位置有特殊要求,典型的是五个中断入口,它们必须被放在0003H,000BH,0013H,001BH和0023H的位置,否则就会出错,如果我们编程时不作特殊处理,让机器代码一个接一个地生成,不能保证这些代码正好处于这些规定的位置,执行就会出错,这时就要用到ORG伪指令了。

51单片机汇编指令详解

51单片机汇编指令详解

MCS-51系列单片机指令以A开头的指令有18条,分别为:ACALL addr11ADD A,RnADD A,directADD A,@RiADD A,#dataADDC A,RnADDC A,directADDC A,@RiADDC A,#dataAJMP addr11ANL A,RnANL A,directANL A,@RiANL A,#dataANL direct,AANL direct,#dataANL C,bitANL C,/bit1、ACALL addr11指令名称:绝对调用指令指令代码:{A10,A9,A8,10001},A[7:0]指令功能:构造目的地址,进行子程序调用。

其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不变。

操作内容:PC←(PC)+2SP←(SP)+1(SP)←(PC)7~0SP←(SP)+1(SP)←(PC)15~8PC10~0←addrl0~0字节数: 2机器周期:2使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。

2、ADD A,Rn指令名称:寄存器加法指令指令代码:28H~2FH指令功能:累加器内容与寄存器内容相加操作内容:A←(A)+(Rn), n=0~7字节数: 1机器周期;1影响标志位:C,AC,OV3、ADD A,direct指令名称:直接寻址加法指令指令代码:25H指令功能:累加器内容与内部RAM单元或专用寄存器内容相加操作内容:A←(A)+(direct)字节数: 2机器周期:1影响标志位:C,AC,OV4、ADD A,@Ri指令名称:间接寻址加法指令指令代码:26H~27H指令功能:累加器内容与内部RAM低128单元内容相加操作内容:A←(A)+((Ri)), i=0,1字节数: 1机器周期:1影响标志位:C,AC,OV5、ADD A,#data指令名称:立即数加法指令指令代码:24H指令功能:累加器内容与立即数相加操作内容:A←(A)+data字节数: 2机器周期:1影响标志位:C,AC,OV6、ADDC A,Rn指令名称:寄存器带进位加法指令指令代码:38H~3FH指令功能:累加器内容、寄存器内容和进位位相加操作内容:A←(A)+(Rn)+(C), n=0~7字节数: 1机器周期:1影响标志位:C,AC,OV7、ADDC A,direct指令名称:直接寻址带进位加法指令指令代码:35H指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加操作内容:A←(A)+(direct)+(C)字节数: 2机器周期:1影响标志位:C,AC,OV8、ADDC A,@Ri指令名称:间接寻址带进位加法指令指令代码:36H~37H指令功能:累加器内容、内部RAM低128单元内容及进位位相加操作内容:A←(A)+((Ri))+(C), i=0,1字节数: 1机器周期:1影响标志位:C,AC,OV9、ADDC A,#data指令名称:立即数带进位加法指令指令代码:34H指令功能:累加器内容、立即数及进位位相加操作内容:A←(A)+data+(C)字节数: 2机器周期:1影响标志位:C,AC,OV10、AJMP addr11指令名称:绝对转移指令指令代码:{A10,A9,A8,00001},A[7:0]指令功能:构造目的地址,实现程序转移。

MCS-51单片机汇编伪指令的用法解析

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---再定位段选择指令。

keilA51汇编语言伪指令

keilA51汇编语言伪指令
KeilA51单片机汇编语言伪指令
A51伪指令即控制指令允许定义符号的值,初始化存储区,控制代码的位置。 伪指令不应与处理器指令或汇编指令混淆。控制指令不生成可执行代码,并且除 DB,DD 和 DW 语句外,他没有直接影响代码存储器的内容。这些控制指令改 变汇编的状态,定义用户符号,并添加目标文件信息。 伪指令可分为以下类别: 一、地址控制类: 1、EVEN 强制地址计数器到下一个偶数地址。 EVEN 指令设置程序计数器 PC 到下一个偶数地址(如果当前位置计数器是奇数 )。这可以用来确保下一个 声明字边界上的对齐。如有必要,汇编器将创建1个字节的间隙。间隙字节的内 容是不确定的。 注意:该指令只有 A51汇编器可使用。 例:MYDATA: SEGMENT DATA WORD
int10 PROC INTERRUPT I10=10 USING MyBank2 MOV MyBank2,R0 SCXT CP,#MyBank2 NOP ; ... POP CP RET
int10 ENDP
proc1 PROC USING MyBank1 MOV MyBank1,R0 SCXT CP,#MyBank1 NOP ; ... POP CP RET
2、EXTERN 同 EXTRN(A51专用)
3、NAME 指定当前单元的名称
格式:NAME modulename
Name 指令是汇编单元的名称嵌入目标文件,如果在目标文件中没有 NAME 指铃,文件名
将被作为该单元的名称
4、PUBLIC 声明符号可以被其他文件使用
格式:PUBLIC symbol , symbol ...
EXTRN class:type (symbol <[>, symbol ...<]>)

伪指令的使用与心得

伪指令的使用与心得

伪指令的使⽤与⼼得伪指令的使⽤与⼼得1 伪指令的定义所谓指令(instruction),针对汇编程序⽽⾔,就是将CPU直接识别的指令——⼆进制指令通过查表的⽅式转换为asmmebly 指令⽽⽅便程序⼈员来编制程序,⼆进制指令就是我们所常说的机器指令。

这个转换过程是编译器的⼯作,不⽤程序员来⼲涉。

汇编语⾔指令的形式是以助记符的形式出现的, 所以⽐较容易理解和记忆。

⽤汇编指令编制的汇编语⾔源程序, 可长可短,这是由程序员根据系统的要求, 或是根据程序的难易程序决定的。

单⽚机与其它计算机⼀样, 在汇编源程序时需要向汇编程序提供某些必要的信息, 诸如源程序的⽬的程序从存储器的哪⼀个单元开始装⼈? 源程序是否结束? 程序中所⽤的数据存放在什么地址? 某⼀个标号的地址是哪⾥? 某⼀个可位寻址的代名字是什么?等等。

这些信息要和源程序⼀起出现, 成为源程序的⼀部分, 这⼀类信息也可以指令的形式出现, 汇编语⾔把它们称为伪指令。

所以伪指令是⼀些特殊的符号集合, 它们不是⼀个单⽚机系统指令集中的指令(在指令集中找不到)。

我们可以通过以上的过程描述发现,通过以上从⼆进制到汇编指令的转换过程发现,这⽅便了程序⼈员进⾏程序的编制。

但是,⽤汇编程序代码和⾼级语⾔的代码进⾏⽐较,汇编程序还是很复杂。

⽐如说,⼀个简单⽐较过程,需要使⽤CMP、JMP、JNZ、JZ等⼀系列的指令来实现,不仅复杂⽽且容易出错,很⼤的影响了效率。

正是因为这个⽅⾯的原因,MASM 就出现了.if.endif.elseif等伪指令,这些伪指令为我们在汇编程序中使⽤和⾼级语⾔⼗分接近的的控制⽅式来进⾏⽐较、循环等结构控制。

⾄于,这些伪指令到真正的指令之间的转换⼯作,交给汇编器来完成就好了。

总结起来,伪指令最终⾯对的是CPU 指令的指令。

伪指令⼜称汇编程序控制译码指令。

“伪”字体现在汇编时伪指令不产⽣机器指令代码,不影响程序的执⾏, 仅产⽣供汇编⽤的某些命令, 在汇编时执⾏某些特殊操作。

MCS-51单片机汇编语言的伪指令-文档资料

MCS-51单片机汇编语言的伪指令-文档资料
若(40H)≥(50H),则P1.0管脚连接的LED1发光; 若(40H)<(50H),则P1.1管脚连接的LED2发光。
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单片机汇编伪指令

51单片机汇编伪指令

/littlebird100/260038/Message.aspx最近在学KEIL在进行编译时,生成的SRC文件,里面的许多命令都不大知道,于是自己找资料查了查。

现总结如下,希望对大家有点帮助。

为了大家查找方便,命令按字母排序:1、 ALTNAME功能: 这一伪指令用来自定义名字,以替换源程序中原来的保留字,替换的保留字均可等效地用于子程序中。

格式: ALTNAME 保留字自定义名注意: 自定义名与保留字之间首字符必须相同。

2、BIT功能:指令用于将一个位地址赋给指定的符号名。

指令格式:符号名BIT 位地址经BIT 指令定义过的位符号名不能更改。

例如:X_ON BIT 60H ;定义一个绝对位地址X_OFF BIT 24h.2 ;定义一个绝对位地址3、 BSEG功能:绝对选择指令指令BSEG选择绝对位寻址数据段指令格式如下:BSEG [A T 绝对地址表达式]4、CODE功能:用于将程序存储器ROM 地址赋给指定的符号名。

指令格式:符号名CODE 表达式例如:RESET CODE 00H5、CSEG功能:绝对选择指令CSEG选择绝对代码段;指令格式如下:CSEG [A T 绝对地址表达式]6、DATA(BYTE)功能:指令用于将一个内部RAM 的地址赋给指定的符号名指令格式:符号名DA TA 表达式数值表达式的值应在0~255 之间,表达式必须是一个简单再定位表达式。

例如:REGBUF DA TA(BYTE)40HPORT0 DA TA(BYTE)80HDA TA与BYTE的区别: DA TA与BYTE是相类似的伪指令。

当程序运行到DA TA 伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。

7、DB功能:DB伪指令用于定义一个连续的存储区,给该存储区的存储单元赋值。

该伪指令的参数即为存储单元的值,在表达式中对变元个数没有限制,只要此条伪指令能容纳在源程序的一行内,其格式为:标号:DB 表达式只要表达式不是字符串,每一表达式值都被赋给一个字节。

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

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单片机-伪指令

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。

c51汇编伪代码

c51汇编伪代码
0013 ORG 0013H
0013 021020 LJMP INT_1 ;外中断1处理程序
001B ORG 001BH
001B 021030 LJMP TIME_1 ;定时中断1处理程序
0023 ORG 0023H
0023 021040 LJMP SERIAL ;串行口中断程序
START:
The Cybernetic Micro Systems 8051 Family Assembler, Version 3.03 Page 1
08-26-96
1000 = INT_0 EQU 1000H
1010 = TIME_0 EQU 1010H
1020 = INT_1 EQU 1020H
DS 预留一个连续的存储区或装入指定字节。
INCLUDE 将一个源文件插入程序中
TITLE 列表文件中加入标题行
NOLIST 汇编时不产生列表文件
NOCODE 条件汇编时,条件为假的不产生清单
一、ORG
伪指令ORG用于为在它之后的程序设置地址值,它有一个参数,其格式为:
ORG 表达式
;跳转到主程序起始点
0002 021000 LJMP INT_0 ;外中断0处理程序
0005 021010 LJMP TIME_0 ;定时中断0处理程序
0008 021020 LJMP INT_1 ;外中断1处理程序
INT_1 . . . . . . . . . . . . . I 1020
SERIAL. . . . . . . . . . . . . I 1040
START . . . . . . . . . . . . . L 0026

80C51汇编伪指令

80C51汇编伪指令

4.1 伪指令有一些指令,如指定目标程序或数据存放的地址、给一些指定的标号赋值、表示源程序结束等指令,并不产生目标程序(机器码),也不影响程序的执行,仅仅产生供汇编用的某些命令,用来对汇编过程进行某种控制或操作,这类指令称为伪指令。

1.汇编语言源程序由以下两种指令构成▪汇编语句(指令语句)▪伪指令(指示性语句)2.汇编语句的格式:标号:操作码操作数;注释数据表示形式:二进制(B)、十六进制(H)、十进制(D或省略)、ASCII码(以单引号标识)4.1.1 定义起始地址伪指令格式:ORG addr16功能:规定程序块或数据块存放的起始地址。

addr16表示一个16位的程序存储器的空间地址,一般为一个确定的地址,也可以是事先定义的标号。

例如:ORG 2000HSTART: MOV A, 30H…4.1.2 定义汇编结束伪指令格式:END功能:表示汇编结束4.1.3 标号赋值伪指令格式:标号EQU [表达式]功能:将表达式的值赋给本语句中的标号。

又称为等值指令。

例:AA EQU 30HK1 EQU 40HMOV A,AA ;(30H)→AMOV A,K1 ;(40H)→A4.1.4 定义字节伪指令格式:标号: DB [字节表]从指定单元开始定义(存储)若干个字节的数据或ASCII码字符,常用于定义数据常数表。

格式:DB 字节常数或ASCII字符例: ORG 1000HDB 34H,0DEH,’A’,’B’DB 0AH,0BH,204.1.5 定义字伪指令格式:标号: DW[字表]从指定单元开始定义(存储)若干个字的数据或ASCII码字符。

格式:DW 字常数或ASCII字符例:ORG 2000HDW 1234H,’B’DW 0AH,204.1.6 DS 预留存储区伪指令格式:标号: DS表达式功能:从标号指定的地址单元开始,定义一个存储区,以备源程序使用。

存储区内预留的存储单元数由表达式的值决定。

例如:ORG 3030HTIMER: DS 10H┇BIT位地址符号指令。

51单片机汇编指令总结

51单片机汇编指令总结

51单片机汇编指令总结51单片机汇编指令总结数据传输指令一.片内RAM数据传输指令1.以累加器A为目的操作数的指令:MOVA,RnMOVA,directMOVA,@RiMOVA,#data2.以寄存器Rn为目的操作数的指令:MOVRn,AMOVRn,directMOVRn,data3.以直接地址为目的操作数的指令:MOVdirect,AMOVdirect,RnMOVdirect1,derect2MOVdirect,@RiMOVdirect,#data4.间接地址为目的操作数的指令:MOV@Ri,AMOV@Ri,directMOV@Ri,#data5.十六位数据传送指令:MOVDPTR,#data16二.累加器A与片外RAM数据传送指令:MOVXA,@RiMOVXA,@DPTRMOVX@Ri,AMOVX@DPTR,A三.查表寻址:MOVCA,@A+DPTR(先PC←(PC)+1,后A←((A)+(DPTR)))+MOVCA,@A+PC(先PC←(PC)+1,后A←((A)+(PC)))四.交换指令:1.字节交换指令:XCHA,RnXCHA,directXCHA,@Ri2.半字节交换指令:XCHDA,@Ri3.累加器半字节交换指令:SWAPA五.栈操作指令:1.PUSH(入栈指令)PUSHdirect2.POP(出栈指令)POPdirect算术运算指令:一.加法减法指令:1.加法指令:ADDA,RnADDA,directADDA,@RiADDA,#data2.带进位加法指令:ADDCA,RnA←(A)+(Rn)+CYADDCA,directA←(A)+(direct)+CYADDCA,@RiA←(A)+((Ri))+CYADDCA,#dataA←(A)+(data)+CY3.带借位减法指令:SUBBA,RnA←(A)-CY-(Rn)SUBBA,directA←(A)-CY-(direct)SUBBA,@RiA←(A)-CY-((Ri))SUBBA,#dataA←(A)-CY-#data二.乘法除法指令:1.乘法指令:MULABBA←(A)×(B)高字节放在B中,低字节放在A中2.除法指令:DIVABA←(A)÷(B)的商,(B)←(A)÷(B)的余数三.加1减1指令:1.加1指令:INCAA←(A)+1INCRnRn←(Rn)+1INCdirectdirect←(direct)+1INC@Ri(Ri)←((Ri))+1INCDPTRDPTR←(DPTR)+12.减1指令:DECADECRnDECdirectDEC@Ri四.十进制调制指令:DAA调整累加器A的内容为BCD码逻辑操作指令:一.逻辑与、或、异或指令:1.逻辑与指令:ANLA,RnANLA,directANLA,@RiANLA,#data2.逻辑或这令:ORLA,RnORLA,directORLA,@RiORLA,#dataORLdirect,AORLdirect,#data3.逻辑异或指令:XRLA,RnXRLA,directXRLA,@RiXRLA,#dataXRLdirect,AXRLdirect,#data二.清零、取反指令:1.累加器A清零指令:CRLA2.累加器A取反指令:CPLA三.循环位移指令:1.累加器A循环左移指令:RLA2.累加器A循环右移指令:RRA3.累加器A连同进位位循环左移指令:RLCA4.累加器A连同进位位循环右移指令:RRCA控制转移指令:一.无条件转移指令:1.绝对转移指令:AJMPaddr11(先PC+2,然后将addr11的低十位传给PC,PC的高六位不变)2.长转移指令:LJMPaddr16(用addr16的值替换PC的值)3.相对转移(短转移)指令:SJMPrel(带符号的偏移字节数)(PC+2,再加rel赋值给PC)4.间接转移指令:JMP@A+DPTR(A)+(DPTR)→(PC)二.条件转移指令:1.累加器判零转移指令:JZrel先PC+2;后判断,A为0时转移,PC+rel赋值给PC;否则顺序执行JNZrel先PC+2,后判断,A不为0时转移,PC+rel赋值给PC;否则顺序执行2.比较转移指令:CJNE目的操作数,源操作数,relCJNEA,direct,rel先PC+3传回PC,再比较目的操作数和原操作数CJNEA,#data,rel 目>源时,程序转移,PC+rel传回PC且CY=0CJNERn,#data,rel目=源时,程序顺序执行CJNE@Ri,#data,rel目ORLC,bitORLC,bit三.位清零、置一、取反指令:1.位清零指令:CLRCCLRbit2.位置一指令:SETBCSTEBbi3.位取反指令:CPLCCPLbit这类指令的功能执行的结果不影响标志位,当直接寻址位地址为端口P0~P3中的某一位时,具有“读-改-写”的功能。

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集一、数据传送类指令(7种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送;MOVX (Move External RAM) 对外部RAM的数据传送;XCH (Exchange) 字节交换;XCHD (Exchange low-order Digit) 低半字节交换;PUSH (Push onto Stack) 入栈;POP (Pop from Stack) 出栈;二、算术运算类指令(8种助记符)ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;SUBB(Subtract with Borrow) 带借位减法;DA(Decimal Adjust) 十进制调整;INC(Increment) 加1;DEC(Decrement) 减1;MUL(Multiplication、Multiply) 乘法;DIV(Division、Divide) 除法;三、逻辑运算类指令(10种助记符)ANL(AND Logic) 逻辑与;ORL(OR Logic) 逻辑或;XRL(Exclusive-OR Logic) 逻辑异或;CLR(Clear) 清零;CPL(Complement) 取反;RL(Rotate left) 循环左移;RLC(Rotate Left throught the Carry flag) 带进位循环左移;RR(Rotate Right) 循环右移;RRC (Rotate Right throught the Carry flag) 带进位循环右移;SWAP (Swap) 低4位与高4位交换;四、控制转移类指令(17种助记符)ACALL(Absolute subroutine Call)子程序绝对调用;LCALL(Long subroutine Call)子程序长调用;RET(Return from subroutine)子程序返回;RETI(Return from Interruption)中断返回;SJMP(Short Jump)短转移;AJMP(Absolute Jump)绝对转移;LJMP(Long Jump)长转移;CJNE (Compare Jump if Not Equal)比较不相等则转移;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;JZ (Jump if Zero)结果为0则转移;JNZ (Jump if Not Zero) 结果不为0则转移;JC (Jump if the Carry flag is set)有进位则转移;JNC (Jump if Not Carry)无进位则转移;JB (Jump if the Bit is set)位为1则转移;JNB (Jump if the Bit is Not set) 位为0则转移;JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation) 空操作;五、位操作指令(1种助记符)CLR 位清零;SETB(Set Bit) 位置1。

51单片机汇编指令及伪指令小结

51单片机汇编指令及伪指令小结

51单片机汇编指令及伪指令小结51单片机汇编指令及伪指令小结51单片机汇编指令小结一、数据传送类指令MOV用法MOVA,RnMOVA,@RiMOVA,#dataMOVA,directMOVRn,AMOVRn,#dataMOVRn,directMOV@Ri,AMOV@Ri,#dataMOV@Ri,directMOVdirect,AMOVdirect,@RiMOVdirect,Rn功能寄存器送累加器立即数送累加器直接寻址单元送累加器累加器送寄存器立即数送寄存器直接寻址单元送寄存器字节数122122周期11111121121222222222221111XCH不能出现两个直接寻址地址R0和R1只能寻址片内低128字节或者片外低256字节MOVX必须通过A与外部RAM传值,另一个操作数必须用寄存器间接寻址MOVC必须通过A进行注意事项MOV指令中不能出现两个工作寄存器间接寄存器寻址只能用R0和R1R0和R1只能寻址片内低128字节或者片外低256字节(SFR不能通过工作寄存器寻址)DPTR为唯一16位寄存器内部RAM单元送累加器1累加器送内部RAM单元1立即数送内部RAM单元2直接寻址单元送内部RAM单元累加器送直接寻址单元内部RAM单元送直接寻址单元寄存器送直接寻址单元址单元223223MOVdirect,#data 立即数送直接寻址单元MOVdirect2,direct1直接寻址单元送直接寻MOVDPTR,#data1616位立即数送数据指针3MOVXMOVXA,@Ri外部RAM单元送累加器1(8位地址)MOVXA,@DPTRMOVX@Ri,AMOVX@DPTR,AMOVCMOVCAA+DPTRXCHXCHD,@外部RAM单元送累加器(16位地址)累加器送外部RAM单元(8位地址)累加器送外部RAM单元(16位地址)查表数据送累加器(DPTR为基址)查表数据送累加器(PC为基址)累加器与寄存器交换累加器与内部RAM单元交换累加器与直接寻址单元交换累加器与内部RAM单元111111121MOVCA,@A+PCXCHA,RnXCHA,@RiXCHA,directXCHDA,@Ri低4位交换PUSH&POPPOPdirectPUSHdirect栈顶弹出指令直接寻址单元直接寻址单元压入栈顶2222用ACC表示累加器堆栈在用户RAM区二、算术运算类指令指令ADD用法ADDA,RnADDA,@RiADDA,directADDA,#dataADDCADDCA,RnADDCA,@RiADDCA,#dataADDCA,directINCINCAINCRnINCdirectINC@Ri功能累加器加寄存器累加器加内部RAM单元累加器加直接寻址单元累加器加立即数累加器加寄存器和进位标志累加器加内部RAM单元和进位标志累加器加立即数和进位标志累加器加直接寻址单元和进位标志累加器加1寄存器加1直接寻址单元加1内部RAM单元加1字节数112211221121周期111111111111注意事项ADD可以产生进位,但不考虑进位加法类指令只能通过A进行加法类的和超过8位时,CY置1,OV置1 ADDC可以产生进位,也考虑进位除了INCA改变奇偶标识位,其他都不改变PSW(不改变CY)INCDPTRDASUBBDAASUBBA,RnSUBBA,@RiSUBBA,#dataSUBBA,directDECDECADECRnDEC@RiDECdirectMUL&MULABDIV数据指针加1十进制调整累加器减寄存器和进位标志累加器减内部RAM单元和进位标志累加器减立即数和进位标志累加器减直接寻址单元和进位标志累加器减1寄存器减1内部RAM单元减1直接寻址单元减1累加器乘寄存器B1111221112121111111114结果存储为BAA、B为单字节无符号数乘积大于255时(结果中B不为0),OV置1CY总为0结果储存为:商A,余数B除数为0时,OV置1与INC类似DIVAB累加器除以寄存器B14三、逻辑运算类指令指令ANL用法ANLA,RnANLA,@RiANLA,#dataANLA,directANLdirect,AANLdirect,#dataORLORLA,RnORLA,@RiORLA,#dataORLA,direct功能累加器与寄存器累加器与内部RAM单元累加器与立即数累加器与直接寻址单元直接寻址单元与累加器直接寻址单元与立即数累加器或寄存器累加器或内部RAM单元累加器或立即数累加器或直接寻址单字节数1122231122周期注意事项111111111元ORLdirect,AORLdirect,#dataXRLXRLA,RnXRLA,@RiXRLA,#dataXRLA,directXRLdirect,AXRLdirect,#dataRLARRARLCARRCACPLACLRA 直接寻址单元或累加器直接寻址单元或立即数累加器异或寄存器累加器异或内部RAM单元累加器异或立即数累加器异或直接寻址单元直接寻址单元异或累加器直接寻址单元异或立即数累加器左循环移位累加器右循环移位累加器连进位标志左循环移位累加器连进位标志右循环移位累加器取反累加器清零2311222311111111111112111111边上一位移入CY,另一侧一位从CY移入ANL、ORL、XRL均可以对接口进行操作四、控制转移类指令类指令用法ACALLaddr11功能2KB范围内绝对调用字节数2周期注意事项2Addr0~10赋给PC0~10PC11~15不变调用时,地址分两次压栈调用时,地址分两次压栈A+DPTR赋给PCLCALLaddr16AJMPaddr11LJMPaddr16SJMPrelJMP@A+DPTRRETRET1JCrel64kb范围内长调用2KB范围内绝对转移64KB范围内长转移-128B~127B相对短转移相对长转移子程序返回中断返回判断CY=1转移323211122222222JNCrelJZrelJNZrelCJNEA,#data,relCJNEA,direct,relCJNERn,#d ata,rel判断CY=0转移累加器为零转移累加器非零转移累加器与立即数不等转移累加器与直接寻址单元不等转移寄存器与立即数不等转移22233332222222221影响CY:前数>=后数,CY=0,反之CY=1CJNE@Ri,#data,relRAM单元与立即数不等转移五、位操作类指令MOVMOVC,bitMOVbit,C直接寻址位送CC送直接寻址DJNZRn,relDJNZdirect,relNOP直接寻址单元减1不为零转移空操作寄存器减1不为零转移2312212Bit为RAM中20H~2FH中128个可寻址位,或SFR中可寻址储存单元必须通过C传送SETBJBbit,relJNBbit,relJBCbit,relSETBCSETBbit(bit)为1则转移并清零3331222211逻辑操作与字节中的一致51汇编常用伪指令16位地址:此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址;2.【标号】DB字节数据项表:奖项表中的字节数据存放到从标号开始的连续字节单元中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机汇编指令小结
二、算术运算类指令
四、控制转移类指令类
五、位操作类指令
逻辑操作与字节中的一致
51汇编常用伪指令
16位地址:此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址;
2.【标号】DB 字节数据项表:奖项表中的字节数据存放到从标号开始的连续字节单元中。

例如:SEG:DB 88H,100,``7" , ``C";
3.【标号】DW 双字节数据项表:定义16位地址表,16地址按低位地址存低位字节,高位地址存高位字节。

例如:TAB:DW 1234H, 7BH
名字EQU 表达式或名字=表达式:用于给一个表达式赋值或给字符串起名字。

之后名字可用作程序地址,数据地址或立即数地址使用。

名字必须是一字母开头的字母数据串。

例如:COUNT=10或SPACE EQU 10H
5.名字DATA 直接字节地址:给8位内部或外部RAM单元起个名字,名字必须是一字母开头的字母数据串。

同一单元可起多个名字。

例如:ERROR DATA 80H
6.XDATA直接字节地址:给8位外部RAM起个名字,名字规定同DATA伪指令。

例如:IO_POTR XDATA OCF04H
7.名字Bit 指令:给一位可寻址的位单元起个名字,规定同DATA伪指令。

例如:SWT BIT 30H
8.【标号】END:指出源程序到此结束,汇编对其后的程序语句不予理睬。

源程序只在主程序最后使用一个END。

注:DATA和EQU的区别在于用DATA定义的字符名称作为标号登记在符号表中,故可先使用后定义;而用EQU定义的字符名称必须先定义后使用,其原因是EQU不定义在符号表中。

相关文档
最新文档