1、单片机原理及接口技术项目3MCS-51单片机的指令系统和程序设计知识目标:知识目标:MCS-51单片机寻址方式。MCS-51单片机常用指令。MCS-51单片机汇编程序设计方法。技能目标:技能目标:掌握MCS-51单片机7种寻址方式。掌握MCS-51单片机指令系统的常用指令。掌握MCS-51单片机汇编程序设计的基本方法,能够依据 本章所讲述的步骤,设计满足要求的汇编程序。【项目导读】【项目导读】MCS-51单片机软件设计的基础是汇编指令。指令系统用了7种寻址方式;MCS-51单片机的指令分五大类:传送类指令、算术运算类指令、逻辑运算类指令、控制转移类指令、位操作类指令;汇编程序设计中主要包括以下
2、5类:顺序程序设计、分支程序设计、循环程序设计、查表程序设计和子程序设计;这些将作为开发单片机应用系统得重要技能。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3.1 指令系统简介3.1.1 指令的格式 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3.1.3 指令的字节数指令的字节数1单字节指令无操作数单字节指令是只有操作码字段,没有指示操作数的字段。另外也有含有操作数寄存器号的单字节指令。2双字节指令操作码在前,操作数在后。操作数可以是立即数,也可为表示地址的值。3三字节指令单单 片片 机机 原原 理理 与与 接接 口口
3、技技 术术冯川放冯川放 主编主编3.1.4 指令的分类5类:数据传送指令算术运算指令逻辑操作和环移指令控制转移指令位操作指令 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3.2 寻址方式表表3-1 指令系统的符号说明指令系统的符号说明1寄存器寻址2直接寻址3立即数寻址4寄存器间接寻址5变址寻址6相对寻址7位寻址单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编用何种方式寻找指令的用何种方式寻找指令的操作数操作数或指令的或指令的执行地址执行地址1 1、立即寻址、立即寻址寻址空间:寻址空间:指令形式:指令形式:操作码操作码立即数立即
4、数v程序存储器程序存储器v指令的操作数存放在程序存储器中指令的操作数存放在程序存储器中v操作数紧跟操作码操作数紧跟操作码OP后面后面立即寻址:立即寻址:在在 哪哪 里里?用何种方式寻找用何种方式寻找OP#dataImmediate Addressing指令的寻址方式:指令的寻址方式:指令的寻址方式:指令的寻址方式:MOV A,#30H;A#30H 例例1 1:操作码操作码立即数立即数PCPCPC74H30HROMROM A30HMOV DPTR,#8000H;DPTR#8000H 例例2 2:操作码操作码PCPCPC立即数的高立即数的高8 8位位立即数的低立即数的低8 8位位DPHDPHDPL
5、DPLPC80H80H00H00H90H80HROMROM00H 2 2、直接寻址、直接寻址寻址空间:寻址空间:指令的三种形式:指令的三种形式:操作码操作码操作数地址操作数地址v在指令中直接给出操作数的在指令中直接给出操作数的真实地址真实地址v操作码后面操作码后面紧跟一个实际紧跟一个实际操作数地址操作数地址操作码操作码操作数地址操作数地址立即数立即数操作码操作码源操作数地址源操作数地址目的操作数地址目的操作数地址内内RAM的低的低128字节字节特殊功能寄存器特殊功能寄存器SFR区区直接寻址直接寻址直接寻址是访问直接寻址是访问 SFR 的唯一方法的唯一方法Direct Addressing00H
6、7FH80HFFHCPU内部内部直接直接间接间接“与与”MOV A,30H;A (30H)例例1 1:操作码操作码操作数地址操作数地址PCPCPCE5H30HROMROM A内内RAMRAM 30H ANL 30H,#30H;30H (30H)#30H 例例2 2:操作码操作码PCPCPC直接地址直接地址立即数立即数PC53H30HROMROM 30H 内内RAMRAM 30H ALU“结果结果”3 3、寄存器寻址、寄存器寻址寻址空间:寻址空间:指令的三种形式:指令的三种形式:操作码操作码当前选定的当前选定的寄存器内容寄存器内容就是实际操作数就是实际操作数操作码操作码立即数立即数操作码操作码直
7、接地址直接地址R0R7,由,由RS0、RS1确定确定寄存器区寄存器区/4A、B、CY(位),(位),DPTR、ABMOV A,R3;A (R3)例例1 1:ADD A,R3;A (A)+(R3)例例2 2:寄存器寻址:寄存器寻址:Register Addressing操作数操作数隐含隐含操作数显然操作数显然隐含寻址隐含寻址4 4、寄存器间接寻址、寄存器间接寻址寻址空间:寻址空间:指令的三种形式:指令的三种形式:操作码操作码操作码操作码立即数立即数操作码操作码直接地址直接地址内部内部 RAM(R0,R1,SP)外部外部 RAM(R0,R1,DPTR)寄存器间接寻址:寄存器间接寻址:指令选定的指令
8、选定的寄存器内容寄存器内容就是实际就是实际的的操作数地址操作数地址Register Indirect AddressingMOV R0,A例例1 1:操作码操作码PCPCF6HROMROMR0R030H;累加器传送指令;累加器传送指令内内RAMRAM 30HA MOVX A,DPTR例例2 2:操作码操作码PCPCE0HROMROMDPTRDPTR 2000H外外RAMRAM 2000HA “读读”RD“读读”5 5、基址寄存器加变址寄存器间接寻址、基址寄存器加变址寄存器间接寻址基址寄存器加变址寄存器间接寻址:基址寄存器加变址寄存器间接寻址:以以DPTR或或PC作作基址寄存器基址寄存器,A作作
9、变址寄存器变址寄存器两者相加形成两者相加形成操作数地址操作数地址。寻址空间:寻址空间:程序存储器(程序存储器(A+DPTR、A+PC)指令形式:指令形式:操作码操作码MOVC A,A+DPTR例:例:操作码操作码PCPCDPTRDPTR2400HA 0FH93HROMROM 240FH240FH设(设(A)=0FH(DPTR)=2400H ALU“读读”PSEN“读读”MOVC A,A+DPTR6 6、相对寻址、相对寻址程序存储器程序存储器寻址空间:寻址空间:指令的三种形式:指令的三种形式:操作码操作码 rel rel操作码操作码 直接地址直接地址 rel rel操作码操作码 立即数立即数 r
10、el rel相对寻址相对寻址以以当前当前PC值值为基准地址,加上指令的为基准地址,加上指令的偏移量偏移量“rel”,结果为目标地址。,结果为目标地址。rel为为有符号补码数,范围:有符号补码数,范围:-128+127一般为双字节或三字节指令一般为双字节或三字节指令Relative Addressing寻址指令寻址指令执行地址执行地址目标地址目标地址JNZ rel例:例:;累加器累加器A不等零则转移不等零则转移 设设:rel=23H2025H2002H2001H2000H ROM70H70H23H23H下一条指令下一条指令.操作码操作码PCPCPC(PC)=2002Hrel=23H修正后转移修正
11、后转移目标地址目标地址D(PC)=2025HPCALU偏移量偏移量(PC)=2 0 0 2 HRel =2 3 H)005202HD=2025H2112H2111H2110H ROMDFHDFHF2HF2H下一条指令下一条指令.操作码操作码PCPCPC(PC)=2112Hrel=F2H修正后转移修正后转移目标地址目标地址 D(PC)=2104HALU偏移量偏移量例:例:DJNZ R7,rel ;(;(R7)1不为不为“0”则转则转PC2104H指指 令令(PC)=2 1 1 2 HRel =F 2 H)FF4012HD =7 7、位寻址、位寻址寻址空间:寻址空间:片内片内RAM的的20H2FH
12、字节地址字节地址位地址:位地址:00H7FH 共共128位位SFR中中12个能被个能被8整除的字节地址整除的字节地址位地址请参看位地址请参看P43 表表2-16 共共93位位Bit Addressing 以访问触发器的方式,对内部以访问触发器的方式,对内部RAM、SFR的的位地址空间位地址空间进行访问,称为位寻址。位地址进行访问,称为位寻址。位地址用于布尔指令。用于布尔指令。共共221位位3.3 指令系统分类介绍3.3.1 数据传送类指令数据传送是向CPU提供操作数据的最基本和最主要的操作,相当丰富,共有29条执行数据传送类指令时不影响程序状态字的各位(奇偶位P除外)1内部8位数据传送指令MO
13、V 目的操作数,源操作数 内部数据存储器、工作寄存器之间的数据传送,共15条n以A累加器为目的字节的传送指令 nMOV A,#data nMOV A,direct nMOV A,Rn;n=0,7 nMOV A,Ri;i=0,例3-1单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编2)以Rn为目的字节的传送指令 nMOV Rn,A;n=0,7 nMOV Rn,#data;n=0,7 nMOV Rn,direct;n=0,7【例3-2】分析下列指令的执行结果。MOV R0,A;(R0)(A)MOV R1,20H;(R1)(20H)MOV R5,#30H;(R5)30
14、H3)以直接地址为目的字节的传送指令MOV direct1,A MOV direct1,Rn;n=0,7 MOV direct1,#data MOV direct1,direct2 MOV direct1,Ri;i=0,1 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编4)以寄存器间接地址为目的字节的传送指令以寄存器间接地址为目的字节的传送指令nMOV Ri,A nMOV Ri,direct;i=0,1 nMOV Ri,#data例3-4 设(R6)=30H,(70H)=40H,(R0)=50H,(50H)=60H,(R1)=66H,(66H)=45H,执行以
15、下指令后,结果如下:MOV A,R6;(A)(R6),(A)=30H MOV R7,70H;(R7)(70H),(R7)=40H MOV 70H,50H;(70H)(50H),(70H)=60H MOV 40H,R0;(40H)(R0),(40H)=60H MOV R1,#88H;(R1)88H,(66H)=88H 216位数据传送指令位数据传送指令MOV DPTR,#data16单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3单片机与外部数据存储器数据传送指令单片机与外部数据存储器数据传送指令MOVX A,DPTR MOVX A,Ri;i=0,1 MOVX
16、DPTR,A MOVX Ri,A;i=0,1例3-5 把累加器A中的数传送到外部数据存储器2000H单元中。MOV DPTR,#2000H;(DPTR)2000H MOVX DPTR,A;(DPTR)(A)例3-6 将外部数据存储器2040H单元中的数取出,并传送到外部数据存储器2560H单元中。MOV DPTR,#2040H MOVX A,DPTR MOV DPTR,#2560H MOVX DPTR,A 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编4单片机与程序存储器传送数据指令单片机与程序存储器传送数据指令MOVC A,A+PC MOVC A,A+DPT
17、R 这两条指令又称为查表指令指令MOVC A,A+DPTR允许数表存放在程序存储器64KB的任意单元指令MOVC A,A+PC只允许数表存放在该指令以下的256个单元单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编5交换与查表类指令1)字节交换指令 nXCH A,Rn;n=07 nXCH A,direct nXCH A,Ri;i=0,1 2)半字节交换指令 XCHD A,Ri;i=0,1 3)累加器A中高4位和低4位交换 SWAP A6堆栈操作指令压栈(进栈)指令:PUSH direct;其功能是先将堆栈指针SP加1,然后将源地址direct单元中的数传送到SP
18、所指示的单元中去弹出(出栈)指令:POP direct;其功能是先将堆栈指针SP所指示的单元中的数据弹出,传送到目标地址direct单元中去,然后SP减1单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3.3.2 算术运算类指令加、减、乘、除、加1和减1指令算术运算结果将影响PSW中的进位C、半进位AC、溢出位OV三个标志位加1和减1指令不影响这些标志位。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编1加法指令加法指令n不带进位加法指令 ADD A,Rn;n=0,7 ADD A,direct ADD A,Ri;i=0,1 ADD
19、 A,#data 2)带进位加法指令 ADDC A,Rn;n=0,7 ADDC A,direct ADDC A,Ri;i=0,1 ADDC A,#data 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编【例3-11】设(A)=53H,(R0)=0FCH,执行指令ADD A,R0以后,各寄存器值如何变化?解 (A)=4FH,C=1,AC=0,OV=0,P=1。【例3-12】设(A)=85H,(20H)=0FFH,C=1,执行指令ADDC A,20H以后,各寄存器值如何变化?解 (A)=85H,C=1,AC=1,OV=0,P=1。【例3-13】将(31H)、(30
20、H)和(41H)、(40H)中的两个双字节无符号数相加,结果送(52H)、(51H)、(50H)单元(高位字节在前)。解程序如下。MOV A,30H ADD A,40H MOV 50H,A MOV A,31HADDC A,41H MOV 51H,A MOV A,#00H ADDC A,#00H MOV 52H,A 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编2带借位的减法指令带借位的减法指令nSUBB A,Rn;n=0、7 nSUBB A,direct nSUBB A,Ri;i=0、1 nSUBB A,#data【例3-14】设(A)=0C9H,(R2)=5
21、4H,C=1,执行指令SUBB A,R2以后,各寄存器值如何变化?解 (A)=74H,C=0,AC=0,OV=1,P=0。1 带进位的加法指令和带借位的减法指令主要用于多字节加减法运算。2 在进行多字节加、减法运算时,加法运算最低字节用不带进位的加法运算指令。3 减法运算时,最低位相减前,要先清除PSW中的C之后再执行减法指令。其他字节 相加减时,需要使用带进位的加法或带借位的减法指令。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3加加1、减、减1指令指令n加1指令nINC A nINC Rn;n=0,7 nINC direct nINC Ri;i=0,1
22、nINC DPTR2)减1指令nDEC A nDEC Rn;n=0,7 nDEC direct 1)DEC Ri;i=0,1 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3.3.3 逻辑操作类指令1逻辑运算指令逻辑运算指令逻辑运算指令共有20条,包括逻辑与、或、异或运算3类,每类有6条指令。n逻辑与指令nANL A,Rn;n=0,7 nANL A,direct nANL A,Ri;i=0,1 nANL A,#data nANL direct,A nANL direct,#data【例3-16】屏蔽R0中的高4位,保留低4位,该执行哪些指令?解 MOV A,#
23、0F#ANL A,R0 MOV R0,A 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编2)逻辑或指令nORL A,Rn;n=0,7 nORL A,direct nORL A,Ri;i=0,1 nORL A,#data nORL direct,A nORL direct,#data【例3-18】保持R0中的高4位不变,使低4位置1,该执行哪些指令?解 MOV A,#0FH ORL A,R0 MOV R0,A单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3)异或指令异或指令 nXRL A,Rn;n=0,7 nXRL A,dire
24、ct nXRL A,Ri;i=0,1 nXRL A,#data nXRL direct,A nXRL direct,#data【例3-19】设(A)=10101001,(R2)=01100110,执行指令XRL A,R2以后,寄存器(A)值如何变化?解 (A)=11001111。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编4)累加器累加器A清零清零 CLR A5)累加器A取反CPL A 2循环移位指令循环移位指令1)累加器A内容循环左移一位RL A 【例3-21】设(A)=10101010,执行指令RL A以后,寄存器(A)值如何变化?解 (A)=01010
25、101。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编2)累加器累加器A内容带进位循环左移一位内容带进位循环左移一位RLC A 例3-22】设(A)=10101010,C=0,执行指令RLC A以后,各寄存器值如何变化?解 (A)=01010100,(C)=1。3)累加器累加器A内容循环右移一位内容循环右移一位 RR A 例3-23设(A)=11101111,执行指令RR A以后,寄存器(A)值如何变化?执行结果为(A)=11110111 4)累加器累加器A内容带进位循环右移一位内容带进位循环右移一位 RRC A 注:在这组指令中,对于带进位的循环移位,结果将
26、影响PSW中的C和P。不带进位的循环移位对PSW没有影响。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3.3.4 控制转移类指令控制转移类指令控制转移指令分为无条件转移和条件转移指令1无条件转移指令1)长转移指令 LJMP addr16【例3-25】若标号MAIN地址=2000H,标号MAI地址=3000H,则指令MAIN:LJMP MAI的执行过程是怎样的?解执行指令以后,(PC)=3000H,程序从3000H开始执行。执行过程如图3-14所示。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编2)绝对转移指令绝对转移指令(短
27、转移指令短转移指令)nAJMP addr11 ;(PC)(PC)+2 ;(PC)100addr11 ;addr11为11位目的地址例3-26 试描述指令2070H:AJMP 16AH的执行过程。解 11位绝对转移地址为00101101010B(16AH),因此指令代码为单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3)相对转移指令相对转移指令SJMP rel ;rel为相对转移指令中的偏移量,为8位带符号补码数 目的地址=(PC)+2(指令所占字节数)+rel(例题见教材)2条件转移指令条件转移指令所谓条件转移就是程序转移是有条件的1)累加器A判零转移指令 n
28、JZ rel;若(A)=00H,则(PC)(PC)+2+rel ;若(A)00H,则(PC)(PC)+2 nJNZrel;若(A)00H,则(PC)(PC)+2+rel ;若(A)=00H,则(PC)(PC)+2【例3-27】单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编2)判判C标志转移指令标志转移指令 nJC rel;若(C)=1,则(PC)(PC)+2+rel ;若(C)=0,则(PC)(PC)+2 nJNC rel;若(C)=0,则(PC)(PC)+2+rel ;若(C)=1,则(PC)(PC)+2 3)位转移指令位转移指令 nJB bit,rel;若
29、(bit)=1,则(PC)(PC)+3+rel ;若(bit)=0,则(PC)(PC)+3nJNB bit,rel;若(bit)=0,则(PC)(PC)+3+rel ;若(bit)=1,则(PC)(PC)+3 nJBC bit,rel;若(bit)=1,则(PC)(PC)+3+rel且(bit)清零 ;若(bit)=0,则(PC)(PC)+3 位转移指令都是三字节的相对寻址指令,其中表示位寻址区中的某一位地址单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编4)比较转移指令比较转移指令nCJNE A,#data,rel;累加器内容与立即数不等转移 nCJNE A,
30、direct,rel;累加器内容与内部RAM 单元内容不等转移 nCJNE Rn,#data,rel;寄存器内容与立即数不等转移 nCJNE Ri,#data,rel;以Ri内容为地址的内部RAM前128单元内容与立即数不 等转移【例3-28】(例题见教材)5)减减1非零转移指令非零转移指令(1)寄存器减1条件转移指令DJNZ Rn,rel(2)直接寻址单元减1条件转移指令DJNZ direct,rel【例3-29】将内部RAM从30H单元开始的16个数清零。解 利用DJNZ指令很容易实现本例的功能。MOV R0,#30H;设置地址指针 MOV R7,#10H;设置计数值 CLR A LOOP
31、:MOV R0,A;内部RAM单元清零 INC R0;修改地址指针 DJNZ R7,LOOP;未完继续 SJMP$单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3调用和返回指令调用和返回指令nACALL addr11 绝对调用指令为11位地址的调用指令,在指令的操作数部分给出11位地址指令的执行过程如下:(PC)(PC)+2(SP)(SP)+1,(SP)(PC07)(SP)(SP)+1,(SP)(PC815)(PC100)addr11绝对调用指令的范围与AJMP类似,即该指令执行时的当前PC值和子程序在同一2KB存储范围内,该指令的代码为a10a9a81000
32、1 a7a6a5a4a3a2a1a0,其中10001为操作码,a0a10为子程序入口地址低11位。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编2)长调用指令长调用指令 LCALL addr16 n指令的执行过程如下:n(PC)(PC)+3 n(SP)(SP)+1,(SP)(PC07)n(SP)(SP)+1,(SP)(PC815)n(PC)addr16 n3)子程序返回指令 n指令格式:nRET n指令RET的执行过程如下:n(PC158)(SP),(SP)(SP)-1 n(PC70)(SP),(SP)(SP)-1 单单 片片 机机 原原 理理 与与 接接 口
33、口 技技 术术冯川放冯川放 主编主编n4)中断返回指令 n指令格式:nRETI n指令RETI的执行过程如下:n(PC158)(SP),(SP)(SP)-1 n(PC70)(SP),(SP)(SP)-1 nRET和RETI指令应分别放在子程序和中断服务程序的末尾。n5)空操作指令 n指令格式:nNOP 空操作指令的功能是取指令、译码。这条指令只是在时间上消耗一个机器周期的时间,可用于延迟、等待等情况。上述指令均不影响程序状态字。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3.3.5 位操作类指令位操作类指令MCS-51单片机内有一个布尔处理器,它以进位位C作
34、为C位累加器,以内部RAM中的位寻址区以及可位寻址的特殊功能寄存器中的位状态作为操作数,进行位变量的传送、修改、逻辑运算及控制程序转移等操作。位操作指令中位地址有多种表达方式n(1)直接位地址方式:如D5H。n(2)点操作符方式:如PSW.5。n(3)位名称方式:F0。n(4)用户定义位名称方式:如用户指令AA bit PSW.5,定义后允许用AA代表PSW.5。1位传送指令位传送指令nMOV C,bit nMOV bit,C【例3-30】将20H.0(位地址00H)传送到21H.0(位地址08H),可通过以下指令实现。解 MOV C,00H MOV 08H,C单单 片片 机机 原原 理理 与
35、与 接接 口口 技技 术术冯川放冯川放 主编主编n2位变量修改指令n位变量修改指令有6条。n1)清零指令 n清零指令有以下两条。nCLR C nCLR bit n位清零指令的功能是将C位累加器或目的地址位内容清零。n2)置1指令 n置1指令有以下两条。nSETB C nSETB bit n位置1指令的功能是将C位累加器或目的地址内容位置1。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编n3)取反指令 n取反指令有以下两条。nCPL C nCPL bit n位取反指令的功能是将C位累加器或目的地址内容位取反。n3位变量逻辑操作指令n位变量逻辑操作指令有4条。n1
36、)位与指令 n位与指令有以下两条。nANL C,bit nANL C,/bit;/加在位地址的前面,表示对该位状态取反 n位与指令的功能是将C累加器和源地址中的位码或者该位的反码相“与”,其结果存放在C中。n2)位或指令 n位或指令有以下两条。nORL C,bit nORL C,/bit n位或指令的功能是将C累加器和源地址中的位码或者该位的反码相“或”,其结果存放在C中。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编n【例3-31】设X、Y、Z均代表位地址,试编写ZXYXY=+的程序。n解 nMOV C,X nANL C,/Y;(C)XY nMOV Z,C;
37、暂存nMOV C,Y nANL C,/X;(C)XY nORL C,Z;(C)XY+XY nMOV Z,C;存结果 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3.4 汇编语言程序设计基础汇编语言程序设计基础3.4.1 程序设计语言程序设计语言指令是计算机执行各种各样操作的命令,为了使计算机能完成人们预定的任务,必须执行一条条指令,这种能实现一定任务的指令系列称为程序。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编汇编语言汇编语言源程序源程序机器语言机器语言 汇编汇编 反汇编反汇编MCS-51交叉交叉汇编汇编1汇编语言程序的
38、格式 汇编语言语句有3种基本类型:指令语句、伪指令和宏指令语句。指令语句由4个部分组成,每一部分为一段。其格式如下。标 号(名字):操作码(助记符)操作数(参数);注释 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编2MCS-51伪指令 “伪”体现在汇编时不产生机器指令代码,不影响程序的执行,仅指明在汇编时执行一些特殊的操作。8条MCS-51系列单片机常用的伪指令:nORG(Origin)伪指令:一条程序汇编起始地址定位伪指令,用来定义汇编程序的存放起始地址。n ORG 16位地址 n【例3-32】试解释以下代码中ORG的意义:nORG 2000H nSTAR
39、T:MOV A,R2 nMOV B,A n 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编2)END伪指令 END或END标号 3)EQU(Equate)伪指令 赋值(等值)伪指令,其作用是把操作数段中的地址或数据赋值给标号字段中的标号。标号(字符名称)EQU 数或汇编符号 n【例3-33】说出指令LA EQU 3000H的意义。n解 LA=3000H n【例3-34】说出指令LP EQU R4的意义。n解 LP等于R4的值,例如MOV A,LP与MOV A,R4等值。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编4)DB(D
40、efine Byte)伪指令 DB伪指令用于定义字节 DB 字节常数或ASCII字符 n【例3-35】以下指令定义了内存空间中的哪些值?nORG 2000H nDB 80,0DAH,B,X;在表示ASCII字符时需要用单引号 nDB 6AH n解(2000H)=80H n(2001H)=DAH n(2002H)=42H n(2003H)=58H n(2004H)=6AH 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编5)DW(Define Word)伪指令 DW的基本定义与DB相同,不同的是DW定义16位数据(即一个字或两个字节),常用来建立地址表。n【例3-
41、36】以下指令定义了内存空间中的哪些值?nORG 2000H nTAB:DW 1234H,0A8H n解(2000H)=12H n(2001H)=34H n(2002H)=00H n(2003H)=A8H 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编6)DS(Define Storage)伪指令 DS伪指令的功能是由标号单元开始,定义一个存储区,以备源程序使用。存储区内预留的存储单元由表达式的值确定。格式如下:标号:DS 数字 n【例3-37】以下指令定义了内存空间中的哪些值?nORG 4000H nSEG:DS 10H nDB 3AH,0D8H n解 结果
42、是从4000H单元开始,连续预留16个存储单元,然后从4010H单元开始按DB命令给内存单元赋值,即 n(4010H)=3AH n(4011H)=D8H 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编7)DATA伪指令伪指令 DATA常用在程序中定义数据地址。格式如下:标号:DATA数据或表达式 DATA命令与EQU类似,但有如下差别。(1)用DATA定义的标识符汇编时作为标号登记在符号表中,所以可以先使用后定义,而EQU定义的标识符必须先定义后使用。(2)用EQU可以把一个汇编符号赋予字符名,而DATA只能把数据赋予字符名。(3)当表达式可以求值时,DATA
43、可以把一个表达式赋予字符名。【例3-38】写出指令MAIN:DATA 6000H的意义。解 汇编后MAIN的值为6000H。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编8)BIT伪指令伪指令 BIT伪指令的功能是把位地址赋予字符名称。格式如下:字符名称 操作码 操作数 BIT 位地址【例3-39】写出以下指令的意义:GA BIT P1.0 GB BIT P1.1 GC BIT 03H 解 汇编后,位地址P1.0、P1.1、03H分别赋予变量GA、GB、GC。在伪指令中,ORG和END最重要,必不可少。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术
44、冯川放冯川放 主编主编3.4.3 汇编语言程序设计步骤汇编语言程序设计步骤(1)分析面对的问题,明确要求、目的和技术指标等。分析面对的问题,明确要求、目的和技术指标等。(2)确定解决问题的算法、解题步骤。确定解决问题的算法、解题步骤。(3)根据算法画出程序框图根据算法画出程序框图(画程序框图可以把算法和解题步画程序框图可以把算法和解题步骤逐步具体化,以减少出错的可能性骤逐步具体化,以减少出错的可能性)。(4)分配内存工作单元,确定程序与数据区存放地址。分配内存工作单元,确定程序与数据区存放地址。(5)根据程序框图所表示的算法和步骤,选用适当指令排列根据程序框图所表示的算法和步骤,选用适当指令排
45、列起来,编制汇编语言源程序。起来,编制汇编语言源程序。(6)上机调试、修改并最后确定源程序。上机调试、修改并最后确定源程序。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3.5 汇编语言程序设计举例汇编语言程序设计举例 结构化程序设计的观点,功能复杂的程序结构可采用6种基本控制结构:顺序结构、循环结构、分支结构、散转结构、查表结构、子程序和中断服务程序等 3.5.1 顺序程序设计顺序程序设计 按程序编写的顺序依次执行,程序流向不变。编写这类程序主要应注意正确地选择指令,提高程序的执行效率。【例3-40】将44H单元的两个BCD码拆开,存入45H、46H单元;然
46、后变成ASCII码,分别存入47H、48H单元。单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编ORG 3000H MOV A,44H MOV B,#10H;DIV AB MOV 45H,A MOV 46H,B ORL A,#30H;MOV 47H,A ORL B,#30H;MOV 48H,B 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编【例例3-41】求一个双字节二进制负数的补码。已知该二进制数低求一个双字节二进制负数的补码。已知该二进制数低8位存位存 放在放在44H单元中,高单元中,高8位存放在位存放在45H单元中单元中。
47、n ORG 2000H nMOV A,44H nCPL A nADD A,#01H nMOV 44H,A;低字节补码送44H nMOV A,45H nCPL A nADDC A,#80H;高位加进位及符号位 nMOV 45H,A;高字节补码送45H nEND 单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编 【例3-42】设有两个4位BCD码,分别存放在30H(低位)、31H(高位)单元和32H(低位)、33H(高位)单元中,求它们的和,并送入34H(低位)、35H(高位)单元中。nORG 2000H nCLR C nOV A,30H nADD A,32H;(3
48、0H)+(32H)A nDA A;BCD码调整 nMOV 34H,A;存结果低位 nMOV A,31H nADDC A,33H;(31H)+(33H)+CA nDA A;BCD码调整 nMOV 35H,A;存结果高位 nEND单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3.5.2 循环程序设计 循环结构的程序一般包括:循环初态、循环体、循环控制部分和结束部分。【例3-43】已知MCS-51单片机使用的晶振为fosc=6MHz,要求设计一个软件延时程序,延时时间为12ms。周期数 ORG 2000H n1 MOV R0,#0CH;12R0 n1 DL2:MOV
49、 R1,#MT;1ms延时的循环次数R1 n1 DL1:NOP n1 NOP n2 DJNZ R1,DL1;1ms延时循环n2 DJNZ R0,DL2;n END单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编【例3-44】写出工作单元清零程序。解:设R0中存放被清零低字节单元地址,R2中存放被清零的字节数。nMOV R2,#data;清零的字节数送R2 nMOV R0,#addr;被清零字节的首地址送R0 nCLR A;累加器清零 nLOOP:MOV R0,A;指定单元清零 nINC R0 nDJNZ R2,LOOP;R2减1,不等于0则继续循环,等于0结束
50、nEND单单 片片 机机 原原 理理 与与 接接 口口 技技 术术冯川放冯川放 主编主编3.5.3 分支程序设计分支程序设计 编写分支结构程序重点在于正确使用转移指令。转移指令有3类:无条件转移、条件转移和散转。在编写时应注意以下两点:(1)在使用条件转移指令形成分支前,一定要安排可供条件转移指令进行判别的条件。例如,若采用JC rel指令,在该指令前必须安排影响CY标志的指令;若采用CJNE A,#data,rel指令,在该指令前必须使用影响累加器A的指令,以便为测试准备条件。(2)要正确选定所用的转移条件和转移目标地址。散转 散转是根据某种已输入的或者运算的结果,使程序分别转向各个处理程序