ASM-51宏汇编使用手册
51单片机(宏汇编)指令集5
常量及其表示
数据形式 格 式 取值范围 备注
2进制 ********B
0,1
0进制 ******
0, 1,2...9
ห้องสมุดไป่ตู้
****H 0,1...E,F
0CDE3H
符应是0--9
ASCII '**' ASCII 'AD' 使用
示例
10110011B 32768 16进制 最前面一个字
HIGH 高字节分离 ADD A,#HIGH 05E2H
LOW 低字节分离 ADD A,#LOW 77F0H
ASM51汇编器通用伪指令
汇编起始命令
ORG 16位地址 (常数或表达式 )
定义程序/数据的起始地址
ORG $+5
ORG 0008H
汇编结束命令
END
汇编到此结束,其后面的内
运算 操 作 含 义
以ADD为例
+
加操作 ADD A,#RR1+36
-
减操作 ADD A,#RR1-2EH
*
乘操作 ADD A,#RR1*0E3H
/
除操作 ADD A,#RR1/23
MOD 模除 ADD A,#RR1 MOD 12
数值运算
操 作 含 义
以ADD为例
SHR
右移 ADD A,#RR1 SHR 3
格式: 字符名称 BIT 位地址 例如: fire bit p1.0
或者: fire equ p1.0
ASM51汇编伪指令EQU/BIT
TEMP EQU 30H ;定义变量TEMP地址为30H T_MOD EQU 40H ;定义定时器模式控制字常
51单片机汇编语言指令集
51汇编语言指令集符号定义表符号含义Rn R0~R7寄存器n=0~7Direct 直接地址,内部数据区的地址RAM(00H~7FH)SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0@Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH) #data 8位常数#data16 16位常数Addr16 16位的目标地址Addr11 11位的目标地址Rel 相关地址bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位指令介绍指令字节周期动作说明算数运算指令1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器12.SUBB A,#data 2 1 将累加器的值减常数值减借位C,结果存回累加器13.INC A 1 1 将累加器的值加114.INC Rn 1 1 将寄存器的值加l15.INC direct 2 1 将直接地址的内容加116.INC @Ri 1 1 将间接地址的内容加117.INC DPTR 1 1 数据指针寄存器值加1说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位18.DEC A 1 1 将累加器的值减119.DEC Rn 1 1 将寄存器的值减120.DEC direct 2 1 将直接地址的内容减121.DEC @Ri 1 1 将间接地址的内容减122.MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。
51单片机汇编语言指令教程(校对版)
03
02
01
00
返回前一次
2.2.3立即寻址
指令本身直接含有所需要的8位或16位的操作数。
将此数称为“立即数”(使用#标明)。如:
MOV A,#30H
;将(8位)立即数送累加器A
MOV DPTR,#2000H ;16位立即数送DPTR积存器
【注意】:MOV A,#30H MOV A,30H 两者的区别。 立即数寻址的指令长度为2或3个字节。
5,位操作指令:位传送、位置位、位运算和位控制转移等 操作。 【 特点】:按位操作而不是按字节的操作。位控转移的判 断不是检测某一个字节而是对某一个位进行检测并决定是 否进行程序转移。 这类指令基本不影响PSW的内容。
2.2 寻址方式
在指令的操作数位置上,用于表征、寻找操作数的方式定义 为“寻址方式”。
3,间址方式的指令不能访问SFR中的单元。如下面的程序 是错误的: MOV R1,#80H MOV A,@R1 (因为80H为SFR的物理地址)
MCS-51 片内 、片外 数据存储器示意图
FFH 特殊功能 寄存器 SFR
80H 7FH
通用数据 存储器
00H
片内数据存储器 256B个字节
FFFFH
注意:
片外数据 存储器 64KB
1,访问片内RAM20H存储单元; MOV A,20H
2,访问片外RAM存储单元; MOV R0,#20H MOVX A,@R0
0000H
3,尽管片内与片外的RAM单元 的00H-FFH地址相重叠但由 于指令的不同不会发生地址
混乱。
片外数据存储器 64KB个字节
2.2.5 变址寻址
操作码 OP
操作数或操作数地址 DATA 或 ADDRESS
51汇编指令大全
Rn: 表示当前寄存器区的8个工作寄存器R0~R7Ri: 表示当前寄存器区的R0或R1,可作地址指针即间址寄存器(i=0或1)@: 为间接寄存器或基址寄存器的前缀.Direct: 表示8位内部数据存储单元的地址.它可以是内部RAM的单元地址0~127.特殊功能寄存器SFR的地址(128~255)或名称,A: 累加器ACC.B: .特殊功能寄存器B,用于MUL和DIV指令中.C: 进位位Cy.#data: 表示包含在指令中的单字节(8位)立即数.如果用16位进制表示,后缀字母为”H”,数据范围00~0FFH,不得一字母开头;如果用16进制表示无须任何后缀,但必须在0~255之间.#data16: 表示包含在指令中的双字节(16位)立即数.Adda16: 表示16位的目的地址.用于LCALL和LJMP指令中,目的地址范围是从0000H~FFFFH的整个64KB存储地址空间.Adda11: 表示11位的目的地址.用于ACALL和AJMP的指令中,目的地址必须和下一条指令第一个字节同处一页.Rel: 表示8位带符号的相对偏移量.用语SJMP和所有的条件转移指令中.偏移量相对于下一条指令的第一个字节计算,在-128~+127范围内取值.DPTR: 为数据指针,可用作16位的地址寄存器./: 加在位操作的前面,表示对该位进行非运算.bit: 表示内部可寻址位或特殊功能寄存器中的直接寻址位.“(x):寄存器或地址单元中的内容.((x)): 有x见解寻址的单元中的内容.<-: 表示将箭头右边的内容传送至箭头的左边.$: 当前指令的地址.单片机指令系统(一) 内部数据传送指令(1) 以累加器A为目的的传送指令:MOV A, #data ;(A)<-dataMOV A, direct ;(A)<-(direct)MOV A, Rn ;(A)<-(Rn)MOV A, @Ri ;(A)<- ((Ri))(2) 以通用寄存器Rn为目的的传送指令:MOV Rn, A ;(Rn)<-(A)MOV Rn, direct ; (Rn)<(direct)- MOV Rn, #data: ; (Rn)<-(data)(3) 以直接地址为目的的传送指令:MOV direct, A ;(direct)<-(A)MOV direct, Rn ; (direct)<-(Rn)MOV direct, direct2 ; (direct)<-(direct2) MOV direct, @Ri ; (direct)<-((Rn))MOV direct, #data ; (direct)<-data(4) 以寄存器间接地址为目的的传送指令:MOV @Ri, A ;((Ri))<-(A)MOV @Ri, direct ;((Ri))<-(direct)MOV @Ri, #data ;((Ri))<-data(二) 数据指针赋值指令(16位数据传送指令)MOV DPTR, #data16;(三) 片外数据传送指令MOVX A, @Ri ;(A)<-((Ri))片外MOVX A, @DPTR ;(A)<-((DPTR))片外MOVX @Ri, A ;((Ri))片外<-(A)MOVX @DPTR, A ;((DPTR))片外<-(A)(四) ROM数据访问指令(查表指令)MOVC A, @A+DPTR ;(A)<-((A)+(DPTR))romMOVC A, @A+PC ;(PC)<-(PC)+1,(A)<-((A )+(PC))rom(五) 堆栈操作指令PUSH direct ;(SP)<-(SP)+1,(SP)<-(direct)堆栈指针先加1,将数据压入栈顶 POP direct ;(direct)<-(SP),(SP)<-(SP)-1将数据从栈顶弹出存入direct,SP再减1(六) 数据交换指令(1)整字节(8位)交换指令:XCH A, Rn ;A和Rn中的数互换XCH A, direct ;A和direct单元中的数互换XCH A, @Ri ;A和Ri间址单元中的数互换(2)半字节交换指令:XCHD A, @Ri ;A的低4位Ri间接单元的低4位互换,高4位不动(3)累加器高低半字节交换指令:SWAP A, ;A的高4位(D7~D4)和低4位(D3~D0)互换(七) 加法指令(1)不带Cy加法指令:ADD A, Rn ;(A)<-(A)+(Rn)ADD A, direct ; (A)<-(A)+(direct)ADD A, @Ri ; (A)<-(A)+((Ri))ADD A, #data ; (A)<-(A)+data(2)带进位加法指令:ADDC A, Rn ;(A)<-(A) +Cy+(Rn)ADDC A, direct ; (A)<-(A) +Cy+(direct) ADDC A, @Ri ; (A)<-(A) +Cy+((Ri))ADDC A, #data ; (A)<-(A) +Cy+data(3)加1指令:INC A, ;(A)<-(A)+1INC Rn ;(Rn)<-(Rn)+1INC @Ri ;((Ri))<-((Ri))+1INC direct ;(direct)<-(direct)+1 INC DPTR ;(FPTR)<-(DPTR)+1(八) 减法指令(1)带进位减法指令:SUBB A, Rn ;(A)<-(A) -Cy-(Rn)SUBB A, direct ; (A)<-(A) -Cy-(direct) SUBB A, @Ri ; (A)<-(A) -Cy-((Ri))SUBB A, #data ; (A)<-(A) -Cy-data(2)减1指令:DEC A ;(A)<-(A)-1DEC direct ;(direct)<-(durect)-1DEC Rn ;(Rn)<-(Rn)-1DEC @Ri ;((Ri))<-((Ri))-1(九) 乘除指令(1)乘法指令MUL AB ;(B)(A)<-(A)*(B)指令功能是把累加器A和特殊功能寄存器B中两个8位无符号整数相乘,并把积的高8位字节存入B寄存器,低8位字节存入累加器A.(2)除法指令DIV AB ;A/B,商存入A,余数存入B指令的功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数商的整数部分存入累加器A中,余数保留在B中.(十) 十进制调整指令DA A(十一) 逻辑运算指令(1) 逻辑与运算指令:ANL A, Rn ;(A)<-(A)∧(Rn)ANL A, direct ; (A)<-(A)∧(direct)ANL A, @Ri ; (A)<-(A)∧((Ri))ANL A, #data ; (A)<-(A)∧dataANL direct, A ;(direct)<-(A)∧(direct)ANL direct, #data;(direct<-(direct)∧data(2) 逻辑或运算指令:ORL A, Rn ;(A)<-(A)∨(Rn)ORL A, direct ; (A)<-(A)∨(direct)ORL A, @Ri ; (A)<-(A)∨((Ri))ORL A, #data ; (A)<-(A)∨dataORL direct, A ;(direct)<-(A)∨(direct) ORL direct, #data; (direct)<-(direct)∨data(3) 逻辑异或运算指令:XRL A, Rn ;(A)<-(A)⊙(Rn)XRL A, direct ; (A)<-(A)⊙(direct)XRL A, @Ri ; (A)<-(A)⊙((Ri))XRL A, #data ; (A)<-(A)⊙dataXRL direct, A ;(direct)<-(A)⊙(direct) XRL direct, #data; (direct)<-(direct)⊙data(4) 累加器清0和去反指令CLR A ;(A)<-0 (累加器清0指令)CLR A ;(A)<-(A) (累加器取反指令)(5) 累加器移位指令:不带进位Cy循环左移: RL A ;Dn+1<-Dn,D0<-D7D7D6D5D4D3D2D1D0不带进位Cy循环右移: RR A :Dn+1->Dn,D0<-D7D7D6D5D4D3D2D1D0带进位Cy循环左移: RLC A ;Cy<-D7,Dn+1<-Dn,D0<-CyD7D6D5D4D3D2D1D0带进位Cy循环右移: RRC A ;Cy->D7,Dn+1->Dn,D0->Cy (十二) 控制转移指令[1] 无条件转移指令:(1) 长转移指令 LJMP addr16 ;(PC)<-addr16(2) 绝对转移指令AJMP addr11 ;(PC)<-(PC)+2,(PC)10~0<-addr11(3) 短转移指令 SJMP rel ;(PC)<-(PC)+2+rel(4) 变址寻址转移指令JMP @A+DPTR ;(PC)<-(A)+(DPTR)[2] 条件转移指令:(1) 累加器判0转移指令:JZ rel ;如果(A)=0,跳转到目标语句,否则顺序执行JNZ rel ;如果(A)≠0,跳转到目标语句,否则顺序执行(2) 比较转移指令:CJNZ A, #data, rel ;如果(A)≠data,则跳转到目标语句,否则程序顺序执行CJNZ A direct, rel ; 如果(A)≠(direct),则跳转到目标语句,否则程序顺序执行CJNZ Rn #data, rel ; 如果(A)≠data,则跳转到目标语句,否则程序顺序执行CJNZ @Ri #data, rel ; 如果(A)≠data,则跳转到目标语句,否则程序顺序执行(3) 循环控制转移指令:DJNZ Rn, rel ;(Rn)先减1,如减1后(Rn)≠0,则跳转到目标语句;否则顺序执行DJNZ firect, rel ; (direct)先减1,如减1后(direct)≠0,则跳转到目标语句;否则顺序执行(十三) 子程序调用和返回指令(1) 绝对调用指令:ACALL addr11(2) 长调用指令:LCALL addr16(3) 返回指令:RET 子程序返回RETI 中断服务程序返回(十四) 空操作指令NOP 空操作指令是一条特殊指令,单片机在执行该指令时不进行任何操作,只是消耗1个机器周期的时间,所以该指令长用于延时程序.软件陷阱程序等(十五) 位操作类指令(1) 位传送指令:MOV C,bit ;(Cy)<-(bit),bit位的状态不变MOV bit,C ; (bit) <- (Cy),Cy位的状态不变(2) 位置位和复位指令:SETB C ;(Cy)<-1SETB bit ;(bit)<-1CLR C ;(Cy)<-0CLR bit ;(bit)<-0(3) 位运算指令:ANL C,bit ;(Cy)<-(Cy)∧(bit),Cy位和bit位相与,结果赋给CyANL C,/bit ;(Cy)<-(Cy)∧(bit),Cy位和bit位相与,结果赋给CyORL C,bit ;(Cy)<-(Cy)∨(bit),Cy位和bit位相或,结果赋给CyORL C,/bit ;(Cy)<-(Cy) ∨(bit),Cy位和bit位相或,结果赋给CyCPL C ; (Cy)<-(Cy),Cy位取反CPL bit ;(bit)<-(bit),bit位取反(4) 位测试转移指令:(1) 以Cy位状态为条件的转移指令JC rel ;如果Cy位=1,跳转到目标语句,否则顺序执行JNC rel ;如果Cy位=0,跳转到目标语句,否则顺序执行(2) 以指定位状态为条件的转移指令:JB bit, rel ;如果bit=1,跳转到目标语句,否则顺序执行JNB bit, rel ;如果bit=0,跳转到目标语句,否则顺序执行JBC bit, rel ;如果bit=1,跳转到目标语句,同时将bit位清0;否则顺序执行。
51单片机(宏汇编)指令集5
软件陷阱:
所谓软件陷阱,就是一条引导指令,强行将乱 飞的程序引向一个指定的地址,在那里有一段 专门对程序出错进行处理的程序。 如果我们把这段程序的入口标号称为ERR的话, 软件陷阱即为一条LJMP ERR指令。
赋值命令
EQU 赋值命令。定义变量地址或者常数名称。 格式: 字符名称 EQU (数或汇编符号) 赋值后的符号名称可做:数据地址\代码地址\代 码地址\立即数\寄存器名 例如: ABC EQU 30H ABC EQU R7 不能重名定义
赋值命令
DATA 数据地址赋值命令 格式: 字符名称 DATA 表达式 注意: 表达式可求值(数据) 可以后定义先使用 ABC DATA 30H ABC DATA 30+20 不能重名定义
单片Байду номын сангаас原理及应用5
51单片机宏汇编和程序结构
51单片机的汇编语言(宏汇编)
只有指令助记符还不能编写出好程序,需要增 添一些“伪指令”。 伪指令用于控制汇编软件如何处理和按什么规 则编译程序。 伪指令不会产生“机器码” 不同的汇编器(仿真器、仿真软件)具有一些 不同的“伪指令”规定。 下面将介绍一些常用的伪指令
数值运算
汇编语言对常量允许进行算术运算,逻辑运算,分离 运算等三种类型的运算。 运 算 操 作 含 义 以ADD为例 + 加操作 ADD A,#RR1+36 减操作 ADD A,#RR1-2EH * 乘操作 ADD A,#RR1*0E3H / 除操作 ADD A,#RR1/23 MOD 模除 ADD A,#RR1 MOD 12
ASM51宏汇编使用手册
ASM51宏汇编使用手册2007-01-21 10:33ASM-51 宏汇编使用手册ASM-51 宏汇编主要用来开发Inter8051系列单片机,它具有宏处理,数据处理,列表处理和条件处理等多种功能。
源程序的编写完全采用 Inter标准助记符和行格式。
在编写程序过程中,可借助于文本编辑(Windows的记事本)或文字处理软件Word等编辑,经ASM-51汇编后生成列表输出文件(.LST)和目标代码文件(.HEX)。
此目标代码文件(.HEX)可直接用CZS-51或MedWin、Keil、Debug8051进行模拟/调试,或直接用于硬件仿真器上运行。
当然,这也是要烧写到单片机ROM中的代码。
1、宏汇编语言的基本语法1、1 宏汇编的特点ASM-51宏汇编完全支持Inter助记符的汇编语言,它含有宏语句,英文大小写字母,变量名,标号等不受限制,有二,十,十六进制和串参数类型,有汇编控制指令和多层条件语句,程序逻辑分段,还有模块化程序设计的连接功能,汇编速度快等特点。
1、2 汇编处理过程(1) 用行编辑EDLIN或文字处理软件WS或全屏幕编辑软件PE等,编辑宏汇编语言源程序,它的文件扩展名为。
ASM。
(2) 用ASM-51宏汇编程序对上述源程序文件进行汇编,产生扩展名为.LST的列表输出文件和扩展名为.HEX的目标代码文件(.HEX)。
列表输出文件包含源程序语句所汇编成的代码,以及有关的地址,语句和符号表等。
目标代码文件包含源程序语句所汇编成的代码,不包含任何符号信息或助记符。
进行模拟/调试,或直接用于硬件仿真器上运行。
1、3 语句汇编语言可分为两类语句:指令性语句和指示性语句。
(1)指令性语句这一类语句是指在汇编过程中能生成指令代码的语句(如 MOV ,DEC等)。
其格式为:[标号:] [指令助记符] [操作数] [;注释]其中方括号[ ]中为选择项。
下同。
(2)指示性语句这一类语句即通常所说的伪指令,它指示汇编程序后面的指示性语句如何产生代码。
51单片机汇编语言教程
51单片机汇编语言教程:1课:单片机简叙1、什么是单片机一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。
在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。
而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。
单片机是一种控制芯片,一个微型的计算机,而加上晶振,存储器,地址锁存器,逻辑门,七段译码器(显示器),按钮(类似键盘),扩展芯片,接口等那是单片机系统。
天!PC中的CPU一块就要卖几千块钱,这么多东西做在一起,还不得买个天价!再说这块芯片也得非常大了。
不,价格并不高,从几元人民币到几十元人民币,体积也不大,一般用40脚封装,当然功能多一些单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,有的甚至只8只引脚。
为什么会这样呢?功能有强弱,打个比方,市场上面有的组合音响一套才卖几百块钱,可是有的一台功放机就要卖好几千。
另外这种芯片的生产量很大,技术也很成熟,51系列的单片机已经做了十几年,所以价格就低了。
既然如此,单片机的功能肯定不强,干吗要学它呢?话不能这样说,实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用PIII?应用的关键是看是否够用,是否有很好的性能价格比。
所以8051出来十多年,依然没有被淘汰,还在不断的发展中。
2、MCS51单片机和8051、8031、89C51等的关系我们平常老是讲8051,又有什么8031,现在又有89C51,89s51它们之间究竟是什么关系?MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。
(完整版)51单片机汇编指令(全)
指令中常用符号说明Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7)Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1)Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址#data表示8位常数(立即数)#data16表示16位常数Add16表示16位地址Addr11表示11位地址Rel8位代符号的地址偏移量Bit表示位地址@间接寻址寄存器或基址寄存器的前缀( )表示括号中单元的内容(( ))表示间接寻址的内容指令系统数据传送指令(8个助记符)助记符中英文注释MOV Move 移动MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器AMOV A , Direct;(direct)→A,直接地址的内容送AMOV A ,@ Ri;(Ri)→A,RI间址的内容送AMOV A , #data;data→A,立即数送AMOV Rn , A;A→Rn,累加器A的内容送寄存器RnMOV Rn ,direct;(direct)→Rn,直接地址中的内容送RnMOV Rn , #data;data→Rn,立即数送RnMOV direct , A;A→(direct),累加器A中的内容送直接地址中MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址MOV direct , #data;8位立即数送到直接地址中MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中MOV @Ri , #data; data→@Ri ,8位立即数送到间址中MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令)(MOV类指令共16条)MOVC Move Cod 查表指令MOVC A , @A+PC;PC+1→PC,(A+PC)→AMOVC A , @A+DPTR;(A+DPTR) →A(MOVC类指令共两条)MOVX Move External 与外部数据寄存区传送数据MOVX A , @DPTR;(DPTR)→A,DPTR间址单元内容送AMOVX @DPTR , A;A→(DPTR),A中内容送入DPTR间址单元MOVX A , @Ri;(Ri)→A,Ri间址单元内容送AMOVX @Ri , A;A→(Ri),A中内容送Ri间址单元(MOVX类指令4条)XCH Exchange 交换指令XCH A , Rn;Rn←→A , Rn的内容与A的内容交换XCH A , Direct; Direct ←→A ,直接地址的内容与A的内容交换XCH A , @Ri;(Ri)←→A ,间址的内容与A的内容交换XCHD Exchange Decimal十进制交换XCHD A , @Ri;(Ri.3~Ri.0) ←→A.3~A.0,间址内容低四位与A中内容低四位交换SWAP Swap 交换SWAP A;A.3~A.0←→ A.7~A.4 , A中低四位与高四位内容交换PUSH Push 入栈PUSH direct;SP+1→SP , (direct)→(SP);直接地址内容压入堆栈顶POP Pop 出栈POP direct;(SP)→(direct) , SP-1→SP;堆栈内容弹出到直接地址●算术运算类指令(7个助记符)ADD Add 加法运算ADD A , Rn;A + Rn→A , A与Rn的内容相加,结果送到A中ADD A , direct;(direct)+A→A,A与直接地址的内容相加,结果送到A中ADD A , @Ri;((Ri))+A→A, A与间址中的内容相加,结果送到A中ADD A , #data;data+A→A,A与立即数相加,和送入AADDC ADD with Carry 带进位加法ADDC A , Rn;A + Rn+CY→A , A与Rn的内容、进位状态相加,结果送到A中ADDC A , direct;(direct)+A+CY→A,A与直接地址的内容、进位状态相加,结果送到A中ADDC A , @Ri;((Ri))+A+CY→A, A与间址中的内容、进位状态相加,结果送到A中ADDC A , #data;data+A+CY→A,A与立即数、进位状态相加,和送入ASUBB Subbtract with Borrow 带进位减法SUBB A , Rn;A-Rn-CY→A,A减寄存器Rn的内容及进位标志,结果送ASUBB A , direct; A-(direct)-CY→A,A直接地址的内容及进位标志,结果送ASUBB A , @Ri; A-((Ri))-CY→A,A间址的内容及进位标志,结果送ASUBB A , #data; A-data-CY→A,A立即数及进位标志,结果送AMUL Multiply 乘法指令MUL AB;A x B→B和A,结果16位,高8位存入B,低8位存入A;若结果大于FFH,则将溢出标志OV置1DIV Divide 除法指令DIV AB;A÷B 商→A,余数→B;若除数为0,结果不确定,则将溢出标志OV置1INC Increment 加1指令INC A;A+1→A,A加1,结果放在AINC Rn; Rn +1→ Rn, Rn加1,结果放在RnINC direct; (direct)+1→ direct,直接地址的内容加1,结果放在该地址中INC @Ri;((Ri))+1→( Ri),间址中的内容加1,结果放在该间址中INC DPTR;(DPTR)+1→DPTR,数据指针内容加1,结果放在数据指针寄存器(DPTR)中DEC Decrement 减1指令INC A;A-1→A,A减1,结果放在AINC Rn; Rn -1→ Rn, Rn减1,结果放在RnINC direct; (direct)-1→ direct,直接地址的内容减1,结果放在该地址中INC @Ri;((Ri))-1→( Ri),间址中的内容减1,结果放在该间址中DA Decimal Adjust 十进制加法调整指令DA A;在加法指令后,把A中二进制码自动调整为BCD码;DA A只能更跟在ADD或ADDC加法指令后,不适用于减法●逻辑运算指令(9个助记符)ANL Logical And 逻辑与运算ANL A , Rn; (A)与(Rn)→A, A的内容与Rn中的内容相与,结果放在A中ANL A , direct; (A)与(direct)→A, A的内容与直接地址中的内容相与,结果放在A中ANL A , @Ri; (A)与((Ri))→A, A的内容与间址的内容相与,结果放在A中ANL A , #data; (A)与(data)→A, A的内容与立即数相与,结果放在A中ANL direct , A; (direct)与(A)→direct, 直接地址中的内容相与A的内容相与,结果放在直接地址中ANL direct , #data;(direct)与#data→direct, 直接地址中的内容相与立即数相与,结果放在直接地址中ORL Logical OR 逻辑或运算ORL A , Rn; (A) 或(Rn)→A, A的内容与Rn中的内容相或,结果放在A中ORL A , direct; (A) 或(direct)→A, A的内容与直接地址中的内容相或,结果放在A中ORL A , @Ri; (A) 或((Ri))→A, A的内容与间址的内容相或,结果放在A中ORL A , #data; (A) 或(data)→A, A的内容与立即数相或,结果放在A中ORL direct , A; (direct) 或A)→direct, 直接地址中的内容相与A的内容相或,结果放在直接地址中ORL direct , #data;(direct) 或#data→direct, 直接地址中的内容相与立即数相或,结果放在直接地址中XRL Logical exclusive or 逻辑异或运算ORL A , Rn; (A) 异或(Rn)→A, A的内容与Rn中的内容相异或,结果放在A中ORL A , direct; (A) 异或(direct)→A, A的内容与直接地址中的内容相异或,结果放在A中ORL A , @Ri; (A) 异或((Ri))→A, A的内容与间址的内容相异或,结果放在A中ORL A , #data; (A) 异或(data)→A, A的内容与立即数相异或,结果放在A中ORL direct , A; (direct) 或A)→direct, 直接地址中的内容相与A的内容相异或,结果放在直接地址中ORL direct , #data;(direct) 异或#data→direct, 直接地址中的内容相与立即数相异或,结果放在直接地址RL Rotate Left 循环左移指令RL A;每执行一次,A中的内容左移一位RR Rotate Right 循环右移指令RR A;每执行一次,A中的内容右移一位RLC Rotate Left with the Carry flag 带进位循环左移指令RLC A;每执行一次,CY和A中的内容左移一位RRC Rotate Right with the Carry flag带进位循环又移指令RRC A;每执行一次,CY和A中的内容右移一位注意:循环移位指令只能对A中的内容进行移位操作CPL Complement 取反指令(求补指令)CPL A;累加器内容按位取反,0变1,1变0CLR Clear 清零指令CLR A;累加器清零(A各位全变为0)●控制转移指令(9个助记符)LJMP Long Jump 长跳转指令LJMP add16;add16→PC,无条件跳转到add16地址,可在64KB范围内转移AJMP Absolute Jump 绝对跳转指令AJMP add11;add11→PC,无条件跳转到add11地址,可在2KB范围内转移SJMP Short Jump 短跳转指令SJMP rel;PC+2+rel→PC,rel是偏移量,8位有符号数(-127~127),可向前后跳转±128个地址单元JMP Jump 跳转指令JMP @A+DPTR;A+DPTR→PC,属于散转指令,无条件转向A与DPTR内容相加后形成的新地址JZ Jump if acc is Zero累加器为零转移JZ rel;A=0转向PC+2+rel→PC,A≠0,顺序执行JNZ Jump if acc is Not Zero累加器不为零转移JNZ rel;A≠0转向PC+2+rel→PC,A=0,顺序执行CJNE Compare and Jump if Not Equal比较不相等则转移CJNE A , direct , rel;A≠(direct)转向PC+3+rel→PC,否则顺序执行(PC+3 →PC);(A)>(direct)CY=0, (A)<(direct)CY=1CJNE A , #data , rel;A≠(data)转向PC+3+rel→PC,否则顺序执行(PC+3 →PC);(A)>(data)CY=0,( A)<(data)CY=1CJNE Rn , #data , rel; Rn≠(data)转向PC+3+rel→PC,否则顺序执行(PC+3 →PC); (Rn) >(data)CY=0, (Rn) <(data)CY=1CJNE @Ri , #data , rel;((Ri))≠(data)转向PC+3+rel→PC,否则顺序执行(PC+3 →PC); ((Ri))>(data)CY=0, ((Ri)) <(data)CY=1DJNE Decrement and Jump if Not Zero 减1不为0则转移DJNE Rn , rel;Rn-1→Rn, Rn≠0转向PC+2+rel→PC,否则顺序执行(PC+2→PC)DJNZ direct , rel;(direct-1)→direct, direct≠0转向PC+2+rel→PC,否则顺序执行(PC+2→PC)LCALL Long Call 长条用指令LCALL addr16;调用程序入口地址为addr16的之程序ACALL Absolute Call短调用ACALL addr11;调用程序入口地址为addr11的之程序RET ReturnRET;放在子程序最后,使程序准确返回到主程序断点处RETI Return from InterruptRETI;中断返回指令,能清楚优先级状态NOP No Operation 空操作指令NOP;空操作,产生一个机器周期延时●位操作指令MOV Move 数据传送指令MOV C , bit;(bit)→C,寻址位的状态送入CMOV bit , C;(C)→bit,C的转态送入地址中CLR Clear 清零指令CLR C;0→C,清零累加器CLR bit;清零直接寻址位CPL Complement 取反指令(求补指令)CPL C;c取反CPL bit;直接寻址位取反SETB Set Bit 置位SETB C;C置1SETB bit;直接寻址位置1ANL And Logical 与逻辑运算ANL C , bit;直接寻址位与C相与,结果放在CANL C , /bit; 直接寻址位与非C相与,结果放在CORL OR Logical 或逻辑运算ORL C , bit;直接寻址位与C相或,结果放在CORL C , /bit; 直接寻址位与非C相或,结果放在CJC Jump if Carry is set 进位位为1则转移JC rel;C=1,转向PC+2+rel→PC,否则顺序执行PC+2→PCJNC Jump if Carry is Not set 进位位为不为1则转移JNC rel;C=0,转向PC+2+rel→PC,否则顺序执行PC+2→PCJB Jump if Bit is set 进位位为1则转移JB bit , rel;(bit)=1,转向PC+3+rel→PC,否则顺序执行PC+3→PCJNB Jump if Bit is Not set 进位位为1则转移JNB bit , rel;(bit)=0,转向PC+3+rel→PC,否则顺序执行PC+3→PCJBC Jump if Bit is set and Clear bit指定位等于1转移并清该位JBC bit , rel; (bit)=1,转向PC+3+rel→PC,同时0→bit否则顺序执行PC+3→PC伪指令ORG Origin 代码起始地址指令ORG 0000HMOV A , #0010H;这条指令从0000H这个地址单元开始写起END End 汇编程序结束指令END;汇编指令结束DB字节定义伪指令ORG 1000HDB 01H , 02H;则(1000H)=01H,(1001H)=02HORG 1100HDB ‘01’;则(1100H)=30H,30H是0的ASCII码,(1101H)=31H,31H是1的ASCII码DW双字节定义伪指令ORG 2000HDW 2546H , 0178H; (2000H)=25H, (2001H)=46H, (2002H)=01H, (2003H)=78H,EQU数据赋值伪指令X EQU n;将n的值赋给xBIT位数据赋值伪指令y BIT b;y是用户定义标号,b为0或1MACRO宏指令宏指令名MACRO 形式参数······代码段······ENDM;宏指令定义结束寻址方式及相关的存储空间寻址方式寻址范围寄存器寻址R0~R7A 、B、C(CY)、AB(双字节)、DPTR(双字节)、PC(双字节)直接寻址内部RAM低128字节特殊功能寄存器内部RAM位寻区的128个位特殊功能寄存器中可寻址的位寄存器间接寻址内部数据存储器RAM【@R0,@R1,@SP(仅PUSH,POP)】内部数据存储器单元的低4位(@R0,@R1)外部RAM或I/O口(@R0,@R1,@DPTR)立即寻址程序存储器(常数)程序存储器(@A+PC,@A+DPTR)基寄存器加变址寄存器间接寻址。
51单片机汇编语言教程(精华版本)
30H
②
①
第2章 单片机结构及原理
①区共有32个字节单元(00H~ 1FH),分为4组,每组8个单元, 命名为工作寄存器R0~R7)。
任一时刻CPU只能选用一组工作寄
存器为当前工作寄存器组。
30H
当前工作寄存器组通过PSW中 的RS1和RS0标志位(工作寄存 器组指针)进行设置。
①
PSW7 CY 位7
RAM
作用:存放程序运行结果
字长:8位
30H
数量:256B
第2章 单片机结构及原理
低128B( 00H~7FH )为普通RAM区 高128B (80H~FFH)为特殊功能寄存器区
第2章 单片机结构及原理
(1) 低128字节的区域
①工作寄存器区(00H-1FH)
③
②可位寻址区(20H-2FH)
③用户RAM区(30H-7FH)
(最后一组不足时左边添0凑齐4位)
记忆: 1010B = 0AH 1011B = 0BH
1100B = 0CH
1101B = 0DH 1110B = 0EH 1111B = 0FH
第1章 单片机基础知识概述
(4)十进制整数转换成二、十六进制整数
转换规则:“除基取余”。十进制整数不断除以转换进制 基数,直至商为0。每除一次取一个余数,从低位排向高位。
第1章 单片机基础知识概述
二进制:0、1 ;规则:逢二进一,后缀为B。 一般表达式为:
N B bn1 • 2n1 bn2 • 2n2 b1 • 21 b0 •20
其中,基数为2,各位加权数为0,1。 例如:
1101B 1 23 1 22 0 21 1 20
第1章 单片机基础知识概述
30H
宏汇编软件MASM51的使用
宏汇编软件MASM51的使用第一 节 概 述单片机开发可以用手工汇编和机器汇编两种方法。
采用手工汇编就是先编写出汇编程序,然后对照单片机汇编表手工将汇编程序翻译成机器码,最后将机器码一个一个地送入开发仿真器的RAM中去进行调试。
由于采用手工汇编的机器码是相对于存储器的绝对地址进行定位的,因此在调试时,若要在程序中增加或删除一条指令,就会造成指令的绝对地址发生变化。
这样除修改那条指令外,几乎所有转移、调用指令的操作数都要作相应的修改,稍有疏忽程序就会出错。
而采用机器汇编,在很大程度上可以避免上述麻烦。
只要通过键盘输入源程序后,其余作工作都由计算机来进行,即查出相应的机器码,对地址进行定位,建立能被开发装置接收的机器码文件、建立能打印出清单的列表文件等等。
机器码不需要再一个一个地从仿真器的键盘上键入,只要从PC机的通讯口直接传送到开发装置中去。
因此使用机器汇编大大提高了单片机开发的速度。
源程序被输入到机器中后,以一个文件的形式保存起来,然后就可以对这个文件进行处理了,要对这个文件进行汇编,必须有相应的汇编程序。
在PC机上进行汇编的程序有多种,以下介绍的MASM51软件就是其中的一种,它的主要特点有:1.对用户编写的源程序格式要求不太严格,例如,英文字母的大、小写不受限制,变量名或标号名没有长度限制,对源程序中的空格数也没有严格的要求等等。
这些给用户编写程序带来很大的方便。
2.具有较强的功能,例如支持宏语句,使同一程序中类似的程序结构,只要输入一次,在使用时可用宏语句调用。
此外还允许用条件汇编语句以及完善的伪指令系统等。
减少了编写、输入源程序的工作量。
3.不管用户的源程序有多少错误,它都能全部汇编完,并能形成列表文件及目标文件,以供用户修改错误。
4.可以接收汉字注释,并能完整的将汉字注释复制到列表文件,而其它一些汇编软件则不能处理汉字,或会使列表文件中的汉字注释混乱。
运行MASM51软件的条件很低,现在的PC机都能达到。
ASM-51 宏汇编使用手册
ASM-51 宏汇编使用手册强烈推荐使用配套光盘中的MedWin或Keil开发环境进行编程!其中的A51与这里的ASM51基本相同ASM-51 宏汇编主要用来开发Inter8051系列单片机,它具有宏处理,数据处理,列表处理和条件处理等多种功能。
源程序的编写完全采用 Inter标准助记符和行格式。
在编写程序过程中,可借助于文本编辑(Windows的记事本)或文字处理软件Word等编辑,经ASM-51汇编后生成列表输出文件(.LST)和目标代码文件(.HEX)。
此目标代码文件(.HEX)可直接用CZS-51或MedWin、Keil、Debug8051进行模拟/调试,或直接用于硬件仿真器上运行。
当然,这也是要烧写到单片机ROM中的代码。
1、宏汇编语言的基本语法1、1 宏汇编的特点ASM-51宏汇编完全支持Inter助记符的汇编语言,它含有宏语句,英文大小写字母,变量名,标号等不受限制,有二,十,十六进制和串参数类型,有汇编控制指令和多层条件语句,程序逻辑分段,还有模块化程序设计的连接功能,汇编速度快等特点。
1、2 汇编处理过程(1) 用行编辑EDLIN或文字处理软件WS或全屏幕编辑软件PE等,编辑宏汇编语言源程序,它的文件扩展名为。
ASM。
(2) 用ASM-51宏汇编程序对上述源程序文件进行汇编,产生扩展名为.LST的列表输出文件和扩展名为.HEX的目标代码文件(.HEX)。
列表输出文件包含源程序语句所汇编成的代码,以及有关的地址,语句和符号表等。
目标代码文件包含源程序语句所汇编成的代码,不包含任何符号信息或助记符。
进行模拟/调试,或直接用于硬件仿真器上运行。
1、3 语句汇编语言可分为两类语句:指令性语句和指示性语句。
(1)指令性语句这一类语句是指在汇编过程中能生成指令代码的语句(如 MOV ,DEC等)。
其格式为:[标号:] [指令助记符] [操作数] [;注释]其中方括号[ ]中为选择项。
下同。
51汇编操作手册
行的实际机器指令码。
目标代码文件格式如下:
:cc aaaa tt dd aa dd ss <CR>
计数器 记录地址 数据类型 记录地址 代码的字节 和校验 回车
移量),或者为伪指令中的变量输初值。
为便于程序设计,常量有多种表示形式:二、十、十六进制数和字符串等,它们的格式各不相同,并采用不同的基数标记加以区分。表-
1列出其格式。
表-1
数据形式 格 式 取值范围 示 例 备
注
2进制 ********B 0,1 10110011B
10进制 ****** 0,1,2...9 32768 缺省基数标记
这一类语句即通常所说的伪指令,它指示汇编程序后面的指示性语句如何产生代码。
ASM-51宏汇编完全支持Inter助记符的汇编语言,因此汇编程序的格式,指令完全与8051汇编语言一样,这里不再介绍它们的指令系统。
1、4 常量与数值运算
(1) 常量及其表示
常量,就是在汇编时已经确定的值。 在汇编语言中,常量主要用作指令性语句中的直接操作数 , 也可用于存储器操作的组成部分(如位
综合运算规则 2: 当两个操作数之间没有参数相隔时, 第二个操作符优先于第一个操作符计算。
例如: R1 SET NOT 10011010B
其结果应为 65H。
1、5 程序分段
8051系列的处理器的结构, 把内存分成五个独立的内存段, 即代码段(段名CSEG),数据段(段名DSEG), 外部段(段名XSEG),功能段
EQU 为常量,符号名等定义符号化常量名 符号名不能重名定义
= 为常量,符号名等定义符号化常量名 符号名不能重名定义
ASM宏汇编使用指导手册
ASM-51宏汇编使用手册ASM-51宏汇編主要川來开发Inter8051系列单片机.它具有宏处理.数据处理•列液处理和条件处理等多种功能。
源程序的编写完全采用Inte「标准助记符和行恪式。
在編写程用过程中.吋借助于文本编辑(Windows的记泉本)或文字处理软件Word等編休经ASM-51汇編后生成列表输出文件(丄ST)和目标代码文件(・HEX)。
此目标代码文件(.HEX)町H接用CZS ・51或MedWin. Keil、Debug8051进行模拟/调试,或宜接用于硬件仿真器上运行•当然.这也是要烧写到单片机ROM中的代码。
1、宏汇編语肓的基本i吾法1、1宏汇編的特点ASM-51宏汇編完全支持Inte「助记符的汇編语育•它含有宏语句.英文人小写字母・变册名.标号等不受限!有二十.十六进制和弗参数类型.有汇編控制播令和多层条件语句.程用逻轲分段.还冇模块化程序设汁的连接功能.汇編速度抉等特点。
r2汇编处理过程(1)用行编辑EDLIN或文字处理软件WS或全屏毎編辑软件PE等.編辑宏江編语言谏程序.它的文件扩展名为。
ASM.(2)用ASM-51宏M褊程序对上述漁程序文件进行汇編.产生扩展名为丄ST的列表输出文件和扩展划为.HEX的目标代码文件(.HEX).列茨输出文件包含淞程序语句所汇編成的代码•以及有关的地址.语句和符号表等.目标代码文件包含源祝序语句所汇编成的代码.不包含任何符号信恩或助记符。
进行模拟/调试.或宜接用于硕件仿真器上运行。
1、3语句汇編语肓可分为两类语句:捋令性语句和描示性语句.(1)描令性语句这一类语句是抬在汇编过程中能生成揣令代码的语句(如MOV • DEC等).其恪式为:[标号:][摇令助记符][操作数][•注释]其中方括号[]中为选择项.卜同。
(2)抬示性语句这一类语句即通帘所说的伪折令•它揣示汇編程序后面的播示性语句如何产生代码.ASM-51宏汇編完全支持Inte「助记符的汇編语乳因此汇編程序的格式.抬令完全号8051订编语肓一样.这屮不再介绍它们的揣令系统。
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]指令功能:构造目的地址,实现程序转移。
ASM汇编手册
ҋÝ"ȩ µ˸čÅཔȩ ቱ G Ƒ .HLO 9- "JƑ $ -/ $60ҋÝ"( Ρę ҅J ҋ ޖ < ķ ͩ$ ঠ ַ "L҈Iǟ OWၘ < "L ַNj Ƒ Wǎ "ᇕ! " # ၘ- p ᆿ ! "ķ"ᇕ " Ý" ᇗ $ % &'< $ ( )' ࡚ $ ( )' *+ "! , - ./0 - )) ǎ - Ď -Ʊ L̤Ρę 12 ƑҋÝ") )ҋÝ" ĜČҋÝ"҈I Wၘ Ý") ҅ ҋ) & Lp / ķ P nj Γ Γ˥-P<ƖϤ ń Ý"ÅP < Ӏ ) ַnjᇕ ࢍ - ַၠ၏ -ͩ$ Ý"- ķĜČ3 Ý" Nj$ ' "ᇕ -% 4 p ᆿ ! IӇ֕"ᇕᆿ 5 ķ "ᇕҋÝ") ঠ ַ ҅ ·Ӎ ($3' ҋÝ" ַ -ঠ ַ - Ý" / ·Ӎ ( % & ᇗ <·Ӎ ( ( ) $ ( )' ᇗ ঠ ַ) ܖÝ" c ˫ ) < ķ ঠ ַ) ܖÝ" ȑ ٫ Wၘ - )) ǎ -)Ý") ( ń) ) < )$ ' )- ń) Ý"Nj Ƒ$ ) $8 26 - *ķ' J (7 8 7 Wၘ 8 7 Ȓ 8 79 ǟ8JƑ 78Ƒ(-$3' )- ń) γ- ܖ) ҅ Ý" ַ ) 8ȑ/ҋÝ"҈I Wၘ Ý") ࡚Ý" ַ ҈I Ý") -/ ˹1"҅ ": / ɢ-ļ$ ' /cJ/ ҵ Ý" " t ɢ Ý") Ƒ /( Ȓ ) Ƒ Ȓ Ʊ ǎpC Ȓ ඪ . $8ȉ /' #( Ƒ /ᇗ ɢ(ɑǎ ַၠ၏ / nj Γ Γ˥-P <p Ɩķ ҅ ǟ ၘͪ Z Jޖ ɢ& 783-P ;;;;;;;;< <-P ;;;;;; 3 : 3 Ş ၘ-P ;;;;( = *- ( ̵ p ּ* >;;> * > -> -<3 Ƒȩ/ ɢ L Ý") ) Ƒ (p / & G(҅t) Ď ) Ƒ ) / / ȩ / Č : ַ ) ҅ t) ȩ Ȓ3 ? @A? d B d$3' ɢ-ļҋÝ"Ƒ ܖ Ϥ ɢ ၒ( ȉ p & ܖ ļ Ȓ -ļ$ ' -ļÝ") /ˋƢ- ļ -ļ njᇕ-ļ -ļķ ń -ļ 8 3ܖ3 -ļ-ļ Ȓ ) --(7ļ C ͪ Ȓ -- 1 CȒ -- 1 3 (; * Ȓ -- 1 ; (Ȓ -- 1 32- -- 1 2- 3(1 -- 1 (1(% -- 1 (% 3nj 4- Ȓ -- 1 4- <21 Ȓ -- 1 21 <)21 Ȓ -- 1 )21 (ᇕ 42& Ȓ -- 42& : (( D( 2p༐ -- ( D( 3(%2! Ȋp༐ -- %2! = () 1 ( /$3' " -ļ" -ļ ၏ļ ᇰ ܖ -ļI. ̤ ַ- Ǎ̤ Ȓ ҵ- -ļ # G˫ Wǎ 3 ᇰ E၏ļ ַ78 1 & 42&$ * =( 21 *('J" ּ( = *(" -ļ 3 Ȓ ) ࣣ Ϥ జnj Ȓ Gǎజ Ȓ ၏ļ78 1 & 42& <J" ּ( (ַ ࢍ" ¹˷p ǔ ĵ ˷pࢍ γ ࢍ$ࢍ * D' ޖࢍ$ࢍ - D' .ࢍ$ࢍ ) D' ͩ$ࢍ$ࢍ = D'<ȉࢍ$ࢍ < D'ķ ࢍ ঠ ַƑ ַ ࢍ ޖ t ύ P ַƑ ܖ ࢍ.ؿ ࢍ ࢍ" ) 4- "ঠঠ Ý") <Ý" ַ ඪ * p ·Ӎ ( ঠ ) ᄇNj p d Džd "ᇗ <$ ' $ ( )'$ ( )' * ҅ ַ) ܖ # ȑ ٫ W ၘ ) $ - Ҕ8"" "" ## F*1G၏ ޖń ၘ Džၘ p༐< Ꮔ$ ( )' ˾ + p< Γ˥-P ޖ ၏ $ ' ၘజ ޖp༐ ȉ $ ' ၘ ޖń $ ' Ҕ p༐$""' ၏ జ ޖp༐̤ ܖ p༐ɢ೧ͪ< γ< Ꮔ$##'ķķ$3' ᇗ $ % &'ᇗ Ʊ * ҅ ঠ ַ< ඪ Ȓ( ַ Ʊ ܣΰ ᇗ ܣΰ J Ş ɢ H5 D ̓t Ý" ַ ń ę c ķ3 ȒÝ") Ƒ ) $ ' ႋ ) / ҅( dÅP dÝ" ַ8ȑ¹ ) #) ƿ ) ቱ . pİ Ȓ ޖZ< Z / ȑđ҅ ͩ$ % ń t) Ȓ ࢍt) Ȓ ޖt) Ȓ Ȓ Ȓ ҋ Ȓ cJ҅ Ȓķ 8 ܖȒַ ń Ȓt) Ȓ @A B - & <I& !21- < & &3 ࢍt) Ȓ21D 4- * D - D ) D = D 4-ޖt) Ȓ-< -! -: ȒH& &% H A<&&% H5 D H% & H42% & H42*2-Ȓ = % 4- =ҋ Ȓ *12 4-J҅ %&4 4*%A-3 t) Ȓt) ȒcJ t) / ᇰJƑ t) ( @A B - & <I& !21- < & &ķ ҵ -.t) Ȓ c) 8 :ܖ: t) Ȓt) )@A ( / ķt) / $/ t)B ( / ķt) / $/ t)- & ( p༐ń tɢ $/ t)<I& ( p༐ń tɢ $/ t)!21- ( pń tɢ $/ t)Ƒࣣ p Ȓ< & t) pȉń& t) ń / t)- & <I& Z - & <I& ńǾ ַ- ̤- & t) ) 9# <I& t)3 3 ࢍt) Ȓ$ ' 21D ǎၠූ ַ၏ ɢJ ( 21D ᇰ78 21D (21D HCJƑH ַ၏ ̵ɢ$3' 4- ঠ "J ( 4- ᇰÝ" ַǍ̤ 4-) γɶࡘ- & ַƑࣣ 4- Ý"ঠ ַ$ ' ¹˷p" ǔ ࢍ ࢍ* D ޖࢍ- D .ࢍ) D ͩ$ࢍ= D<ȉࢍ< Dķ J cZ 8 ܖÝ" ࢍܖt) " ޖ ܖ ࢍ Ư ń p 8 ܖ3 ޖt) Ȓޖt) Ȓ7 8 ޖt) 7 ᇰ ᇰ 8JƑ ޖt) (-< -! - ķ8 ܖ ޖt) Ȓ )c)ࢍt) Ȓࢍ c Zࢍ$* D' ܖ· ַ ࢍ Şޖࢍ$- D' ˷. ȒҮp 1 ඪ ַȩ ޖ Ư 21D - & <I& !21- -4 ķඪ.ࢍ$) D' . ȒҮpZ<1 ඪ ȩ ޖࢍͩ$ࢍ$= D' Ĝ×Үp ȉූඪ $8 ᇗˣ ᇗ . ၏ Ƒ ÅP<-" Үp . ķ'ȉࢍ$< D' . ĵ ȉඪ Ҕந )ࢍ ǟ(ȉַ ࢍ ńࢍ $% . ' p༐ Ȓ $<J 'p Ȓ $! "'ࢍ* Dޖࢍ- D.ࢍ) Dͩ$ࢍ= Dȉࢍ< D) $ ' ࢍƑń$3'p༐ Ȓ $<J ' ໘-Nj- & Ư" 9p Ȓ໘-Nj!21- Ư" 9$ '8 ࢍƑ <I& Ưɢ ࢍƑ I 9))Ƒ Z ͩ$Ƒ <I& Ưɢ +Nj$:' ࢍƑ ȉń < & Ư"ޖt) Ȓޖt) ))-< ǎt) p༐ ɢ ᇰ p Ɩ ᇰ Ư" p༐ p Ɩ Ρ d > K Ȓ(-! ǎt) p$ ȉ' ᇰ Φ ȉ 8 ᇰ Ƒ p˷v(p Ɩ p &p Ɩ p 2p༐ූd d- t) pZ- ࢍƑ Ȓ( ַ . & ޖࢍ .ࢍ Ȓ(ȉූ ȩȒ)c )H& &% "ঠ ַ t ͪd d JH& &% 7 8 p & ύ t) Ȓׁ H A<&&% "ঠ ַ t ͋ ͋ ͪd d JH A<&&% 7͋ 8 p &͋ ύ t) ͋ ȒׁH5 D ǎ t) Ý" ( $- ǎ H5 D 7 ᇰ 8 OܣΰŜ' ᇰ ( ( 3 ᇰ ŞH% & ȩঠ ַÝ" / ַ ΡÝ" ࡚ đ / ΡH% &H42% & ȩঠ ַÝ" / ַ ΡH42% &H42*2- ঠ ַÝ" Ý" ַɢࣣ ࡚ Ý" ƢJɢ (= / Ρ = . /H42*2-3 : Ȓ8 ܖ Ȓ ) c)3 ȒȒ= ᇰ7 ַ 87 % 87 ַ 3 84- = = Ƒ ᇰ ( Ý" ࢍ ַ 9 = Ƒ ᇰ (= Ý"ࢍ ַ 3 " Ƒ dz ࢍ Ý" J҅3 ҋ Ȓঠ ַƑ 8 ࢍ ַ ȩ (ȩ ַ / +L-ࢍ ַ ҋt)¹ܖ / ந ַ t) ҋ ࡚ ҋ ந ҋÝ" ַ %W ¹҅ ސ ּ ࢍ$ ' ҋ7 ҋ 8 *12 7 Ϥ 8ࢍ4-ҋt)Ƒ ȩ -d Ϥ d ҅ ҋ " . p ɢ$Ҕ Ϥ 'ܖ ސ ȩ Ϥ "ҋ - ਖ਼æ$3'ҋ)7 ҋ 87Ҕ Ϥ 8 ҔϤ ҅ ) - İ3 ҔϤ ּ ސҋ Ƒ Ϥ 8 Ϥ ( ҋ) Ƒ ҔϤƱּ( ࢨҔϤ 8 ҋt)Ƒ % ҋ) Ý" ַ%W ¹3 J$ ' ސ %&4ͩ$ - %t) p ސঠ ַƑύ p ސ p ķ ǎѤ ַƑ%&4 p%t)%t) p) p ؿ$3' ͪ " 4*%A-ͩ$ ࡚ ঠ ˣ̵̤ঠ Ƒ ƲÝ" ŝ ( ҈ ঠ ַ 4*%A- 7 ᎵW 87 +ؖ 8Ƒ&ࣣ ·Ӎ "6ၒ $) ؿ $ܣ '3 ˣ ঠ ַƑ $ 4- Ý" ɶࡘ- ַ ΡƑ d d śԨ & ࢨԨ -2 Ƒ*24= D I = % ϤҋÝ"-"- 9ҋÝ" < 5*cJˮv - $% 3 ,p༐ 1 '9J ᆿᎵW ᎵW ǟ 4 Oŝ $ ÅP ܣΰ % 1 3 3 ࡛-ၗ ' ᆿ 5* -2 -2 3 ę L "3 ҋÝ" ַ -ҋÝ"(7 -2 " ˣG F*1Gķ ) ந ˣ F*1G - ̤-2 ҋÝ" ࡚ Ǿ : Ý" ȩȩ ҋÝ" ঠ ַÝ" ᇗ < 8 )) ȩ ȩ ҋÝ"҈Iǟ OWၘ < ࡚ "Lঠ ַ ȩ ҋÝ"Ƒ Hͪঠ ַ - - < ) Ʊ OWၘ "Lঠ ַ ˹"Nj ҋÝ"- Ý" ɑ ̤ ᇗ <Ý" 8G 7 - 8JƑ - ( % ( 5 4% ঠ ַÝ" ˸ᇗ $ % &' Ӈ֕( ঠ ַÝ" $ ( )'ঠ ַÝ"5 ঠ ַÝ"4 ঠ ַÝ" ַ -"8 ࣣ - / ᇗ < % & ɑ - )) 8 ))Ƒ ந ) ঠ ַ "Nj / Ý" Ď ˹- )) ̤҈I࡙Ρę %qළI ܾ ඥ & ַÝ"Nj Ƒ ) " ٫$ ٫ ' - )) L Ý" ٫"" ## 2/ M 1 0 ၏ɢ ᄇ -̵) &3 < " J = " 0/ p t ń Ƒ ppM N/ ˋƢ ń śt: % . 4 * M # ! J . 4 ַƑ% . "" ## * 0 " 2 5 ## 3 ঠ ַ ࡚ ))̵ - . )## 0 0/ O ## ᇰ Ƒļ -ļ ࣣ Ȓ## 0 4- Ý" ঠ ַ"Ҽ ந 4-)/ J - M " % . ঠ ַƑt)-A . " 5 # # ᇰ Ƒ 4 ŞA " M " J . ) Ƒ $ t)A 0 P " A " M " 0/ t)Ϥ3 6 / 2/ M 1 0 ɢ ) $ɢ P )。
A51汇编器宏命令
A51汇编器是运行于IBM PC系列及其兼容机上的交叉汇编软件,其主要功能是将MCS-51系列单片机汇编语言源程序翻译成符合Intel目标文件格式的可再定位的目标代码,经过L51连接器的连接和装配,产生可被DS51仿真器调试或其它任何一种与Intel 目标文件格式兼容的仿真器使用的绝对目标代码.一:A51的符号:在A51中可使用符号表示数值(EQU),地址和寄存器名,符号具有段类型,作用域,值域和可变性等属性.符号的段属性:指出符号所位于的地址空间.段类型有:NUMBER 无类型符号DATA DATA段符号(可直接寻址的内部RAM空间)IDATA IDATA段符号(可间接寻址的内部RAM空间)XDATA XDATA段符号(外部数据存储空间)BIT BIT段符号(内部RAM低地址区的可位寻址的空间)CODE CODE段符号(程序存储器空间)REGISTER 寄存器符号作用域:指出符号是外部的,局部的还是全局的.(PUBLIC,EXTRN关键字说明)二:标号:定义标号时,标号名后必须接冒号”:”,以示区别,每行只能定义一个标号,标号一经定义,其值为当前地址计数器的当前值,因此标号代表了指令和数据的地址,不能重复定义.三:特殊的汇编符号:A51宏汇编语言定义了代表CPU寄存器的特殊符号,这些是保留的关键字,AR0---AR7:表示当前工作寄存器的R0—R7的绝对地址,它的值取决于指令所选择的工作寄存器组.四:运算符:有三种1):算术运算符包括:+,-(正负号),加---+,减,乘,除,MOD(取模),()—括号,改变运算顺序.2):二进制运算符号:用来对二进制数进行按位取反,移位或逻辑运算.包括:NOT(按位取反),HIGH(取右边操作数的高8位,LOW(取右边操作数的低8位)SHR(右移位),SHL(左移位),AND(逻辑与),OR(逻辑或),XOR(逻辑异或).3):关系运算符:>=,<=,<>,=,<,>.所有运算符的优先级顺序:()→NOT,HIGH,LOW→+,-(正负号)→*,/,MOD→+,-(加减)→SHR,SHL→AND,OR,XOR→>=,<=,<>,>,<,=.数值表达式:数值表达式由运算符和操作数组成,一个操作数又可以是表达式,与符号具有段属性一样,表达式也具有段类型属性,表达式的类型依赖于操作数的类型.表达式的类型如下:BIT,NUMBER,CODE,DATA,IDATA,XDATA.大多数的表达式是无类型的,当表达式中包含有段类型的操作数或者是子表达式时,运算结果的段类型遵循下面的原则:对于单目运算符:(+/-/HIGH/LOW/NOT)表达式的结果与操作数具有相同的类型.对于所有的双目运算符(除+/-),表达式的结果均为无类型的结果.对加减运算,只有当其中的一个操作数具有段类型的时候,运算结果才具有相同的段类型,如果两个操作数具有段类型,即使他们的段类型一样,结果也是无类型的(NUMBER).总结:只有当操作数加上或者是减去一个无类型时,才可能产生一类型,其他所有的组合均产生无类型的表达式.A51提供了伪指令,可以利用这些伪指令在汇编程序中定义符号,保留和初始化存储空间,定位目标代码等功能,伪指令中除DB,DW外均不产生目标代码,但可以改变汇编器的状态,并将有关信息(如段定义)加到目标文件中.伪指令分四类:1):定义符号:SEGMENT,EQU,SET,DATA,IDATA,XDATA,BIT,CODE2):保留和初始化存储空间:DS,DB,DW,DBIT3):程序链接:PUBLIC,EXTRN,NAME4):汇编状态控制和段选择:ORG,END,RSEG,CSEG,DSEG,XSEG,ISEG,BSEG,USING一:定义符号的伪指令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模式下.其他的模式略有不同。
51单片机的汇编指令手册-高亮+注释
51单片机的汇编指令手册1、数据传送类指令:(28条)1 MOV A,Rn ;寄存器内容送入累加器2 MOV A,direct ;直接地址单元中的数据送入累加器3 MOV A,@Ri ;间接RAM 中的数据送入累加器4 MOV A,#data ;立即数送入累加器5 MOV Rn,A ;累加器内容送入寄存器6 MOV Rn,direct ;直接地址单元中的数据送入寄存器7 MOV Rn,#data ;立即数送入寄存器8 MOV direct,A ;累加器内容送入直接地址单元9 MOV direct,Rn ;寄存器内容送入直接地址单元10 MOV direct,direct ;直接地址单元中的数据送入另一个直接地址单元11 MOV direct,@Ri ;间接RAM 中的数据送入直接地址单元12 MOV direct,#data ;立即数送入直接地址单元13 MOV @Ri,A ;累加器内容送间接RAM 单元14 MOV @Ri,direct ;直接地址单元数据送入间接RAM 单元15 MOV @RI,#data ;立即数送入间接RAM 单元16 MOV DRTR,#dat16 ;16 位立即数送入地址寄存器17 MOVC A,@A+DPTR ;以DPTR为基地址变址寻址单元中的数据送入累加器18 MOVC A,@A+PC ;以PC 为基地址变址寻址单元中的数据送入累加器19 MOVX A,@Ri ;外部RAM(8 位地址)送入累加器20 MOVX A,@DPTR ;外部RAM(16 位地址)送入累加器21 MOVX @Ri,A ;累计器送外部RAM(8 位地址)22 MOVX @DPTR,A ;累计器送外部RAM(16 位地址)23 PUSH direct ;直接地址单元中的数据压入堆栈24 POP direct弹栈送直接地址单元25 XCH A,Rn ;寄存器与累加器交换26 XCH A,direct ;直接地址单元与累加器交换27 XCH A,@Ri ;间接RAM 与累加器交换28 XCHD A,@Ri ;间接RAM 的低半字节与累加器交换2、算术操作类指令:(24条)1 ADD A,Rn ;寄存器内容加到累加器2 ADD A,direct ;直接地址单元的内容加到累加器3 ADD A,@Ri ;间接ROM 的内容加到累加器4 ADD A,#data ;立即数加到累加器5 ADDC A,Rn ;寄存器内容带进位加到累加器6 ADDC A,direct ;直接地址单元的内容带进位加到累加器7 ADDC A,@Ri ;间接ROM 的内容带进位加到累加器8 ADDC A,#data ;立即数带进位加到累加器9 SUBB A,Rn ;累加器带借位减寄存器内容10 SUBB A,direct ;累加器带借位减直接地址单元的内容11 SUBB A,@Ri ;累加器带借位减间接RAM 中的内容12 SUBB A,#data ;累加器带借位减立即数13 INC A ;累加器加114 INC Rn ;寄存器加115 INC direct ;直接地址单元加116 INC @Ri ;间接RAM 单元加117 DEC A ;累加器减118 DEC Rn ;寄存器减1 1 1219 DEC direct ;直接地址单元减120 DEC @Rj ;间接RAM 单元减 121 INC DPTR ;地址寄存器DPTR 加 122 MUL AB A ;乘以B,结果放在A23 DIV AB A ;除以B,结果放在A24 DA A ;累加器十进制调整3、布尔变量操作类指令:(17条)1 CLR C ;清进位位2 CLR bit ;清直接地址位3 SETB C ;置进位位4 SETB bit ;置直接地址位5 CPL C ;进位位求反6 CPL bit ;置直接地址位求反7 ANL C,bit ;进位位和直接地址位相“与”8 ANL C,bit ;进位位和直接地址位的反码相“与”9 ORL C,bit ;进位位和直接地址位相“或”10 ORL C,bit ;进位位和直接地址位的反码相“或”11 MOV C,bit ;直接地址位送入进位位12 MOV bit,C ;进位位送入直接地址位13 JC rel ;进位位为1 则转移14 JNC rel ;进位位为0 则转移15 JB bit,rel ;直接地址位为1 则转移16 JNB bit,rel ;直接地址位为0 则转移17 JBC bit,rel ;直接地址位为1 则转移,该位清零4、逻辑操作数指令:(25条)1 ANL A,Rn ;累加器与寄存器相“与”2 ANL A,direct ;累加器与直接地址单元相“与”3 ANL A,@Ri ;累加器与间接RAM 单元相“与”4 ANL A,#data ;累加器与立即数相“与”5 ANL direct,A ;直接地址单元与累加器相“与”6 ANL direct,#data ;直接地址单元与立即数相“与”7 ORL A,Rn ;累加器与寄存器相“或”8 ORL A,direct ;累加器与直接地址单元相“或”9 ORL A,@Ri ;累加器与间接RAM 单元单元相“或”10 ORL A,#data ;累加器与立即数相“或”11 ORL direct,A ;直接地址单元与累加器相“或”12 ORL direct,#data ;直接地址单元与立即数相“或”13 XRL A,Rn ;累加器与寄存器相“异或”14 XRL A,direct ;累加器与直接地址单元相“异或”15 XRL A,@Ri ;累加器与间接RAM 单元单元相“异或”16 XRL A,#data ;累加器与立即数相“异或”17 XRL direct,A ;直接地址单元与累加器相“异或”18 XRL direct,#data ;直接地址单元与立即数相“异或”19 CLR A ;累加器清“0”20 CPL A ;累加器求反21 RL A ;累加器循环左移22 RLC A ;累加器带进位位循环左移23 RR A ;累加器循环右移24 RRC A ;累加器带进位位循环右移25 SWAP A ;累加器半字节交换5、控制转移类指令:(17条)1 ACALL addr11 ;绝对(短)调用子程序2 LCALL addr16 ;长调用子程序3 RET ;子程序返回4 RETI ;中数返回5 AJMP addr11 ;绝对(短)转移6 LJMP addr16 ;长转移7 SJMP rel ;相对转移8 JMP @A+DPTR ;相对于DPTR 的间接转移9 JZ rel ;累加器为零转移10 CJNE rel ;累加器非零转移11 CJNE A,direct,rel ;累加器与直接地址单元比较,不相等则转移12 CJNE A,#data,rel ;累加器与立即数比较,不相等则转移13 CJNE Rn,#data,rel ;寄存器与立即数比较,不相等则转移14 CJNE @Ri,#data,rel ;间接RAM 单元与立即数比较,不相等则转移15 DJNZ Rn,rel ;寄存器减1,非零转移16 DJNZ direct,erl ;直接地址单元减1,非零转移17 NOP ;空操作。
ASM-51宏汇编使用手册.
ASM-51宏汇编使用手册ASM-51宏汇编使用手册ASM-51 宏汇编主要用来开发Inter8051系列1、宏汇编语言的基本语法1、1 宏汇编的特点ASM-51宏汇编完全支持Inter助记符的汇编语言,它含有宏语句,英文大小写字母,变量名,标号等不受限制,有二,十,十六进制和串参数类型,有汇编1、2 汇编处理过程(1) 用行编辑EDLIN或文字处理软件WS或全屏幕编辑软件PE等,编辑宏汇编语言源程序,它的文件扩展名为。
ASM。
(2) 用ASM-51宏汇编程序对上述源程序文件进行汇编,产生扩展名为.LST的列表输出文件和扩展名为.HEX的目标代码文件(.HEX)。
列表输出文件包含源程序语句所汇编成的代码,以及有关的地址,语句和符号表等。
目标代码文件包含源程序语句所汇编成的代码,不包含任何符号信息或助记符。
进行模拟/调试,或直接用于硬件仿真器上运行。
1、3 语句汇编语言可分为两类语句:指令性语句和指示性语句。
(1)指令性语句这一类语句是指在汇编过程中能生成指令代码的语句(如 MOV ,DEC 等)。
其格式为:[标号:] [指令助记符] [操作数] [;注释]其中方括号[ ]中为选择项。
下同。
(2)指示性语句这一类语句即通常所说的伪指令,它指示汇编程序后面的指示性语句如何产生代码。
ASM-51宏汇编完全支持Inter助记符的汇编语言,因此汇编程序的格式,指令完全与8051汇编语言一样,这里不再介绍它们的指令系统。
1、4 常量与数值运算(1) 常量及其表示常量,就是在汇编时已经确定的值。
在汇编语言中,常量主要用作指令性语句中的直接操作数,也可用于存储器操作的组成部分(如位移量),或者为伪指令中的变量输初值。
为便于程序设计,常量有多种表示形式:二、十、十六进制数和字符串等,它们的格式各不相同,并采用不同的基数标记加以区分。
表--1列出其格式。
表--1数据形式格式取值范围例如备注2进制 ********B 0,1 10011100B10进制 ****** 0,1,2...9 45723 缺省基数标记16进制 ****H 0,1...E,F 0CDE3H 最前面一个字符应是0--9ASCII '**' ASCII 'AD' 只有DB命令中使用常量以数值形式直接写在汇编语言的语句中称为字面常量,若预先为它定义一个符号名,然后在语句中用符号名来表示该常量称符号常量。
A51汇编器宏命令
A51汇编器是运行于IBM PC系列及其兼容机上的交叉汇编软件,其主要功能是将MCS-51系列单片机汇编语言源程序翻译成符合Intel目标文件格式的可再定位的目标代码,经过L51连接器的连接和装配,产生可被DS51仿真器调试或其它任何一种与Intel 目标文件格式兼容的仿真器使用的绝对目标代码.一:A51的符号:在A51中可使用符号表示数值(EQU),地址和寄存器名,符号具有段类型,作用域,值域和可变性等属性.符号的段属性:指出符号所位于的地址空间.段类型有:NUMBER 无类型符号DATA DATA段符号(可直接寻址的内部RAM空间)IDATA IDATA段符号(可间接寻址的内部RAM空间)XDATA XDATA段符号(外部数据存储空间)BIT BIT段符号(内部RAM低地址区的可位寻址的空间)CODE CODE段符号(程序存储器空间)REGISTER 寄存器符号作用域:指出符号是外部的,局部的还是全局的.(PUBLIC,EXTRN关键字说明)二:标号:定义标号时,标号名后必须接冒号”:”,以示区别,每行只能定义一个标号,标号一经定义,其值为当前地址计数器的当前值,因此标号代表了指令和数据的地址,不能重复定义.三:特殊的汇编符号:A51宏汇编语言定义了代表CPU寄存器的特殊符号,这些是保留的关键字,AR0---AR7:表示当前工作寄存器的R0—R7的绝对地址,它的值取决于指令所选择的工作寄存器组.四:运算符:有三种1):算术运算符包括:+,-(正负号),加---+,减,乘,除,MOD(取模),()—括号,改变运算顺序.2):二进制运算符号:用来对二进制数进行按位取反,移位或逻辑运算.包括:NOT(按位取反),HIGH(取右边操作数的高8位,LOW(取右边操作数的低8位)SHR(右移位),SHL(左移位),AND(逻辑与),OR(逻辑或),XOR(逻辑异或).3):关系运算符:>=,<=,<>,=,<,>.所有运算符的优先级顺序:()→NOT,HIGH,LOW→+,-(正负号)→*,/,MOD→+,-(加减)→SHR,SHL→AND,OR,XOR→>=,<=,<>,>,<,=.数值表达式:数值表达式由运算符和操作数组成,一个操作数又可以是表达式,与符号具有段属性一样,表达式也具有段类型属性,表达式的类型依赖于操作数的类型.表达式的类型如下:BIT,NUMBER,CODE,DATA,IDATA,XDATA.大多数的表达式是无类型的,当表达式中包含有段类型的操作数或者是子表达式时,运算结果的段类型遵循下面的原则:对于单目运算符:(+/-/HIGH/LOW/NOT)表达式的结果与操作数具有相同的类型.对于所有的双目运算符(除+/-),表达式的结果均为无类型的结果.对加减运算,只有当其中的一个操作数具有段类型的时候,运算结果才具有相同的段类型,如果两个操作数具有段类型,即使他们的段类型一样,结果也是无类型的(NUMBER).总结:只有当操作数加上或者是减去一个无类型时,才可能产生一类型,其他所有的组合均产生无类型的表达式.A51提供了伪指令,可以利用这些伪指令在汇编程序中定义符号,保留和初始化存储空间,定位目标代码等功能,伪指令中除DB,DW外均不产生目标代码,但可以改变汇编器的状态,并将有关信息(如段定义)加到目标文件中.伪指令分四类:1):定义符号:SEGMENT,EQU,SET,DATA,IDATA,XDATA,BIT,CODE2):保留和初始化存储空间:DS,DB,DW,DBIT3):程序链接:PUBLIC,EXTRN,NAME4):汇编状态控制和段选择:ORG,END,RSEG,CSEG,DSEG,XSEG,ISEG,BSEG,USING一:定义符号的伪指令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模式下.其他的模式略有不同。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ASM-51宏汇编使用手册A51与ASM51基本相同ASM-51 宏汇编主要用来开发Inter8051系列单片机,它具有宏处理,数据处理,列表处理和条件处理等多种功能。
源程序的编写完全采用 Inter标准助记符和行格式。
在编写程序过程中,可借助于文本编辑(Windows的记事本)或文字处理软件Word等编辑,经ASM-51汇编后生成列表输出文件(.LST)和目标代码文件(.HEX)。
此目标代码文件(.HEX)可直接用CZS-51或MedWin、Keil、Debug8051进行模拟/调试,或直接用于硬件仿真器上运行。
当然,这也是要烧写到单片机ROM中的代码。
1、宏汇编语言的基本语法1、1 宏汇编的特点ASM-51宏汇编完全支持Inter助记符的汇编语言,它含有宏语句,英文大小写字母,变量名,标号等不受限制,有二,十,十六进制和串参数类型,有汇编控制指令和多层条件语句,程序逻辑分段,还有模块化程序设计的连接功能,汇编速度快等特点。
1、2 汇编处理过程(1) 用行编辑EDLIN或文字处理软件WS或全屏幕编辑软件PE等,编辑宏汇编语言源程序,它的文件扩展名为。
ASM。
(2) 用ASM-51宏汇编程序对上述源程序文件进行汇编,产生扩展名为.LST的列表输出文件和扩展名为.HEX的目标代码文件(.HEX)。
列表输出文件包含源程序语句所汇编成的代码,以及有关的地址,语句和符号表等。
目标代码文件包含源程序语句所汇编成的代码,不包含任何符号信息或助记符。
进行模拟/调试,或直接用于硬件仿真器上运行。
1、3 语句汇编语言可分为两类语句:指令性语句和指示性语句。
(1)指令性语句这一类语句是指在汇编过程中能生成指令代码的语句(如 MOV ,DEC等)。
其格式为:[标号:] [指令助记符] [操作数] [;注释]其中方括号[ ]中为选择项。
下同。
(2)指示性语句这一类语句即通常所说的伪指令,它指示汇编程序后面的指示性语句如何产生代码。
ASM-51宏汇编完全支持Inter助记符的汇编语言,因此汇编程序的格式,指令完全与8051汇编语言一样,这里不再介绍它们的指令系统。
1、4 常量与数值运算(1) 常量及其表示常量,就是在汇编时已经确定的值。
在汇编语言中,常量主要用作指令性语句中的直接操作数,也可用于存储器操作的组成部分(如位移量),或者为伪指令中的变量输初值。
为便于程序设计,常量有多种表示形式:二、十、十六进制数和字符串等,它们的格式各不相同,并采用不同的基数标记加以区分。
表--1列出其格式。
表--1数据形式格式取值范围例如备注2进制 ********B 0,1 10011100B10进制 ****** 0,1,2...9 45723 缺省基数标记16进制 ****H 0,1...E,F 0CDE3H 最前面一个字符应是0--9ASCII '**' ASCII 'AD' 只有DB命令中使用常量以数值形式直接写在汇编语言的语句中称为字面常量,若预先为它定义一个符号名,然后在语句中用符号名来表示该常量称符号常量。
使用符号常量的优点可改善程序的可读性,它的定义需要使用伪操作命令"EQU"或“=“。
(2) 数值运算宏汇编中,所有参数值均被认为是整数,并以16位的形式存放,表示的范围是0---65535,所有算术操作均对整数以补码形式运算。
(1) 基本运算汇编语言对常量允许进行算术运算,逻辑运算,分离运算等三种类型的运算。
如表--2所示。
表--2 基本运算运算操作含义以ADD为例算 + 加操作 ADD A,R1+36- 减操作 ADD A,R1-2EH* 乘操作 ADD A,R1*0E3H术 / 除操作 ADD A,R1/23MOD 模除 ADD A,R1 MOD 12SHR 右移 ADD A,R1 SHR 3SHL 左移 ADD A,R1 SHL 2逻 AND 与操作 ADD A,R1 AND 10000101BOR 或操作 ADD A,R1 OR 00110000BXOR 异或操作 ADD A,R1 XOR 36H辑 NOT 非操作 ADD A, NOT 45H分 HIGH 高字节分离 ADD A, HIGH 05E2H离 LOW 低字节分离 ADD A, LOW 77F0H说明: R1为符号常量。
(2) 综合运算综合运算规则 1: 计算表达式时,所有的运算全部从左到右顺序进行,遇到操作数就进行运算,不考虑优先关系,括号有助于视觉理解,但不改变表达式的?计算顺序。
例如: R1 SET NOT(0C5FH OR 000CH)其结果应为 0F3ACH。
综合运算规则 2: 当两个操作数之间没有参数相隔时,第二个操作符优先于第一个操作符计算。
例如: R1 SET NOT 10011010B其结果应为 65H。
1、5 程序分段8051系列的处理器的结构,把内存分成五个独立的内存段,即代码段(段名CSEG),数据段(段名DSEG),外部段(段名XSEG),功能段(段名FSEG)和位段(段名BSEG)等。
各个段在源程序中的次序可以任意,段的数目可以根据需要确定,原则上不受限制。
程序中的所有段都必须用段名开头,段结束语句ENDS 结束。
1、6 源文件源文件是由汇编语言代码和汇编程序指令组成的 ASCII 字符文件,扩展名为。
ASM。
源文件的每一语句行,最多有四个域。
每一行的长度不超过80个字符,且以“回车“键结束。
1、7 列表输出文件和目标代码文件(1) 目标代码文件(.HEX)目标代码文件(.HEX)是ASCII文件,它只包含由各种程序语句所生成的代码,而不包含任何信息或助记符。
该文件是能够在处理器上运行的实际机器指令码。
目标代码文件格式如下::cc aaaa tt dd aa dd ss <CR>计数器数据类型记录地址回车记录地址代码的字节和校验目标代码文件(.HEX)的每一行以一个冒号开始,后面跟着的数字和符号分别表示十六进制数据的计数器(cc),记录第一个数据字节的16位地址(aaaa),目标记录的数据类型(tt),代码的实际字节(dd),计数器从第一个数据字节到最后的所有字节值累加和的相反数即和校验(ss)等等。
(2)列表输出文件(.LST)列表输出文件也是个ASCII文件,它由源程序和目标代码文件组成,可作为程序文档也可被打印。
列表输出文件是分页显示,打印的,其长度由缺省值或伪指令$PAGE决定。
每页一开始指出汇编程序的类型,版本以及页号等。
2、伪操作指令汇编语言中的指示性语句(伪指令),不象指令性语句会产生目标代码,它主要是用来“控制指挥“汇编程序如何把指令性语句翻译成目标代码。
除本身伪指令申请分配一部分存贮空间作数据区和堆栈区外,不产生任何目标代码。
按照它们的功能,大致分成七类: 符号定义伪操作,段定义伪操作,数据定义崐伪操作,列表伪操作,条件伪操作,宏处理伪操作以及其它操作等。
如表--3所示。
表--3 伪操作指令序号分类伪操作指令1 符号定义伪操作 EQU,=,DATA,BYTE,WORD,BIT,SET2 段定义伪操作 ORG,END,CSEG,DSEG,XSEG,FSEG,ENDS3 数据定义伪操作 DB,DW,DS4 列表伪操作 $TITLE,$SUBTTL,$PAGE,$LIST,$NOLIST,$NOCODE5 条件伪操作 IF,ELSE,ENDIF6 宏处理伪操作 MACRO,ENDM7 其它 ALTNAME,INCLUDE2、1 符号定义伪操作符号定义伪操作及其格式: 符号名符号定义名常量或表达式其中符号定义名可以为EQU,=,DATA,BYTE,WORD,BIT,SET等。
下面就是这些符号定义伪操作的用法及说明。
如表--4所示。
表--4 符号定义伪操作符号定义名用法说明EQU 为常量,符号名等定义符号化常量名符号名不能重名定义= 为常量,符号名等定义符号化常量名符号名不能重名定义DA TA 用来为一个字节类型的符号定值符号名不能重名定义BYTE 用来为一个字节类型的符号定值符号名不能重名定义WORD 用来为一个字类型的符号定值符号名不能重名定义8051中没有字操作BIT 用来定义一个字位类型SET 用来定义整数类型的符号名符号名可重名定义DA TA与BYTE的区别: DA TA与BYTE是相类似的伪指令。
当程序运行到DATA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。
2、2 段定义伪操作(1) ORG 用于设置或改变程序计数器的值。
其格式为: ORG 常数或表达式例如: ORG 0008HORG $+5其中$表示程序计数器的当前值。
(2) END 表示源代码结束。
其格式为: END 常数或表达式汇编程序遇到END语句即停止运行。
若程序中没有END,则在汇编源程序时显出错(3) 8051系列的处理器把内存结构分成五个段,代码段CSEG,数据段DSEG,外部段XSEG,功能段FSEG和位段BSEG等,其用法及区别如表--5所示。
在汇编以上各段所定义的符号时,系统根据符号所在不同段,赋与不同类型的字母,如表--6所示。
2、3 数据定义伪操作数据定义伪操作格式:[ 标号: ] 数据定义名 [ 表达式1,表达式2,。
]其中数据定义名可为DB,DW,DS等。
如表--7所示,数据定义伪操作的含义及说明。
表--5 段定义伪操作段用法及区别代码段(CSEG) 包含由处理器所执行的程序。
段名可缺省。
有目标代码生成。
数据段(DESG) 由内部工作寄存器的处理器的RAM组成。
用来对程序使用的数据地址赋符号名,大多以ORG,DATA,BYTE,WORD,EDNS等组成。
无目标码生成。
外部段(XSEG) 由外部工作寄存区和RAM组成。
使用方法同数据段。
无目标码生成。
功能段(FSEG) 由特殊寄存器位置组成(如:输入/输出部件,计时器,中断控制和连续的寄存器部件接口等)。
无目标代码生成。
位段(BSEG) 由一些独立的位组成,可以用布尔函数实现。
该段地址被解释为位地址。
无目标代码生成。
表--6 程序分段的类型符号段标号(Label) 字节型操作数(Byte) 字型操作数(Word)代码段CSEG LDW数据段DSEG DDW外部段XSEG XXE功能段FSEG FFG位段BSEG BBB说明: (1)在不同的段中类型符号不同;(2)字节型操作数(Byte)一般通过DATA指令赋给符号; 字型操作数一般通过WORD指令赋给符号;(3)如果各段中用BYTE赋值,则在各段中符号全以S表示;在SIM51模拟/调试中的符号区显示功能中,对BYTE赋值的将被跳过。
(4)在各段中,位类型可以用BIT指令赋给。