目录
指令格式
编译语句实例
单片机的寻址方式
立即数(Immediate Constants)寻址方式
直接(Direct Addressing)寻址方式
寄存器(Register Addressing)寻址方SEO靠我式
寄存器间接(Indirect Addressing)寻址方式
变址(Indexed Addressing)寻址方式
位寻址(Bit Addressing)方式
相对(Relative AddressingSEO靠我)寻址方式
指令系统
数据传送指令
通用传送指令
堆栈操作指令
交换指令
访问程序存储器的数据传送指令
访问外部RAM和外部IO的数据传送指令
算数运算指令
加法指令
减法指令
乘法指令
除法指令
逻辑运算指令
累加器A实现的逻SEO靠我辑操作指令
与逻辑运算指令
或逻辑运算指令
异或逻辑运算指令
位操作指令
位数据传送指令
位修正指令
位逻辑运算指令
控制转移指令
无条件转移类指令
条件转移指令
子程序调用及返回指令
空操作指令
伪指令
伪指令的定义
设置起始地SEO靠我址伪指令 ORG
赋值伪指令 EQU
定义字节数据伪指令 DB
定义双字节数据伪指令 DW
位地址赋值伪指令 BIT
汇编结束伪指令END
指令由 标号、操作码、操作数、注释 四部分构成,格式如下
[标号]: SEO靠我操作码 [操作数] ;[操作数]标号:用来替代指令代码的第一个字节所在单元地址,由用户自行定义,字母开头分。注:一般一段代码需要一个标号用来标记,方便跳转操作。
操作码:规定指令所执行的操作操作数:参与SEO靠我操作的数据信息注释:程序注释,增加程序的可读性编程格式:标号后用(:)隔开,操作码与操作数用空格隔开,注释与指令用(;)隔开
举例:MOV A,#20H
功能:将 20H 送给累加器 A
举例:MOV A,20H
功能:将 20H地址中的内容 送到累加器A中
举例:MOV R0,#20H MOV A,R0
功能:将 20H 放入R0寄存器中 ,将 R0寄存器中的值 放入累加器A中
注:不支持Rn之间的相互传送
举例:MOV R0,#20H MOV A,@R0
功能:将 20H 放入R0寄存器中,取 R0中的值作为地址,寻找地址中的内容 送到累加器A中SEO靠我
注:只有 R0,R1,DPTR 才可作为寄存器间接寻址的源操作数,其中 R0,R1负责内部RAM
DPTR负责外部RAM
举例:MOVC A, @A+SEO靠我DPTR
功能:将 DPTR+A中的值 作为地址,寻找地址中的内容 送到累加器A中
举例:SETB P1.0
功能:将P1并行口中的第一位置一
注: 位寻址方式位51SEO靠我单片机独有的一种寻址方式
举例:SJMP 05H
功能:单片机执行的目标地址为 05H+(P)
格式:MOV 目的操作SEO靠我数,源操作数
;;;以 A 为目的操作数;;; MOV A, R1 ; MOV A, 20H; MOV A, #20H; MOV A, @SEO靠我RO; ;;;;;;;;;;;;;;;;;;;;;;;;;;以工作寄存器Rn为目的操作数;;; MOV R3, A MOV R3, #20H SEO靠我 MOV R3, 20H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以地址为目的操作数;;; MOV 20H,A MOV 20SEO靠我H,R3 MOV 20H,30H MOV 20H,@R1 MOV 20H,#20H ;;;;;;;;;;;;;;;;;;;;;;;;以间SEO靠我接地址为目的操作数;;; MOV @R0, A MOV @R0,@20H MOV @R0.20H ;;;;;;;;;;;;;;;;;;;SEO靠我;;;;;;;;;十六位数据传送;;; MOV DPH, #08H MOV DPL, #26HMOV DPTR, #0826H ;;;;;;;;;;;;SEO靠我;;;;;;;入栈指令:PUSH direct 功能:把指定单元的内容压入SP所指单元格中且SP+1
出栈指令 :POP direct 功能:将SP所指单元格中的内容送到指定单元格中且SP-SEO靠我1
注:direct表示内部RAM的单元地址或SFR的地址
;利用入栈出栈,交换 51H和50H单元格中的内容; PUSH 50H;利用堆栈的先入后出性质实现 PUSH 5SEO靠我1H; POP 50H; POP 51H;字节交换指令:XCH A, 源操作数
半字节交换指令:XCHD A,源操作数
高低4位交换指令:SWAP A
注:此类指令SEO靠我必须由累加器A参与
;假设 (A)=21H (R6)=30H XCH A,R6; 交换后结果为 (A)=30H (R6)=21H;假设 (A)=21H (R6)=30H SEO靠我XCHD A,R6; 交换后结果为 (A)=20H (R6)=31H;假设 (A)=21H SWAP A; 交换后结果为 (A)=12H注: 寄存器+括号代表寄存器中的数值
功能:从程序存储器某个的单元读取一个字节的常数并传给累加器A
MOVC A,@A+DPTR;[(A)+(DPTR)]传给(A)MOVC A,@A+PC ;[(A)+(PC)]传给(A)不带进位的加法指令:ADD A,源操作数 功能:源操作数+(A)再送入A中
带进位的加法指令: ADDC A,源操作数 功能:源操作数+(A)+(CY)再送入A中
加一指令:INC SEO靠我源操作数 功能:源操作数+1再送回源操作数
十进制加法调整指令:DA A 功能:将A中的值调整为BCD码
注:DA指令必须与ADD指令联合使用,即ADD后紧跟DA指令
带借位的减法指令:SUBB A,源SEO靠我操作数功能:(A) - 源操作数 -(CY)再送入A中
减一指令:DEC 源操作数 功能:源操作数-1再送回源操作数
注:51中没有不带借位的减法指令
格式:MUL AB ; 功能:累加器A与寄存SEO靠我器B相乘,A中放结果低8位,B中放高8位
MOV A,20H MOV B,21H ;设置两相乘数据 MUL AB ;进行相乘 MOV 22H,A ;取相乘SEO靠我结果的低八位放入22H中 MOV 23H,B ;取相乘结果的高八位放入21H中格式:DIV AB ; 功能:累加器A除以寄存器B,A中放商,B中放余数
MOV A,20H ; SEO靠我 MOV B,21H ; DIV AB ;累加器A的值 除以 寄存器B的值 MOV 22H,A ;将商放入22H单元格中累加器A清零指令:CLR A 功能:把累加器A的内容清零
累加器A取反指令:CPL A 功能:累加器A的内容按位取反,不影响任何标志位
累加器A循环左移指令:RL A 功能:累加器A循环左移一位,最高SEO靠我位移入最低位
累加器A带进位循环左移指令:RLC A 功能:累加器A的最高位移入CY,CY移入最低位
累加器A循环右移指令:RR A 功能:累加器A循环右移一位,最低位移入最高位
累加器A带进位循环右移指令SEO靠我:RRC A 功能:累加器A的最低位移入CY,CY移入最高位
ANL 目的操作数,源操作数; 功能:源操作数和目的操作数相与将结果放入源操作数
ANL A,#20H ;(A)和20H进行与操SEO靠我作,结果放入A中 ANL 20H,A ;(20H)和(A)进行与操作,结果放入20H单元格中 ANL 20H,#69H;(20H)与69H进行与操作,结果放入20H单元SEO靠我格中ORL 目的操作数,源操作数; 功能:源操作数和目的操作数相或将结果放入源操作数
XRL 目的操作数,源操作数; 功能:源操作数和目的操作数异或将结果放入源操作数
位清零:CLR bit
置位: SETB bit
位SEO靠我取反: CPL bit
位逻辑与运算:ANL C,bit 功能:C与指定位bit相与,结果送入C中
位逻辑或运算:ORL C,bit 功能:C与指定位bit相或,结果送入C中
注:位逻辑运算只能用SEO靠我累加器C(CY)作为目的操作数
转移指令: AJMP addr11(LABEL) 转移范围:上下2KB
长转移指令:LJMP addr16(LABEL) 转移范围:上下64KB
短转移SEO靠我指令:SJMP addr8(LABEL) 转移范围:上方最远128B,下方最远127B
间接转移指令:JMP @A+DPTR
注:LABEL代表标号
指令:JZ rel(LABEL) 功能:累加器SEO靠我A的内容为0转移到目标地址,不为0顺序执行
指令:JNZ rel(LABEL) 功能:
累加器A的内容为1转移到目标地址,为0顺序执行
指令:JC rel(LABEL) 功能:累加器C的内容为1转移到目标地址,SEO靠我为0顺序执行指令:JNC rel(LABEL) 功能:累加器C的内容为0转移到目标地址,为1顺序执行
指令:JB bit,rel(LABEL) 功能:bit的内容为1转移到目标地址,为0顺序执行
指令:JNSEO靠我B bit,rel(LABEL)功能:bit的内容为0转移到目标地址,为1顺序执行
指令:JBC bit,rel(LABEL) 功能:bit的内容为1转移到目标地址并且bit置0,为0顺序执行
指令:CJNSEO靠我E A,direct,rel(LABEL)
指令:CJNE A,#data,rel(LABEL)
指令:CJNE Rn,#data,rel(LABEL)
指令:CJNE @Ri,#data,rel(LABESEO靠我L)
功能:两数进行比较,目的操作数大于源操作数跳转并且CY置0,目的操作数小于源操作数跳转并且CY置1,两数相等则顺序执行
指令:DJNZ Rn ,rel(LABEL)
指令:DJNZ direct SEO靠我,rel(LABEL)
功能:目的操作数自减1,结果不为0跳转,结果为0顺序执行
注:rel代表偏移量,最大偏移为-128~127,LABEL代表标号
长调用指令:LCALL addrSEO靠我16指令转移范围:64KB,整个ROM空间
短调用指令:ACALL addr11 指令转移范围:2KB
子程序返回指令:RET 功能:子程序最后一条指令RET,子程序结束标志
中断返回指令:RETI 功能:中断SEO靠我程序最后一条指令RETI,中断程序结束标志
NOP 此指令执行时间为1个机器周期
功能:常用来产生一个机器周期时间的延迟
ORG xxxxH
功能:设置程序从程序存储器的xxxxH单元开始存放。
注:在汇编语言中ORG可多次定义,但规SEO靠我定的地址由小到大安排,各段地址不允许重叠
ORG 0000H ;当单片机上电时,从0000H开始执行命令,0000H装入了跳转到MAIN的指令 LJMP MAIN ;0000H地址装入此SEO靠我命令 ORG 0030H ;主程序从0030H开始,避免与中断程序发生冲突 MAIN:SETB P1.1;0030H地址中装入此命令变量代号 EQU SEO靠我数值
功能:用来给变量代号赋值,这个值可能是单元地址或立即数。
注:在同一个源程序中,任何一个变量代号只能赋值一次
LEN EQU 20;在程序变量中 LEN 代表20 Xdata EQU SEO靠我4F8BH ;程序中变量Xdata的值为4F8BH[单元地址代号:] DB data
功能:用来说明ROM内容是一个字节的常数data,可定义一个或多个单元为常数
;;;SEO靠我可定义在ORG之后;;; ORG 1000H TABLE: DB 30H,63H,0DH;;;可定义在源程序末尾;;; ;;;将TABLE中第一个数送入SEO靠我R2中;;; ORG 0030H MAIN:MOV DPTR, #TABLE;MOV R2,#00HMOV A,R2;MOV A,@A+TABLE;MOV R2,A; SEO靠我 TABLE: DB 30H,63H,0DH[单元地址代号:] DW data16
功能:用来说明ROM内容是两个字节的常数data16,使用方法与DBSEO靠我类似
变量代号 BIT 位地址
功能:把位地址赋予指定的变量代号
LED BIT P1.0;用LED替代P1.0位地址END
功能:告知编译系统,源程序到此结束SEO靠我。
注:一个程序中,只允许出现一条END伪指令且必须安排在源程序的结尾
网站备案号:浙ICP备17034767号-2