




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 51系列单片机的 指令系统,计算机通过执行程序完成人们指定的任务 程序由一条一条指令构成 能为CPU识别并执行的指令的集合就是该CPU的指令系统。,MCS-51单片机汇编语言指令格式: 标号:操作符 目的操作数,源操作数 ;注释,操作符:指明该指令完成什么操作 操作数:指明该指令的操作对象 目的操作数:存放结果 标号:指令地址的标志符号,也称符号地址 指令中操作数提供的方式称为 寻址方式,3.1 MCS-51单片机的指令格式,3.2 寻址方式 3.2.1 立即寻址 指令中直接给出操作数的寻址方式。 立即寻址中的数,称为立即数。 用前面加 “#“号的8位数(#data、#30H)或16位
2、数(#data16、#2052H)表示。 例如:MOV A,#30H,3.2.2 直接寻址 操作数的地址直接出现在指令中。 寻址对象: 内部数据存贮器:使用其地址 特殊功能寄存器:使用其地址/该寄存器名,例:MOV A,40H A=56H,MOV 40H,41H 内部RAM (41H)(40H) (40H)=(41H)=78H,MOV P0,#45H 45HP0 P0为直接寻址的 SFR,其地址为 80H,,3.2.3 寄存器寻址 以部分寄存器的内容为操作数。 寻址对象:A,B,DPTR,R0R7 B 仅在乘除法指令中为寄存器寻址,其他指令中为直接寻址。 A 可以寄存器寻址又可以直接寻址,直接
3、寻址时写作ACC,例: MOV A,R0 ;R0A, A、R0均为寄存器寻址 ADD A, ACC ;ACC+A A, A为寄存器寻址 ACC为直接寻址 MOV B,R0 ;R0B, R0寄存器寻址,B直接寻址 MUL AB ;A*BBA, A、B为寄存器寻址,3.2.4 寄存器间接寻址() 以寄存器中内容为地址的存储单元中的内容为操作数 。 寻址对象: 内部数据存储器( 128B) MOV 外部数据存储器( 64 K) MOVX R0、R1、DPTR、P2R0、P2R1,例: MOV R0,#20H MOV R0,A ; A(20H) 地址的内部RAM MOVX A,R1 ; 外部RAM(地
4、址为P2 R1 )的 内容A MOVX DPTR,A ; A以DPTR内容为地址的外部RAM,3.2.5 变址寻址 以DPTR/PC寄存器内容为基地址,和A的内容相加,形成操作数的地址。 即以 A+DPTR/PC 为地址。 例: MOVC A, A+DPTR MOVC A, A+PC,3.2.6 相对寻址 将PC当前值与指令第二字节给出的偏移量相加,形成转移的目标地址(新PC值 )。 例: SJMP 08H,3.2.7 位寻址 寻址对象:片内RAM中(20H2FH)的128个位地址 SFR中可位寻址的位地址 例: MOV C,20H ; 20H位的内容送CY标志位 MOV A,20H ; 将内
5、部 RAM中20H单元的内容送给A 指令是位寻址还是字节寻址,根据两操作数类型一致原则,由另一操作数决定。,指令中的常用符号: #data 8位立即数,可以为二进制、 十进制、 十六进制或者字符; #data1616位立即数; direct 8 位直接字节地址(片内 RAM 和 SFR地址 ); Rn n = (0 7),当前工作寄存器R0 R7中的一个; Ri i = (0、1),当前工作寄存器R0或R1;,3.3 MCS-51系列单片机的指令系统,addr16 16位地址值; addr11 11位地址值; rel 相对偏移量,(为一个字节的补码); bit 位地址; $ 表示当前指令的首地
6、址; ()在注释中使用,用于表示存储单元中的内容。,3.3.1 数据传送与交换指令,dir,Ri,Rn,#data,A,MOV A ,Rn #data dir Ri,MOV dir ,A Rn, Ri #data dir,MOV Rn ,MOV Ri,A dir #data,一、内部RAM、SFR之间的传送MOV指令,A dir #data,例1: R1=20H,(20H)=55H, MOV A,R1 执行后,A=55H。 例2:(40H)=30H, MOV R7,40H 执行后,R7=30H。 例3: 编程将R3的内容送R1。 MOV A, R3 MOV R1, A,A,外部数据 存储器,程
7、序 存储器,Ri , A DPTR , A A , Ri A , DPTR,MOVX,MOVC,A , A+PC A , A+DPTR,二、外部存储器和A累加器之间的传送MOVX,MOVX,MOVC,MOVX指令举例例: 实现片外数据存储器数据传送 (2000H)(2100H)。,MOV DPTR,#2000H MOVX A,DPTR MOV DPTR,#2100H MOVX DPTR,A,; DPTR= 2000H,; DPTR= 2100H,; A X,;(2100H) X,x,片外数据存储器不能直接寻址。下列为非法指令: MOVX A,2000H MOVX 2100H,2000H ,使用
8、P2口和8位寄存器Ri间址: MOV P2,#20H;高位地址 MOV R0,#00;低位地址 MOVX A,R0;读片外RAM MOV P2,#21H;改变高位地址 MOVX R0,A;写片外RAM,三、程序存储器读写指令MOVC 注:只能从程序存储器读取数据到A累加器。 只能使用变址间接寻址方式 多用于查常数表程序,直接求取常数表中的函数值,1)DPTR为基址寄存器 MOVC A,A+DPTR ;A(A+DPTR) 查表范围为 64KB 程序存储器任意空间。,2)PC为基址寄存器 MOVC A,A+PC;A (A+PC) 常数表只能在查表指令后 256B 范围内。,例:片内 RAM 20H
9、单元中存储了数字X(0 X 9),试编程将X2存入片内 RAM 21H单元。已知ROM自1010H开始的10个单元中依次存储了09的平方值(平方表)。,方法1:采用DPTR作为基址寄存器 MOV DPTR,#1010H ; 确定表首地址, ;DPTR = 1010H MOV A,20H ; 取 X到A中 MOVC A,A+DPTR ; 访问程序存储器, ;求 X2 MOV 21H,A ; 保存结果,方法2:采用PC作为基址寄存器,假定下面程序段存储于ROM内1000H开始的单元中。 MOV A,20H ;取X到A中 ADD A,#5H ;修正偏移量,本条指令 ;的首地址为1002H MOVC
10、A,A+PC ;本指令首地址为1004H ;当前PC=1005H MOV 21H,A ;保存结果,本条指令的 ;首地址应为1005H,四、数据交换指令 实现片内RAM区的数据双向传送,1. 字节交换指令 XCH A,Rn ;ARn XCH A,Ri;A(Ri) XCH A,dir ;A dir,习题 将片内RAM 60H单元与 61H单元的数据交换,例:设A= 29H,(2AH ) 38H ,执行指令 XCH A,2AH 后, A= ?,(2AH)= ?,38H,29H,XCH 60H,61H 对吗?,2. 半字节交换指令,XCHD A,Ri ;A03 (Ri)03 SWAP A ;A47A0
11、3,A,A,例:将片内 RAM 的2AH和 2BH单元中的 ASCII码(30H39H范围内)转换成压缩式 BCD码存入 20H单元,数字 09的ASCII码30H39H,85H,08,例 将片内RAM 2AH和 2BH单元中的ASCII码(30H39H范围内)转换成压缩式BCD码存入 20H单元,MOV A,#00H ;A=00 MOV R0,#2AH,85H,R1,R0,习题:交换片内RAM 40H单元和 41H单元的低半字节,0,0,MOVR1,#2BH,XCHD A,R0,SWAP A,XCHD A,R1,XCHA,20H,;低4位交换A=08,; A=80H,; 低4位交换,;(20
12、H)=85H,3 8,0 0,A,3 5,8 0,8 5,R1,R0,3 0,3 0,五、堆栈操作指令 入栈指令:PUSH dir ;SPSP+1,(SP) (dir ),例:设 A=02H,B=56H,执行下列指令序列后,SP = ?A = ? ,B = ?,SBR:MOV SP,#30H PUSH A PUSH B MOV A,#00H MOV B,#01H POP B POP A RET,;设栈底,;保护现场,;恢复现场,出栈指令:POP dir ;(dir )(SP),SPSP-1, SP 02 , SP 56 02 , 56 SP 02 , 56 02 SP , SP ,堆栈操作示意
13、:,ADD ADDC SUBB ANL ORL XRL,A ,Rn, Ri #data dir,加 进位加 借位减 与 或 异或,以A为目的操作数的算术、逻辑运算指令(24条),3.3.2-3.3.3 算术运算与逻辑运算指令,以dir为目的操作数逻辑运算指令(6条),与 ANL 或 ORL 异或 XRL,逻辑运算按位进行。 逻辑指令常用于对数据位进行加工。,例:A=0FH, 执行 ORL A,#86H A8FH,例:A=0FH, 执行 XRL A,#86H A89H,INC,减 1 指令:,DEC,加 1 指令:,加/减1指令,十进制调整指令 DA A ;将A中二进制相加结果调整成BCD码 指
14、令根据相加和及标志自行判断,应紧跟在加指令后,(或在加指令和该指令之间不能有影响标志的指令)。 DA A 只对一个字节调整,多字节相加则须多次调整。 此指令不能对减法结果进行调整。,例 完成56+17的编程。 MOV A,#56H ;A存放BCD码56H MOV B,#17H ;B存放BCD码17H ADD A, B ;A=6dH DA A ;A=73H SJMP $,乘除法指令 乘法指令 MUL AB ;A *B BA 除法指令 DIV AB ;A/B,商在A中,余数B中,专对 A 的指令 A取反: CPL A ;A A A清零: CLR A ;0 A,CY,CY,RR A,RL A,RLC
15、 A,RRC A,移位指令(仅对 A ),10010110,00101101,A,A,设,01001011,A,1,CY,11001011,A,0,00101101,A,1,CY,CY,*指令对标志位的影响: 1) 凡是对A 操作的指令(包括传送指令)都会影响到P标志位 即A中奇数个“1”,P=1;偶数个“1”,P=0。 2) 传送/加 1/减 1 /逻辑运算指令不影响Cy、 OV、AC 3) 加减运算指令影响标志位, 乘除指令使Cy=0,乘积 255 或除数为0时,OV=1 4) 对Cy进行操作的指令和大环移指令,会影响Cy 标志位的状态是控制转移指令的条件,因此指令对标志位的影响应该记住。
16、,例2:A= 9AH,R2= E3H,PSW= 00H,执行指令 ADDC A,R2 后求: A= ,Cy= ,OV= ,AC= ,P= PSW= ?,1001 1010 1110 0011 + 0 1 0111 1101,7DH 1 1 0 0,10000100 = 84H,3.3.4 控制转移指令,功能:改变指令执行顺序,转到指示的新PC地址执行 无条件转移: 无需判断就转移到目的地址。 条件转移: 判断标志位是否满足条件,满足条件就转移到目的地址,否则顺序执行。 绝对转移: 用绝对地址指示转移目的地址,通常为无条件转移。 相对转移: 用相对于当前PC的偏差(偏移量)指示转移目的地址,通常
17、为条件转移。 长转移或长调用:目的地址距当前PC 64KB地址范围。 短转移或短调用:目的地址距当前PC 2KB地址范围。,一、无条件转移指令 (1)长转移 LJMP addr16 ;addr16PC015 64KB程序存储空间的全范围转移指令。 本指令为3字节指令。,(2)短转移 AJMP addr11 ;addr11PC010 转移范围:本指令为2KB地址范围内的转移指令。 本指令为2字节指令。,(3)无条件相对转移 SJMP rel ;PC+relPC, 即As2relPC,机器码为80 rel As 为本指令的首地址 该指令为2字节指令 执行本指令时 当前PCAs+2 rel 为转移的
18、偏移量,(4)间接转移 JMP A+DPTR ;A+DPTRPC 例: A=02H,DPTR=2000H, JMP A+DPTR 指令执行后, PC=2002H 即程序转移到2002H地址单元去执行。,例: MOV DPTR,#TABLE JMP A+DPTR TABLE: AJMP PROC0 AJMP PROC1 AJMP PROC2 AJMP PROC3 当A=00H时,转入地址 PROC0 处执行; 当A=02H时,转入地址 PROC1 处执行; 当A=04H时,转入地址 PROC2 处执行; ,这是一段多路转移程序,进入的路数由A确定。AJMP指令是2字节指令,所以 A 必须为偶数。
19、,二、 条件转移指令 (1)累加器为零(非零)转移 JZ rel ;A=0 则转移(As+2+relPC) JNZ rel ;A0则转移(As+2+relPC),(2)比较转移指令(不等则转) CJNE A,dir , rel CJNE A , #data , rel CJNE Rn , #data , rel CJNE Ri , #data , rel,若第一操作数 =第二 操作数, 则CY=0 若第一操作数 第二操作数, 则CY=1,(3)减 1 不等于零转移 DJNZ Rn , rel DJNZ dir , rel 本指令含自动减 1 功能,练习:阅读以下程序,判断运行后A中的结果。 M
20、OV 23H,#0AH CLR A LOOP:ADD A,23H DJNZ 23H,LOOP SJMP $ A=10+9+8+7+6+5+4+3+2+1=55=37H,例 编写程序读P1 端口信息,若不为55H,则程序等待,若为55H,程序往下顺序执行。 程序: MOV A,#55H ;A55H CJNE A,P1,$ ;P155H,则程序循环 执行本指令 实际编程中,转移目的地址不管是addr11、addr16、还是rel ,均用符号地址表示(如SJMP ABC,AJMP LOOP),转移类型通过指令操作符来决定。,三、调用和返回指令 1.长调用 LCALL addrl16 ;addr16P
21、C015 (1)指令功能 保护断点,即当前PC(本指令的下一条指令的首地址)压入堆栈。 子程序入口地址 addr16 送PC,转子程序执行。 (2)本指令为64KB地址范围内的调子程序指令。,2.短调用 ACALL addr11 ;addr11PC010 (1)指令功能 保护断点,即当前PC压入堆栈。 addrl11PC010,PC1115保持原值不变。 (2)本指令为2KB地址范围的调子程序指令,子程序入口距当前PC不得超过2KB地址范围。,例:子程序调用指令ACALL在 程序存储器中的首地址为0100H,子程序入口地址为0205H。试确定能否使用ACALL指令实现调用? 解: ACALL指
22、令首地址在 0100H, ACALL是 2字节指令, 所以下一条指令的首地址在0102H。 0102H和0250H在同一2KB地址范围内,故可用ACALL调用。,3.子程序返回指令 RET ;从调用子程序返回。 功能:从栈顶弹出断点到PC。 RETI ; 从中断服务程序返回。 功能:从栈顶弹出断点到PC,并恢复中断优先级状态触发器。,3.3.5 空操作指令 NOP 该指令经取指,译码后不进行任何操作(空操作)而转到下一条指令。 常用于生产一个机器周期的延时,或上机修改程序时作填充指令,以方便增减指令。,3.3.6 位操作指令,51单片机的特色之一:具有丰富的位处理功能,以CY为位累加器,使得开
23、关量控制系统的设计变得十分方便。 在程序中位地址的表达: 1)直接位地址表示, 如D4H。 2)“”操作符号表示, 如PSW.4,或D0H.4 3)位名称表示, 如RS1。 4)用户自定义名表示。如ABC BIT D4H,其中ABC定义为D4H位的位名,BIT为位定义伪指令。以上各例均表示PSW.4的RS1位。 位操作类指令的对象是C和直接位地址,由于C是位累加器,所以位的逻辑运算指令目的操作数只能是C。,1位清零 CLR C ;0CY CLR bit ;0bit 2位置 1 SETB C ;1CY SETB bit ; 1bit 3位取反 CPL C ; CY CY CPL bit ; bi
24、t bit,4.位与 ANL C,bit ;CY (bit)CY ANL C,/bit ;CY(bit)CY 5.位或 ORL C,bit ;CY(bit)CY ORL C,/bit ;CY(bit)CY 6. 位传送 MOV C,bit ;(bit)CY MOV bit,C ; CYbit,7. 位转移 位转移根据位的值决定转移,均为相对转移指令。 JC rel ;CY=1,则转移(As+2+relPC), 否则程序顺序执行 JNC rel ;CY=0,则转移(As+2+relPC), 否则程序顺序执行 JB bit,rel ;(bit)=1,则转移(As+3+relPC), 否则程序顺序执
25、行 JNB bit,rel ;(bit)=0,则转移(As+3+relPC), 否则程序顺序执行 JBC bit,rel ;(bit)=1,则转移(As+3+relPC), 且该位清零;否则程序顺序执行,3.4 伪指令,1. 起始指令 ORG nn 定义程序/数据块的起始地址。指示此语句后的程序/数据块以nn为起始地址,连续存放在 ROM 中。 指令地址 源程序 ORG 2000H 2000H MOV R0,#30H 2002H MOV A,R0 ,ORG 3000H 3000H TAB: DB 23H,100,A,汇编控制指令,没有指令代码,只用于汇编过程,为汇编程序提供汇编信息。,2. 汇编结束 END 指示源程序段结束,放在程序的最后。,3. 字节定义 标号: DB (字节常数、字符或表达式) 指示在程序存储器中以标号为起 始地址的单元里存放的数为字节数据。 例 LN:DB 32,C,25H,-1; LNLN+3 地址单元依次存放 20H , 43H , 25H ,FFH,4. 字定义 标号:DW (字常数或表达式) 指示在 ROM 中以标号为起始地址的单元里存放的数为字数据(即16位的二进制数) 例: GH :DW 1234H,5678H,08,5保留字节 标号:DS (数值表达式)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北海市初中数学试卷
- 豆类项目风险识别与评估综合报告
- 边坡锚杆锚索腰梁施工方案
- 浙江油田油管清洗施工方案
- 房屋地面铺装工程施工方案
- 三水装配式检查井施工方案
- “油茶+N”混交造林模式的技术创新与应用实践的效益详述
- 智能制造与供应链管理的策略及实施路径
- 数字化改造的必要性与挑战
- 变电站巡检的重要性
- 2025年日历表含农历(2025年12个月日历-每月一张A4可打印)
- 城市公园绿化养护协议
- 2025中智集团总部及下属企业公开招聘4人高频重点提升(共500题)附带答案详解
- 2024年租赁助听器合同范本
- 小学生雪豹课件
- 基于深度强化学习的机械臂自主抓取算法
- 名企参考:比亚迪组织结构及部门职责
- 神经源性肠道康复护理
- 颈椎病图解课件
- 家政人员安全知识
- 四年级全一册《劳动与技术》第一单元活动3《学习使用家用电器》课件
评论
0/150
提交评论