《【大学课件】MCS51单片机指令系统P114》由会员分享,可在线阅读,更多相关《【大学课件】MCS51单片机指令系统P114(114页珍藏版)》请在金锄头文库上搜索。
1、3.1 指令系统概述指令系统概述3.2 MCS-51指令的寻址方式指令的寻址方式3.3 MCS-51指令系统介绍指令系统介绍下页下页http:/ 一台计算机所能执行的全部的一台计算机所能执行的全部的指令集合指令集合3.1 3.1 指令系统概述指令系统概述指令指令是计算机中具有特定功能的是计算机中具有特定功能的操作命令操作命令 程序与程序设计程序与程序设计按预定要求编排的按预定要求编排的指令序列指令序列称为称为程序程序。编排的过程称。编排的过程称为为程序设计程序设计 指令系统指令系统 设计一种设计一种CPU,一般从设计指令系统开始,一般从设计指令系统开始因而,一种机器的指令系统是机器本身固有的因
2、而,一种机器的指令系统是机器本身固有的决定了机器的性能决定了机器的性能用户无法改变,必须继承、学习、掌握、应用用户无法改变,必须继承、学习、掌握、应用上页上页下页下页回目录回目录http:/ 程序设计语言程序设计语言汇编语言:汇编语言: 高级语言:高级语言:符号语言:符号语言:上页上页下页下页回目录回目录如如P55,图,图3-1所示。全是机器码所示。全是机器码http:/ (二进制代码二进制代码) ) 汇编汇编 反汇编反汇编上页上页下页下页回目录回目录MCS-51交叉交叉汇编汇编http:/ 标号:标号: 操作码操作码 操作数操作数 ;注释;注释 其中除操作码部分是必须的,括号内的区段是任选项
3、。其中除操作码部分是必须的,括号内的区段是任选项。1 1、标号、标号标号是该指令的符号地址,可根据需要设定标号是该指令的符号地址,可根据需要设定必须以字母开始,以必须以字母开始,以“ : :”结束,长度不超过结束,长度不超过8 8个字个字符符系统中的保留系统中的保留字符字符不能作标号不能作标号, 如如: SFR名、名、ADD等等标号可被其他语句的操作数直接引用标号可被其他语句的操作数直接引用源程序中源程序中, ,一个标号只能定义一个语句一个标号只能定义一个语句, ,不能相重不能相重名字名字保持一义性保持一义性上页上页下页下页回目录回目录一个汇编语句分为四个区段一个汇编语句分为四个区段操作码操作
4、码操作码操作码操作码操作码http:/ 2、操作码、操作码由指令系统的由指令系统的助记符助记符、伪指令、伪指令助记符助记符组成。组成。操作码是每一句汇编语言所必须的操作码是每一句汇编语言所必须的操作码和操作数之间用空格分开操作码和操作数之间用空格分开3 3、操作数、操作数可为二进制数可为二进制数 (B) , 十进制数十进制数 (D) ,十六进制数十六进制数 (H)数字大于数字大于9,则数字应以,则数字应以“0”开头,开头,如:如:#0AFH可以是操作数地址、立即数、标号、表达式如可以是操作数地址、立即数、标号、表达式如 M+3目的目的操作数和操作数和源源操作数之间用操作数之间用“,”分开分开可
5、以是寄存器名如可以是寄存器名如A、B、R、DPTRM标号标号被定义过的被定义过的上页上页下页下页回目录回目录BinaryDecimalHexadecimal指出该语句的操作性质指出该语句的操作性质http:/ 4、注释、注释以以“ ; ;”开头,是程序员对指令操作的解释,开头,是程序员对指令操作的解释, 以帮助阅读、理解程序的意义以帮助阅读、理解程序的意义可有可无可有可无汇编时对这部分不予处理,不译成任何机器代码汇编时对这部分不予处理,不译成任何机器代码可用英语或某种简洁的方式解释指令,或打印可用英语或某种简洁的方式解释指令,或打印 程序清单程序清单上页上页下页下页回目录回目录http:/ O
6、RG格式:格式: ORG H功能:功能:给程序给程序起始地址起始地址或数据块的或数据块的起始地址起始地址赋值赋值例:例:用法:用法: 一般出现在每段源程序或数据块的开始一般出现在每段源程序或数据块的开始一个源程序可多次出现一个源程序可多次出现ORG指令指令ORG 8000HSTART:MOV A,#74H ;源程序的起始地址源程序的起始地址为为8000H上页上页下页下页回目录回目录首地址首地址首地址首地址http:/ END格式:格式:END功能:汇编程序结束标志功能:汇编程序结束标志附在一个源程序的结尾附在一个源程序的结尾 一个源程序只能出现一次一个源程序只能出现一次END指令指令3、定义字
7、节命令、定义字节命令 DB格式:格式:功能:功能:标号:标号:DB 字节常数或字符串字节常数或字符串 (8 8位位)定义字节的内容,汇编程序把定义字节的内容,汇编程序把DB定义的定义的字节依次存入字节依次存入标号开始标号开始的存储单元的存储单元用法:用法:有定义的内存单元有定义的内存单元地址地址项或项表项或项表上页上页下页下页回目录回目录http:/ 8000HTAB: DB 45H,73,5,ATAB1:DB 101B伪指令伪指令ORG 定义了数据块定义了数据块TAB的起始地址为的起始地址为8000H伪指令伪指令DB定义了定义了8000H8003单元的内容依次为:单元的内容依次为:(8000
8、H)= 45H(8001H)= 49H(8002H)= 35H(8003H)= 41H(8004H)= 05HTABTAB1(1) 由由 ORG定义定义(2) 跟在其他源程序之后跟在其他源程序之后上页上页下页下页回目录回目录http:/ 字或字表字或字表定义若干个字(双字节)定义若干个字(双字节)例:例:ORG 8000HTAB:DW 7234H,8AH,10(8000H)= 72H(8001H)= 34H(8002H)= 00H(8003H)= 8AH(8005H)= 0AH汇编后:汇编后:(8004H)= 00H上页上页下页下页回目录回目录按顺序存放!http:/ DS格式:格式:功能:功
9、能:标号:标号:DS 数据或字符数据或字符及及表达式表达式例:例:(8008H)=30H(8009H)=8AH从指定单元地址开始,由数据或字符及从指定单元地址开始,由数据或字符及表达式的值来定义应保留的单元数表达式的值来定义应保留的单元数, ,备用备用ORG 8000HDS 08HDB 30H,8AH即:即:8000H8007H单元保留备用单元保留备用定义定义空间空间上页上页下页下页回目录回目录http:/ EQU格式:格式: 字符名称字符名称 EQU 数据或汇编符号数据或汇编符号功能:功能:将一个数据或汇编符号赋予标号段规定将一个数据或汇编符号赋予标号段规定的字符名称的字符名称例:例:ORG
10、 8000H AA EQU R6MOV A,AA;AA与与R6等值等值;A (R6)上页上页下页下页回目录回目录http:/ : A10 EQU 10DELY EQU 07EBH MOV A,A10 LCALL DELY;A10 = 10;DELY = 07EBH;转向入口地址;转向入口地址 07EBH使用使用EQU指令,须先赋值后使用,不能反之指令,须先赋值后使用,不能反之上页上页下页下页回目录回目录http:/ DATA格式:格式:字符名称字符名称 DATA 数据或表达式数据或表达式功能:功能:此命令把数据此命令把数据/ /代码地址赋予标号段所规定的代码地址赋予标号段所规定的字符名称。定义
11、的字符名称字符名称。定义的字符名称可可先使用后定义先使用后定义INDEXJ DATA 8389HORG 8000HINDEXJ DATA 8096H LJMP INDEXJENDORG 8000H LJMP 8096HEND;INDEXJ这个字符名称的地址为这个字符名称的地址为8389H例:例:上页上页下页下页回目录回目录等等价价于于http:/ EQU与与 DATA的区别的区别(1) DATA与与EQU相似,但相似,但DATA定义的字符名称定义的字符名称, 可先使用后定义可先使用后定义 ,EQU则不能则不能(2) EQU指令可把汇编符号赋给字符名称,指令可把汇编符号赋给字符名称, DATA则
12、不能则不能 (3) DATA可把表达式的值赋给字符名称,可把表达式的值赋给字符名称, EQU则不能则不能 DATA常在程序中定义数据地址常在程序中定义数据地址EQU常在程序中定义字符数据常在程序中定义字符数据 上页上页下页下页回目录回目录http:/ BIT格式:格式: 字符名称字符名称 BIT 位地址位地址功能:功能:把位地址赋予标号段的字符名称把位地址赋予标号段的字符名称 A1 BIT P1.0A2 BIT P2.0例:例:;P1.0, P2.0赋予位地址字符名称赋予位地址字符名称 A1、A2,在编程时可以直接把,在编程时可以直接把 A1、A2 当成位地址使用当成位地址使用上页上页下页下页
13、回目录回目录http:/ ERROR,并提示行号,并提示行号显示显示 ERROR,并提示行号,并提示行号修改!修改!修改!修改!第二次扫描(第二次扫描(汇编汇编)汇编成目标代码和汇编程序汇编成目标代码和汇编程序清单清单可执行的代码(机器码)可执行的代码(机器码)http:/ 1、执行速度快,存储效率高、执行速度快,存储效率高MCS-51指令系统共有指令系统共有111条指令条指令按字节分按字节分单字节指令单字节指令4949条条双字节指令双字节指令4545条条三字节指令三字节指令1717条条按周期分按周期分单周期指令单周期指令6464条条双周期指令双周期指令4545条条四周期指令四周期指令2 2条
14、条设时钟频率为设时钟频率为12MHz,则指令执行的时间分别为:,则指令执行的时间分别为:1 s 582 s 404 s 2占居占居空间空间占居占居时间时间时时空空上页上页下页下页回目录回目录http:/ 2、指令易掌握,功能强、指令易掌握,功能强具有丰富的位操作指令、查表指令、散转指令具有丰富的位操作指令、查表指令、散转指令乘除指令等。构成了完整的指令系统乘除指令等。构成了完整的指令系统3 3、适合于控制、智能仪表、适合于控制、智能仪表布尔处理机布尔处理机布尔运算器布尔运算器ALU布尔累加器布尔累加器CY(PSW.7)布尔布尔RAM区区 共共128位位布尔布尔I/O口口P0P3口每位都可口每位
15、都可做布尔做布尔I/O口口 布尔指令子集布尔指令子集 17条布尔指令条布尔指令上页上页下页下页回目录回目录http:/ 7种)种) 立即寻址立即寻址 直接寻址直接寻址 寄存器寻址寄存器寻址 寄存器间接寻址寄存器间接寻址 基址寄存器加变址寄存器间接寻址基址寄存器加变址寄存器间接寻址 相对寻址相对寻址 位寻址位寻址上页上页下页下页回目录回目录http:/ 数据传送(数据传送(29条)条) 算术运算(算术运算(24条)条) 逻辑运算(逻辑运算(24条)条) 控制转移(控制转移(17条)条) 布尔处理(布尔处理(17条)条)共共111111条指令条指令上页上页下页下页回目录回目录http:/ - 8位
16、内部位内部RAM单元地址单元地址 00H7FH 专用特殊功能寄存器专用特殊功能寄存器SFR的地址的地址80HFFH 立即数(立即数(8位)位)#data#data16 立即数(立即数(16位)位)当前选中寄存器区中可做当前选中寄存器区中可做间址间址寄存器的寄存器的 2个工作寄存器(个工作寄存器(R0、R1)n=07i=0、1上页上页下页下页回目录回目录P61http:/ 16位目的地址,用于位目的地址,用于LCALL、LJMP指令指令 地址范围地址范围64KB ROM空间空间addr11 11位目的地址,用于位目的地址,用于ACALL、AJMP指令指令 地址范围地址范围2KB ROM空间空间r
17、elDPTR 数据地址指针,可做数据地址指针,可做16位间址寄存器位间址寄存器 bit 内内RAM或或SFR中的直接位寻址中的直接位寻址 8位带符号的偏移量,位带符号的偏移量,用于用于SJMP和所有的条件转移指令中和所有的条件转移指令中范围范围-128127上页上页下页下页回目录回目录http:/ 累加器累加器B 专用寄存器,用于专用寄存器,用于MUL和和DIV指令指令C 位累加器位累加器 ( PSW.7 ),进位,进位/借位标志借位标志 间址或基址寄存器前缀如间址或基址寄存器前缀如 Ri , A+DPTR/ 位操作的前缀,表示对该位操作数取反位操作的前缀,表示对该位操作数取反(X) X中的内
18、容中的内容((X)) 由由X寻址的单元中的内容寻址的单元中的内容箭头左边的内容被箭头右边的内容所代替箭头左边的内容被箭头右边的内容所代替DPTR , A+PC上页上页下页下页回目录回目录http:/ MCS-513.2 MCS-51指令的寻址方式指令的寻址方式指令的寻址方式指令的寻址方式用何种方式寻找指令的用何种方式寻找指令的操作数操作数或指令的或指令的执行地址执行地址1 1、立即寻址、立即寻址寻址空间:寻址空间:指令形式:指令形式:操作码操作码立即数立即数v程序存储器程序存储器v指令的操作数存放在程序存储器中指令的操作数存放在程序存储器中v操作数紧跟操作码操作数紧跟操作码OP后面后面立即寻址
19、:立即寻址:在在 哪哪 里里 ? ?用何种方式寻找用何种方式寻找OP#dataImmediate Addressing上页上页下页下页回目录回目录指令的寻址方式:指令的寻址方式:指令的寻址方式:指令的寻址方式:http:/ A,# 30H;A #30H 例例1 1:操作码操作码立即数立即数PCPCPC74H30HROMROM A30HMOV DPTR,# 8000H;DPTR #8000H 例例2 2:操作码操作码PCPCPC立即数的高立即数的高8 8位位立即数的低立即数的低8 8位位DPHDPHDPLDPLPC80H80H00H00H90H80HROMROM00H 上页上页下页下页回目录回目
20、录http:/ 2、直接寻址、直接寻址寻址空间:寻址空间:指令的三种形式:指令的三种形式:操作码操作码操作数地址操作数地址v在指令中直接给出操作数的在指令中直接给出操作数的真实地址真实地址v操作码后面操作码后面紧跟一个实际紧跟一个实际操作数地址操作数地址操作码操作码操作数地址操作数地址立即数立即数操作码操作码源操作数地址源操作数地址目的操作数地址目的操作数地址内内RAM的低的低128字节字节特殊功能寄存器特殊功能寄存器SFR区区直接寻址直接寻址直接寻址是访问直接寻址是访问 SFR 的唯一方法的唯一方法Direct Addressing上页上页下页下页回目录回目录00H7FH80HFFHCPU内
21、部内部直接直接间接间接http:/ A, 30H;A (30H) 例例1 1:操作码操作码操作数地址操作数地址PCPCPCE5H30HROMROM A内内RAMRAM 30H ANL 30H,#30H;30H (30H) #30H 例例2 2:操作码操作码PCPCPC直接地址直接地址立即数立即数PC53H30HROMROM 30H 内内RAMRAM 30H ALU“结果结果”http:/ 3、寄存器寻址、寄存器寻址寻址空间:寻址空间:指令的三种形式:指令的三种形式:操作码操作码当前选定的当前选定的寄存器内容寄存器内容就是实际操作数就是实际操作数操作码操作码立即数立即数操作码操作码直接地址直接地
22、址R0R7,由,由RS0、RS1确定确定寄存器区寄存器区/4A、B、CY(位),(位),DPTR、ABMOV A,R3;A (R3) 例例1 1:ADD A,R3;A (A)+(R3)例例2 2:寄存器寻址:寄存器寻址:Register Addressing操作数操作数隐含隐含操作数显然操作数显然隐含寻址隐含寻址上页上页下页下页回目录回目录http:/ 4、寄存器间接寻址、寄存器间接寻址寻址空间:寻址空间:指令的三种形式:指令的三种形式:操作码操作码操作码操作码立即数立即数操作码操作码直接地址直接地址内部内部 RAM(R0, R1, SP)外部外部 RAM(R0, R1,DPTR)寄存器间接寻
23、址:寄存器间接寻址: 指令选定的指令选定的寄存器内容寄存器内容就是实际就是实际的的操作数地址操作数地址Register Indirect Addressing上页上页下页下页回目录回目录http:/ R0,A例例1 1:操作码操作码PCPCF6HROMROMR0R030H;累加器传送指令;累加器传送指令内内RAMRAM 30HA MOVX A,DPTR例例2 2:操作码操作码PCPCE0HROMROMDPTRDPTR 2000H外外RAMRAM 2000HA “读读”RD“读读”上页上页下页下页回目录回目录http:/ 5、基址寄存器加变址寄存器间接寻址、基址寄存器加变址寄存器间接寻址基址寄存
24、器加变址寄存器间接寻址:基址寄存器加变址寄存器间接寻址: 以以DPTR或或PC作作基址寄存器基址寄存器,A作作变址寄存器变址寄存器两者相加形成两者相加形成操作数地址操作数地址。寻址空间:寻址空间:程序存储器(程序存储器(A+DPTR、A+PC)指令形式:指令形式:操作码操作码上页上页下页下页回目录回目录http:/ A,A+DPTR例:例:操作码操作码PCPCDPTRDPTR2400HA 0FH93HROMROM 240FH240FH设(设(A)= 0FH (DPTR)= 2400H ALU“读读”PSEN“读读”MOVC A,A+DPTR上页上页下页下页回目录回目录http:/ 6、相对寻址
25、、相对寻址程序存储器程序存储器寻址空间:寻址空间:指令的三种形式:指令的三种形式:操作码操作码 rel rel操作码操作码 直接地址直接地址 rel rel操作码操作码 立即数立即数 rel rel相对寻址相对寻址以以当前当前PC值值为基准地址,加上指令的偏为基准地址,加上指令的偏移量移量“rel”,结果为目标地址。,结果为目标地址。rel为为有符号补码数,范围:有符号补码数,范围:-128+127一般为双字节或三字节指令一般为双字节或三字节指令Relative Addressing上页上页下页下页回目录回目录寻址指令寻址指令执行地址执行地址目标地址目标地址http:/ rel例:例:; 累加
26、器累加器A不等零则转移不等零则转移 设设:rel=23H2025H2002H2001H2000H ROM70H70H23H23H下一条指令下一条指令. . . . . . . .操作码操作码PCPCPC(PC)=2002Hrel=23H修正后转移修正后转移目标地址目标地址D(PC) = 2025HPCALU偏移量偏移量上页上页下页下页回目录回目录(PC) = 2 0 0 2 HRel = 2 3 H)005202HD =http:/ ROMDFHDFHF2HF2H下一条指令下一条指令. . . . . . . .操作码操作码PCPCPC(PC)=2112Hrel=F2H修正后转移修正后转移目标
27、地址目标地址 D(PC) = 2104HALU偏移量偏移量上页上页下页下页回目录回目录例:例:DJNZ R7,rel ;(;(R7) 1不为不为“0”则转则转PC2104H指指 令令(PC) = 2 1 1 2 HRel = F 2 H)FF4012HD =http:/ 7、位寻址、位寻址寻址空间:寻址空间: 片内片内RAM的的20H2FH字节地址字节地址位地址:位地址:00H7FH 请参看请参看图图2-15 共共128位位SFR中中12个能被个能被8整除的字节地址整除的字节地址位地址请参看位地址请参看 图图2-16 共共93位位Bit Addressing 以访问触发器的方式,对内部以访问触
28、发器的方式,对内部RAM、SFR的的位地址空间位地址空间进行访问,称为位寻址。位地址进行访问,称为位寻址。位地址用于布尔指令。用于布尔指令。共共221位位上页上页下页下页回目录回目录请参看请参看 P43专为布尔指令设计专为布尔指令设计http:/ R1, SP R0, R1 ,DPTR片内片内RAM、片外片外RAM与与I/O口口立即数立即数#data 程序存储器程序存储器程序存储器程序存储器基址加变址基址加变址A+DPTR,A+PC程序存储器程序存储器相对寻址相对寻址PC+rel位寻址位寻址片内片内RAM 20H2FH部分部分SFRbit利用的变量利用的变量 使用的空间使用的空间方方 式式上页
29、上页下页下页回目录回目录P67http:/ 指令系统指令系统3.3.0 指令分类指令分类 按指令的功能, MCS -51 指令系统可分为下列 5 类: (1) 数据传送;(29条)(2) 算术运算;(24条)(3) 逻辑运算; (24条)(4) 位操作; (17条)(5) 控制转移。 (17条) http:/ 数据传送类指令数据传送类指令(29条条) 图 3 1 MCS -51传送指令示意图 http:/ 3-2 数据传送类指令一览表 http:/ 3-2 数据传送类指令一览表 http:/ 1. 数据传送到累加器数据传送到累加器A的指令的指令 MOV A, Rn MOV A, direct
30、MOV A, Ri MOV A, data 这组指令的功能是:把源操作数的内容送入累加器A。例如: MOV A, 10H, 该指令执行时将立即数 10H送入累加器A中。 注意:数据传送指令一般不影响状态标志位(PSW:CY,AC,RS1,RS0,OV,P),但累加器A中1的个数影响P位。http:/ 2. 数据传送到工作寄存器数据传送到工作寄存器Rn的指令的指令 MOV Rn, A MOV Rn, direct MOV Rn, data 这组指令的功能是: 把源操作数的内容送入当前工作寄存器区的R0R7中的某一个寄存器。指令中Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS1、RS0
31、 确定, 可以是 00H07H、08H0FH、10H17H、18H1FH。 例如: MOV R0, A, 若当前RS1、RS0 设置为 00 (即工作寄存器 0 区), 执行该指令时,将累加器A中的数据传送至工作寄存器R0(内部RAM 00H)单元中。 http:/ 数据传送到内部数据传送到内部RAM单元或特殊功能寄存器单元或特殊功能寄存器SFR的指令的指令 MOV direct, A MOV direct, Rn MOV direct, direct ; 功能较强;如:mov 02h,03h。 但MOV R2,R3在WAVE6000中通不过(mov 02h,03h可以) MOV direct
32、, Ri MOV direct, data ;如:MOV SP,#30H MOV Ri, A MOV Ri, direct MOV Ri, data MOV DPTR, data16 http:/ 1000H,33H ;MOV 1000H,2000H 都是不合法的指令。MCS-51汇编:MOV 00H,#30H;MOV 32H,39H 都是正确的。http:/ P1口当前的状态为AAH。分析下面程序的结果。 MOV R0,#70H MOV A,R0 MOV R1,A MOV B,R1 MOV R0,P1http:/ 4. 累加器累加器A与外部数据存储器之间的传送指令与外部数据存储器之间的传送指
33、令 MOVX A, DPTR ;读 MOVX A, Ri ;读 MOVX DPTR, A ;写 MOVX Ri, A ;写 注注:与外部存储器(数据或程序)或与外部存储器(数据或程序)或I/O口进行数据传口进行数据传送时送时,必须经过累加器必须经过累加器A ;当访问外部;当访问外部RAM时时, 只能使用只能使用R0、 R1及及DPTR作为地址指针。作为地址指针。http:/ 120H单元的内容传送到单元的内容传送到片外片外RAM 地址为地址为78H的单元。的单元。MOV DPTR,#0120HMOVX A,DPTRMOV R0,#78HMOVX R0,A 例:将例:将片内片内RAM 12H单元
34、的内容传送到单元的内容传送到片内片内RAM 地址为地址为78H的单元。的单元。MOV 78H,12H;外部;外部RAM送累加器送累加器A;累加器内容送外;累加器内容送外RAMhttp:/ 5. 堆栈操作指令堆栈操作指令 PUSH direct POP direct 在MCS -51 单片机的内部RAM中, 可以设定一个先进后出的区域, 称其为堆栈。在特殊功能寄存器中有一个堆栈指针SP, 它指出栈顶的位置。 进栈指令的功能是: 首先将堆栈指针SP的内容加1, 然后将直接地址所指出的内容送入SP指出的内部RAM单元; 出栈指令的功能是: 将SP所指出的内部RAM单元的内容送入由直接地址所指出的字节
35、单元, 接着将堆栈指针SP的内容减 1。 http:/ 例如: 进入中断服务子程序时, 把程序状态寄存器PSW、 累加器A、 数据指针DPTR进栈保护。设当前SP为 60H。则程序段 PUSH PSW PUSH ACC PUSH DPL PUSH DPH执行后, SP内容修改为 64H, 而61H、62H、63H、64H单元中依次栈入PSW、A、DPL、DPH的内容。当中断服务程序结束之前, 如下程序段(SP保持 64H不变) http:/ POP DPH POP DPL POP ACC POP PSW执行之后, SP内容修改为 60H, 而64H、 63H、 62H、 61H单元中的内容依次
36、弹出到DPH、DPL、A、PSW中。 MCS -51 提供一个向上升(“向向上上生生长长”)的堆栈, 因此SP设置初值时要充分考虑堆栈的深度, 要留出适当的单元空间, 满足堆栈的使用。 http:/ 6.程序存储器内容送累加器程序存储器内容送累加器 MOVC A, A+PC (PC固定) MOVC A, A+DPTR (DPTR可变) 这是两条很有用的查表指令, 可用来查找存放在外部程序存储器中的常数表格。第一条指令是以PC作为基址寄存器, A的内容作为无符号数和 PC的内容 ( 下一条指令的起始地址)相加后得到一个 16 位的地址, 并将该地址指出的程序存储器单元的内容送到累加器A。 这条指
37、令的优点是不改变特殊功能寄存器和PC的状态, 只要根据A的内容就可以取出表格中的常数。缺点是表格只能放在该条查表指令后面的 256 个单元之中, 表格的大小受到限制, 而且表格只能被一段程序所利用。 只读只读!http:/ 第二条指令是以DPTR作为基址寄存器, 累加器A的内容作为无符号数与DPTR内容相加, 得到一个 16 位的地址, 并把该地址指出的程序存储器单元的内容送到累加器A。这条指令的执行结果只与指针DPTR及累加器A的内容有关, 与该指令存放的地址无关, 因此, 表格的大小和位置可以在 64 KB程序存储器中任意安排, 并且一个表格可以为各个程序块所共用。 http:/ MOV
38、DPTR,#TABLE MOVC A,A+DPTR ;改用MOVC A,A+PC指令行不行?为什么? XCH A,R0 (占1B空间) RET (占1B空间)TABLE:DB 0,1,4,9,16,25,36,49,64,81http:/ 7. 字节交换指令字节交换指令 XCH A, Rn XCH A, Ri XCH A, direct XCHD A, Ri ;A03 Ri03 SWAP A ; A03 A47 前三条指令是将累加器A的内容和源操作数内容相互交换; 后两条指令是半字节交换指令, 最后一条指令是将累加器A的高 4 位与低 4 位之间进行交换, 而另外一条指令是将累加器 A 的低
39、4 位内容和(Ri)所指出的内部RAM单元的低 4 位内容相互交换。 源、目的操作数进行字节交换http:/ 题题例: (A)=80H, (R7)=97H执行:XCH A , R7结果:(A)=97H, (R7)=80H例:将片内RAM 60H单元与61H单元的数据交换。 XCH 60H,61H 对吗?例:(R0)=60H, (60H)=3EH, (A)=59H执行: XCHD A, R0结果:(A) 5E H (60H)39 Hhttp:/ P1, #0FEH ; 11111110B可以使可以使P1.0上的发光二极管点亮上的发光二极管点亮MOV P1, #0F0H ; 11110000B可以
40、使可以使P1口上的上面口上的上面4个发光二极个发光二极管点亮管点亮P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 5vhttp:/ aP1.1 bP1.2 cP1.3 dP1.4 eP1.5 fP1.6 gP1.7 dp5vMOV P1, #00H ; 显示显示 8.MOV P1, #0F8H ; 显示显示 7MOV P1, #88H ; 显示显示 Ahttp:/ 一个引脚的高低电平,可以通过“光电耦合器”控制继电器,从而以“弱电”控制“强电”。http:/ 算术运算类指令算术运算类指令(24条条) (除个别(除个别INC、DEC指令指令只影响只影响P位外,其它
41、指令一般都影响标志位。)位外,其它指令一般都影响标志位。)表表 3-4 算术运算指令算术运算指令 http:/ 3-4 算术运算指令算术运算指令 http:/ 3.3 影响标志位的指令 注:表示对该标志位会产生影响,0或1表法对该标志位置0或1http:/ 3.3 影响标志位的指令http:/ 加法指令加法指令 1. 普通加法指令普通加法指令 ADD A, Rn ; A (Rn)+(A) ADD A, direct ADD A, Ri ADD A, data 注意:判断无符号数的运算结果是否正确看CY位;判断带符号数的运算结果是否正确看OV 位。http:/ +120 和 +100 之和为 2
42、20, 显然大于 127, 相加时 0 1 1 1 1 0 0 0 120(补码,78H)0 1 1 0 0 1 0 0 100 (补码,64H)1 1 0 1 1 1 0 0 220+符号位(最高位)由 0 变 1, 两个正数相加结果变负, 实际上它是和数的最高位, 符号位移入了进位标志, 此时位 6 有进位而位 7 无进位, 置位溢出标志OV, 结果溢出。 CY=0,DF=1,故OV=1溢出!http:/ 同样, 120和100 相加, 结果应为220, 显然小于128, 相加时 1 0 0 0 1 0 0 0 -120的补码1 0 0 1 1 1 0 0 -100的补码+1 0 0 1
43、0 0 1 0 0 -220的补码 符号位由1变为0, 两个负数相加结果变为正数, 这是因为符号位移入进位标志, 位 6 无进位而位 7 有进位, 置位溢出标志OV, 由此可判断结果溢出。 CY=1,DF=0,故OV=1溢出!http:/ 2. 带进位加法指令带进位加法指令 ADDC A, Rn ;A (Rn)+(A)+(C)Y ADDC A, direct ADDC A, Ri ADDC A, data 这组指令的功能与普通加法指令类似, 唯一的不同之处是, 在执行加法时, 还要将上一次进位标志Cy的内容也一起加进去, 对于标志位的影响也与普通加法指令相同。 http:/ 3. 增量指令增量
44、指令(除(除INC A影响P位外,其它不影响任何标志) INC A INC Rn INC direct INC Ri INC DPTR 最后一条指令是对16 位的数据指针寄存器DPTR执行加 1 操作, 指令执行时, 先对低 8 位指针 DPL的内容加 1, 当产生溢出时就对高 8 位指针DPH加 1, 但不影响任何标志。 http:/ 4. 十进制调整指令十进制调整指令 DA A 这条指令对累加器A参与的BCD码加法运算所获得的 8 位结果进行十进制调整, 使累加器A中的内容调整为二位压缩型 BCD码的数。使用时必须注意, 它只能跟在加法指令之后, 不能对减法指令的结果进行调整, 且其结果不
45、影响溢出标志位。 执行该指令时, 判断 A中的低4 位是否大于 9 和辅助进位标志 AC是否为“1”, 若两者有一个条件满足, 则低 4 位加 6 操作; 同样, A中的高 4 位大于 9 或进位标志 Cy为“1”两者有一个条件满足时, 高 4 位加 6 操作。例如: 有两个 BCD数 36 与 45 相加, 结果应为 BCD码 81, 程序如下: http:/ A, 36HADD A, 45HDA A 这段程序中, 第一条指令将立即数36H(BCD码36)送入累加器A; 第二条指令进行如下加法: 0 0 1 1 0 1 1 0 360 1 0 0 0 1 0 1 450 1 1 1 1 0
46、1 1 7B0 0 0 0 0 1 1 0 06+1 0 0 0 0 0 0 1 81得结果 7BH; 第三条指令对累加器 A进行十进制调整, 低 4 位(为 0BH)大于 9, 因此要加 6, 得调整的 BCD码 81。 http:/ 二、二、 减法指令减法指令 1. 带进位减法指令带进位减法指令 SUBB A, Rn ;A (A)-(Rn)-(cy) SUBB A, direct SUBB A, Ri SUBB A, data 这组指令的功能是: 将累加器A的内容与第二操作数及进位标志相减, 结果送回到累加器A中。在执行减法过程中,如果位7(D7)有借位, 则进位标志Cy置“1”, 否则清
47、“0”; 如果位 3(D3)有借位, 则辅助进位标志AC置“1”, 否则清“0”; 如位 6 有借位而位 7 没有借位, 或位 7 有借位而位 6 没有借位, 则溢出标志OV置“1”, 否则清“0”。 若若要要进进行行不不带带借借位位的的减减法法操操作作, 则必须先将则必须先将Cy清清“0”。http:/ CLR C MOV A,30HSUBB A,40HMOV 30H,AMOV A,31HSUBB A,41HMOV 31H,Ahttp:/ 2. 减减1指指令令(除DEC A影响P位外,其它不影响任何标志) DEC A DEC Rn DEC direct DEC Ri 注:没有专门的DEC D
48、PTR 指令,要实现其功能可编程实现。 http:/ 乘法指令(乘法指令(Multiplication) MUL AB ; (A)(B) 低8位A 高8位B A、B中都是无符号整数 如果积大于255,OV1,否则OV0;进位标志总是清零 Cy0。注意P91的例3-13中的:ADDC A,#0指令的用法。http:/ 除法指令(除法指令(Division) DIV AB ; (A)(B) 商 A 余数B A、B中都是无符号整数 如果除数B为“0”,OV1,否则OV0;进位标志总是清零 Cy0。http:/ 逻辑运算指令逻辑运算指令除带进位的循环指令除带进位的循环指令RRC、RLC对标志位有影对标
49、志位有影响外,其它指令不影响标志位。响外,其它指令不影响标志位。http:/ 简单逻辑操作指令简单逻辑操作指令 CLR A ; A “0” CPL A ; A A SWAP A ; A03 A47例例: (A)=3AH, CPL A, (A)=0C5H 0011 1010B 1100 0101B (A)=3AH, SWAP A, (A)=0A3H 注:注:指令指令SWAP,也可看成一个,也可看成一个4位循环移位指令,位循环移位指令,不影响标志位。不影响标志位。http:/ 循环指令循环指令 (1)、左循环指令左循环指令 (Rotate Accumulator Left) RL A ;左移左移1
50、位位 例例 (A)6CH = 0110 1100B RL A (A)=1101 1000B=0D8Ha7 a0 Chttp:/ Accumulator Left through Carry flag) RLC A ;左移左移1位位,对标志位对标志位CY有影响有影响 例例(A)6CH = 0110 1100B, (C) =1 RLC A (A)=1101 1001B=0D9H, (C) =0a7 a0 Chttp:/ (3)、右循环指令()、右循环指令(Rotate Accumulator Right) RR A ;右移右移1位位例例(A)6CH = 0110 1100B RR A (A)=00
51、11 0110B=36Ha7 a0 Chttp:/ A Right with C)RRC A ;右移右移1位位,对标志位对标志位CY有影响有影响例例(A)6CH = 0110 1100B, (C) =1 RRC A (A)=1011 0110B=0B6H, (C)=0a7 a0 C 这组指令除了带进位标志位的移位指令外这组指令除了带进位标志位的移位指令外,其它都不影响其它都不影响Cy, AC, OV等标志。等标志。 http:/ 逻辑与指令逻辑与指令ANL A, Rn ANL A, direct ANL A, dataANL A, RiANL direct, AANL direct, data
52、 “与与” , “有有0即即0,全,全1为为1” 0000 0111 ) 1111 1101 0000 0101 B 05HX0=0;X1=XXX=Xhttp:/ 逻辑或指令逻辑或指令ORL A, Rn ORL A, direct ORL A, dataORL A, RiORL direct, AORL direct, data “或或” , “有有1即即1,全,全0为为0” 0000 0110 ) 0110 1101 0110 1111 B 6FHX0=X;X1=1XX=Xhttp:/ 逻辑异或指令逻辑异或指令XRL A, Rn XRL A, direct XRL A, dataXRL A,
53、 RiXRL direct, AXRL direct, data “异或异或” , “相异为相异为1,相同为,相同为0” 0000 0110 )0110 1101 0110 1011 B 6BHX 0=X X 1=XX X=0http:/ ( A)=01B,表示随机状态,为表示随机状态,为1或或0,执行下述,执行下述一组指令执行后一组指令执行后A的值如何的值如何? XRL A,#0C0H;将累加器;将累加器A的内容的内容D7、D6取反取反 0 1 ORL A,#03H;将累加器;将累加器A的内容的内容D1、D0置置1 1 1 0 0 0 0 0 0 (C0H) ANL A,#0E7H;将累加器
54、;将累加器A的内容的内容D4、D3清清0 1 0 0 0 0 0 0 0 1 1 (03H) 1 0 1 1 1 1 1 0 0 1 1 1 (E7H) 1 0 0 0 1 1 解解 :执行上述指令后,(:执行上述指令后,(A)=100011B。习题习题1:如何将累加器如何将累加器A中的数据高中的数据高4位清位清0,低位不变?,低位不变? 习题习题2:如何将寄存器如何将寄存器R2中的数据奇数位取反,偶数位不变?中的数据奇数位取反,偶数位不变?1、ANL A,#0FH2、XRL R2,#10101010Bhttp:/ 控制转移指令控制转移指令(17条条)单片机有一定的智能作用,主要是控制单片机有
55、一定的智能作用,主要是控制转移类指令的功劳。由于该类指令用于转移类指令的功劳。由于该类指令用于控制程序的走向,所以其作用必然是在控制程序的走向,所以其作用必然是在程序存贮器的空间内。程序存贮器的空间内。http:/ 3-7 控控 制制 转转 移移 指指 令令 http:/ 无条件转移指令无条件转移指令 1. (绝对绝对)短跳转指令短跳转指令(2字节指令字节指令) AJMP addr11 ; PCaddr11,跳跳转转范范围围2k (211=2K) 这这是是2KB范范围围内内的的无无条条件件跳跳转转指指令令, 执执行行该该指指令令时时, 先先将将PC+2(因因该该指指令令是是2个个字字节节的的指
56、指令令), 然然后后将将addr11送送入入PC10PC0, 而而PC15PC11保保持持不不变变。 这这样样得得到到跳跳转转的的目目的的地地址址。需需要要注注意意的的是是, 目目标标地地址址与与AJMP后面一条指令的第一个字节必须在同一个后面一条指令的第一个字节必须在同一个 2 KB区域的存储器区内。区域的存储器区内。 例例:判断下列指令是否正确判断下列指令是否正确? (1)、地址)、地址 指令指令 0345H AJMP 0123H (2)、)、2567H AJMP 29ABH(1).(PC+2)=0347H 二进制码为:二进制码为:0000 0011 0100 0111B 0123H 二进
57、制码为:二进制码为:0000 0001 0010 0011B(2).(PC+2)=2569H 二进制码为:二进制码为:0010 0101 0110 1001B 29ABH 二进制码为:二进制码为:0010 1001 1010 1011B解解:http:/ 长跳转指令长跳转指令(3字节指令字节指令) LJMP addr16; PCaddr16,跳转范围,跳转范围64k 执行该指令时, 将 16 位目标地址addr16 装入PC, 程序无条件转向指定的目标地址。转移的目标地址可以在 64 KB程序存储器地址空间的任何地方, 不影响任何标志。 3. 散转指令散转指令(间接跳转指令) (1字节指令字节
58、指令) JMP A+DPTR ;PC(A)(DPTR) 执行该指令时, 把累加器 A中的8 位无符号数与数据指针中的 16 位数相加, 结果作为下条指令的地址送入PC, 不改变累加器A和数据指针DPTR的内容, 也不影响标志。 利用这条指令能实现程序的散转。 http:/ 4. 相对转移指令(与转移指令所在的位置有关)相对转移指令(与转移指令所在的位置有关) (2字节指令字节指令) SJMP rel ;PC(PC)+2 , PC(PC)+rel 执执行行该该指指令令时时, 先先将将 PC+2, 再再把把指指令令中中带带符符号号的的偏偏移移量量加加到到PC上上, 得得到到跳转的目标地址送入跳转的
59、目标地址送入PC。 rel机器码的相对偏移量,为机器码的相对偏移量,为8位补码位补码 , 转移范围:前转移范围:前128后后127字节。字节。 rel(目的地址转移指令地址转移指令字节数)(目的地址转移指令地址转移指令字节数)补补 (目的地址(目的地址PC当前值)当前值)补补。注:编程时注:编程时,可用标号代替转移目的地址可用标号代替转移目的地址,rel 交给编译程序计算交给编译程序计算,注注意转移范围。意转移范围。例例(1): SJMP NEXT (或(或AJMP NEXT ,SJMP NEXT) NEXT: 例例(2):原地踏步指令的指令原地踏步指令的指令:HERE: SJMP HERE常
60、写成:常写成: SJMP $ ;($地址计算器的值地址计算器的值,为正在汇编的指令的地址为正在汇编的指令的地址)http:/ 二、二、 条件转移指令条件转移指令 JZ rel; (A)= 0 转移转移 JNZ rel; (A)0 转移转移 这这类类指指令令是是依依据据累累加加器器A的的内内容容是是否否为为 0 的的条条件件转转移移指指令令。条条件件满满足足时时转转移移(相相当当于于一一条条相相对对转转移移指指令令), 条条件件不不满满足足时时则则顺顺序序执执行行下下面面一一条条指指令令。转转移移的的目目标标地地址址在在以以下下一一条条指指令令的的起起始始地地址址为为中中心心的的 256 个个字
61、字节节范范围围之之内内(128 +127)。当当条条件件满满足足时时, PC(PC)+N+rel, 其其中中(PC)为为该该条条件件转转移移指指令令的的第第一一个个字字节节的的地地址址, N为为该该转转移移指指令令的的字字节节数(长度)数(长度), 本转移指令本转移指令N=2。注注:编程时,可用标号代替转移目的地址。编程时,可用标号代替转移目的地址。 如:如:JZ LOOPhttp:/ 三、三、 比较转移指令比较转移指令 在在MCS - 51 中中没没有有专专门门的的比比较较指指令令, 但但提提供供了了下下面面 4 条条比比较较不不相相等等转转移指令移指令: CJNE A, direct, r
62、elCJNE A, data, rel ; (A)=#data,继续, C0 (A)#data, 转 , C0 (A)#data, 转 , C1 特点: (A)只有 #data时, C1CJNE Rn, data, relCJNE Ri, data, rel 这这组组指指令令的的功功能能是是: 比比较较前前面面两两个个操操作作数数的的大大小小, 如如果果它它们们的的值值不不相相等等则则转转移移。转转移移地地址址的的计计算算方方法法与与上上述述两两条条指指令令相相同同。如如果果第第一一个个操操作作数数(无无符符号号整整数数)小小于于第第二二个个操操作作数数, 则则进进位位标标志志Cy置置“1”,
63、 否否则则清清“0”, 但不影响任何操作数的内容。如:但不影响任何操作数的内容。如:CJNE A,#78H,LOOP 做减法运算做减法运算注意:注意:该指令本质上是做减法运算,但不影响原来操作数的值。该指令本质上是做减法运算,但不影响原来操作数的值。http:/ 四、四、 减减 1不为不为 0转移指令转移指令DJNZ Rn, relDJNZ direct, rel ;运行后对原来的操作数有影响。 这两条指令把源操作数减 1, 结果回送到源操作数中去, 如果结果不为 0 则转移(转移地址的计算方法同前)。 例:延时子程序 delay: MOV R7, #03H ;1T delay0: MOV R
64、6, #19H ;1T delay1: DJNZ R6, delay1 ;2T DJNZ R7, delay0 ;2T RET ;2T http:/ 地址地址 机器码机器码 源程序源程序 注释注释 ORG 0000H ; 整个程序起始地址整个程序起始地址0000 02 00 30 LJMP MAIN ; 跳向主程序跳向主程序 ORG 0030H ; 主程序起始地址主程序起始地址0030 C3 MAIN: CLR C ; MAIN为程序标号为程序标号0031 E6 LOOP: MOV A , R00032 37 ADDC A, R10033 08 INC R00034 D9 FB DJNZ R1
65、, LOOP ;相对转移;相对转移0036 80 02 SJMP NEXT0038 78 03 MOV R0, #03H003A 18 NEXT: DEC R0003B 80 FE SJMP $ ;HERE: SJMP HERE END ; 结束标记结束标记偏移量的计算偏移量的计算http:/ 五、五、 调用及返回指令调用及返回指令(保护断点与恢复,自动完成)(保护断点与恢复,自动完成) 在程序设计中, 通常把具有一定功能的公用程序段编制成子程序, 当主程序需要使用子程序时用调用指令, 而在子程序的最后安排一条子程序返回指令,以便执行完子程序后能返回主程序继续执行。 子子程程序序调调用用指指令
66、令(LCALL、ACALL)一一定定在在主主程程序序中中,子程序返回指令子程序返回指令RET一定在子程序中。一定在子程序中。http:/ 绝对调用指令绝对调用指令(保护断点,保护断点,2字节指令字节指令) ACALL addr11 这这是是一一条条2KB范范围围内内的的子子程程序序调调用用指指令令。所所用用的的子子程程序序的的入入口口地地址址必必须须与与 ACALL下下面面一一条条指指令令的的第第一一个个字字节节在在同一个同一个 2 KB区域的存储器区内。区域的存储器区内。(PC) (PC)+2(SP) (SP)+1 (SP) (PC07)(SP) (SP)+1 (SP) (PC815) (P
67、C) addr010 (PC1115)保持不变保持不变低8位先入,高8位后入http:/ 2. 长调用指令长调用指令 LCALL addr16(3字节指令) 这条指令无条件调用位于 16 位地址addr16的子程序。执行该指令时,先将PC+3以获得下一条指令的首地址, 并把它压入堆栈(先低字节后高字节), SP内容加 2, 然后将 16 位地址放入 PC中, 转去执行以该地址为入口的程序。 LCALL指令可以调用 64 KB范围内任何地方的子程序。指令执行后不影响任何标志。 低8位先入,高8位后入http:/ 3. 子程序返回指令子程序返回指令(恢复断点) RET 这条指令的功能是: 恢复断点
68、, 将调用子程序时压入堆栈的下一条指令的首地址取出送入PC, 使程序返回主程序继续执行。 4. 中断返回指令中断返回指令 RETI ; 这条指令的功能与RET指令相似, 不同的是它还要清除MCS -51 单片机中断响应时所置位的优先级状态触发器。 5. NOP空空操操作作指指令令:不进行任何操作,占用1个机器周期,然后继续执行下一条指令。( PC815 ) (SP)(SP) (SP)-1 (PC07) (SP)(SP) (SP)-1 高8位先出,低8位后出http:/ 题题设执行前设执行前(SP)=52H。 0312H 12 78 PRC:ACALL SUB10314H 74 89 MOV A
69、,#89H 0645H F5 90 SUB1:MOV P1,A RET(1)、执行指令)、执行指令PRC:ACALL SUB1的结果为的结果为: (53H)=14H,(54H)=03H,(PC)=0645H,程序由,程序由0645H开始执行。开始执行。(2)、执行指令)、执行指令RET后:(后:(SP)=52H,(,(PC)=0314H。程序返回程序返回0314H处开始执处开始执行。行。http:/ 位操作类指令位操作类指令 表 3-8 位 操 作 指 令 http:/ 指令中位地址的表达形式有以下几种: (1) 直接地址方式: 如 0A8H; (2) 点操作符方式: 如IE.0; (3) 位
70、名称方式: 如 EX0;(外部中断0允许位) (4) 用户定义名方式: 如用伪指令 BIT定义: WBZD0 BIT EX0经定义后, 允许指令中使用WBZD0 代替EX0。 http:/ 1. 位数据传送指令位数据传送指令 MOV C, bit MOV bit, C 这组指令的功能是: 把源操作数指出的布尔变量送到目的操作数指定的位地址单元中。其中一个操作数必须为进位标志 Cy, 另一个操作数可以是任何可直接寻址位。 http:/ 题题例例1:设片内数据设片内数据RAM中中(20H)=7FH,执行执行指令指令:MOV C,07H (C)=?例例2:设设(C)=1,执行指令执行指令:MOV 0
71、BAH,C 的功能是什么的功能是什么?(C)=0 特殊功能寄存器器特殊功能寄存器器IP的的PX1位置位置”1”,即设定外部中即设定外部中断断1为高优先级。为高优先级。http:/ 2. 位变量修改指令位变量修改指令 CLR C CLR bit CPL C CPL bit SETB C SETB bit 这组指令对操作数所指出的位进行清“0”、 取反、 置“1”的操作, 不影响其它标志。 http:/ 题题例例1:执行指令序列:执行指令序列:MOV P1,#5DH CPL P1.1 CPL P1.2 则则(P1)=?例例2:设(:设(A)=3BH,试求,试求分别分别执行下列各条指令后,累加器中执
72、行下列各条指令后,累加器中A的的值为多少?值为多少? (1)、)、CLR 0E5H (2)、)、CLR A (3)、)、CPL 0E5H (4)、)、CPL A (5)、)、CLR 0E0H (6)、)、CPL 0E0H(P1)=5BH (0101 1011B)(A)=1BH(A)=00H(A)=1BH(A)=0C4H结论结论:指令指令CLR和和CPL后面若跟的操作数如果不是后面若跟的操作数如果不是A,则一定是,则一定是个位地址个位地址.(A)=3AH(A)=3AHhttp:/ 题题例例:指令指令:CLR 30H 中的中的“30H”指的是指的是:( ) A、内部、内部RAM单元(字节)地址单元
73、(字节)地址 B、位地址、位地址 C、字节地址或位地址、字节地址或位地址 D、既不是字节地址也不是位地址、既不是字节地址也不是位地址B指令中给出的一地址是位地址的情况:指令中给出的一地址是位地址的情况: 1.位指令中的地址位指令中的地址,如如MOV C,20H 和和JB 20H,LOOPER中的中的20H明显只能是位地址明显只能是位地址. 2.CLR 或或 CPL助记符后若是一直接地址时助记符后若是一直接地址时,则该直接地则该直接地址必是位地址址必是位地址.如如CLR 20H,CPL 20H中的中的20H只能是位地址只能是位地址. http:/ 3. 位变量逻辑与指令位变量逻辑与指令 ANL
74、C, bit ANL C, /bit 这这组组指指令令的的功功能能是是: 如如果果源源位位的的布布尔尔值值是是逻逻辑辑 0, 则则将将进进位位标标志志清清“0”; 否否则则, 进进位位标标志志保保持持不不变变, 不不影影响响其其它它标标志志。bit前前的的斜斜杠杠表表示示对对(bit)取取反反, 直直接接寻寻址址位位取取反反后后用用作作源源操操作作数数, 但但不不改改变变直直接接寻寻址址位位原原来来的的值值。例例如如指指令令: ANL C, /ACC.0 执执行行前前ACC.0 为为 0, C为为 1, 则则指指令令执执行行后后 C为为 1, 而而 ACC.0仍为仍为 0。 例例:MOV C,
75、7FH ANL C,ACC.7 ANL C,/B.0http:/ 4. 位变量逻辑或指令位变量逻辑或指令 ORL C, bit ORL C, /bit 这组指令的功能是: 如果源位的布尔值是逻辑 1, 则将进位标志置“1”; 否则, 进位标志保持不变, 不影响其它标志。 http:/ 5. 位变量条件转移指令位变量条件转移指令 JC rel; 若(Cy)=1, 则转移 PC(PC)+2+rel JNC rel; 若(Cy)=0, 则转移PC(PC)+2+rel JB bit, rel; 若(bit)=1, 则转移PC(PC)+3+rel JNB bit, rel; 若(bit)=0, 则转移P
76、C(PC)+3+rel JBC bit, rel; 若(bit)=1, 则转移PC(PC)+3+rel, 并 bit 0 http:/ ;(;(R0)=200;P1.7变反(变反(1 s );P1.7为低电平为低电平 MOV R0, #0C8H CLR P1.7CPL P1.7 NOPLOOP: NOPDJNZ R0,LOOP;(;(1 s );(;(1 s );(;(R0)0 则转则转 (2s)1s1s1s2s10s例例3-193-19:分析下面程:分析下面程序序上页上页回目录回目录P1.7100个脉冲个脉冲 http:/ 20H单元的内容送R0.(3).片外RAM 20H单元的内容送片内RAM 20H单元.(4).片外RAM 1000H单元的内容送片内RAM 20H单元.(5).ROM 2000H单元的内容送R0.(6). ROM 2000H单元的内容送片内RAM 20H单元.(7). ROM 2000H单元的内容送片外RAM 20H单元.http:/