![第三章单片机指令系统_第1页](http://file4.renrendoc.com/view/dc6cdf0cb292ce4d5f372cd447364fef/dc6cdf0cb292ce4d5f372cd447364fef1.gif)
![第三章单片机指令系统_第2页](http://file4.renrendoc.com/view/dc6cdf0cb292ce4d5f372cd447364fef/dc6cdf0cb292ce4d5f372cd447364fef2.gif)
![第三章单片机指令系统_第3页](http://file4.renrendoc.com/view/dc6cdf0cb292ce4d5f372cd447364fef/dc6cdf0cb292ce4d5f372cd447364fef3.gif)
![第三章单片机指令系统_第4页](http://file4.renrendoc.com/view/dc6cdf0cb292ce4d5f372cd447364fef/dc6cdf0cb292ce4d5f372cd447364fef4.gif)
![第三章单片机指令系统_第5页](http://file4.renrendoc.com/view/dc6cdf0cb292ce4d5f372cd447364fef/dc6cdf0cb292ce4d5f372cd447364fef5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1第三章MCS-51单片机指令系统3.1概述3.2寻址方式
3.3数据传送指令3.4算逻运算和移位指令3.5控制转移和位操作指令23.1MCS-51指令系统概述指令:规定计算机基本操作的语句或命令,51系列共111条指令.指令系统:某个单片机所能执行的指令集合为它的指令系统,不同系列单片机指令系统不同.汇编语言:用助记符表示的指令叫做汇编语言.汇编语言通过专用的编译器转换为二进制代码才能为单片机执行.指令格式:既指令的结构形式。(例题)3OPDATA或ADDRESS操作码操作数或操作数地址例:CJNER0,#5FH,35HADDA,#0FFHADDA,R0INCARETB8H5FH35H24HFFH28H04H22H
编译器编译之后生成可执行机器代码操作码:用于规定语句执行的内容,指令格式唯一不能空 缺的部分.操作数:用于规定指令操作的数据,
是具体的数据或者取得数据的地址或者符号,可以没有或者有1-3个操作数,43.1.1指令的字节数
分为单字节、双字节和三字节。一、单字节指令(49条):如RET;00100010B NOP;00000000B【特点】:在操作码中无操作数。如INCDPTR;10100011B INCA;00000100B【特点】:操作数隐含在操作码中。含有操作数寄存器名称的单字节指令:如:MOVA,R011101000BMOVA,R111101001B【特点】:寄存器名以三位数代码的形式在指令的后三位。5
二、双字节指令(46条):
指令的操作码和操作数各占一个字节。如:
MOVA,#data;01110100Bdata程序存储器01110100dataMOVA,
#data双字节指令在程序存储器的存放示意图6
三、三字节指令(16条)(1)指令中的操作数为双字节。如:
MOVDPTR,#data16;
(2)指令中分别包含1个字节的操作数和1个字节的操作数地址。如:
MOVdirect,#data举例:MOV20H,#0FFH
10010000data15-8data8-0OP(75H)direct(20H)data(FFH)MOVDPTR,#data16三字节指令在存储器中存放的方式示意图MOVdirect,#data7四指令的字节数与指令的运行时间指令的字节多是否意味着指令周期就长?指令字节数周期数指令说明MOVA,R011R0内容送累加器AMOVA,#0FFH21立即数FFH送AMOV20H,#30H32立即数30H送内存20h单元MULAB14乘法指令INCDPTR1116位寄存器DPTR加一从表中可见,指令的字节数与指令周期不是对等83.2寻址方式在指令的操作数位置上,用于表征、寻找操作数的方式定义为“寻址方式”。在MCS-51单片机中,共使用了七种寻址方式。分别是:
(1)寄存器寻址(5)变址寻址;(2)直接寻址(6)相对寻址;(3)立即数寻址(7)位寻址。(4)寄存器间接寻址93.2.1寄存器寻址当所需要的操作数在内部某一个寄存器Rn中时,将此寄存器名Rn直接写在指令的操作数的位置上。如:
MOVA,R7 MOV20H,R0INCR1ADDA,R3
寄存器寻址范围:寄存器包括8个工作寄存器R0~R7,累加器A,寄存器B、数据指针DPTR和布尔处理器的位累加器C。103.2.2直接寻址在指令中直接给出操作数所在存储单元的地址。指令中操作数部分是操作数所在地址。如:
MOVA,30H;将RAM30H单元内容送累加器直接寻址的指令长度是两个或三个字节。30HOP程序ROMnn+1操作数x数据RAM30H累加器A直接寻址示意图11使用直接寻址应注意的问题:指令助记符中direct是用8位二进制数表示的操作数地址,寻址范围只限于内部RAM(0~255)字节地址。当地址在SFR区域时,指令用地址或寄存器名表示。如:MOVA,80H
可以写成MOVA,P0
当地址在低128单元时,指令中用单元地址表示。区分字节地址与位地址(直接寻址和位寻址比较)
MOVA,20H;将RAM的20H单元内容送AMOVC,20H;将位寻址区中的位地址为
20H位内容送PSW的Cy中
12片内RAM(20H-2FH)中的位寻址区结构图7F7E7D7C7B7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837262524232221202F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002FH20H字节地址24H位地址133.2.3立即寻址指令本身直接含有所需要的8位或16位的操作数。将此数称为“立即数”(使用#标明)。如:
MOVA,#30H;将(8位)立即数送累加器AMOVDPTR,#2000H;16位立即数送DPTR寄存器30H74Hnn+1ROM累加器A00H20H90HROMDPTR143.2.4寄存器间接寻址寄存器间接寻址是把指定寄存器的内容作为地址,由该地址所指定的单元内容作为操作数.MOVA,@Ri(i=0、1)
如:MOVR0,#30H;立即数送R0寄存器
MOVA,@R0;从RAM的30H单元取数送累加器A30H78HROM30HxRAM30HR000H累加器A12315访问内外数据存储器时应注意问题(1)间址寄存器Ri只能使用R0、R1(i=0、1)。(2)对于片内RAM的访问只能使用MOV指令 对于片内RAM低128字节(00H~7FH)可使用直接寻址和寄存器间址Ri访问存储单元; 对于片内RAM高128字节(80H~FFH)只能使用寄存器直接寻址访问;
(3)对于片外RAM的访问只能使用MOVX指令。
对于片外RAM,可以使用Ri(00H~FFH)和DPTR(0000H~FFFFH)做间址寄存器。堆栈操作:PUSHA;(MOV@SP,A)POPA;(MOVA,@SP)
16MCS-51片内、片外数据存储器示意图特殊功能寄存器SFR通用数据存储器80H7FH00HFFH片内数据存储器片外数据存储器256B个字节64KB个字节片外数据存储器64KB0000HFFFFH例一:访问片内RAM20H存储单元;
MOVA,20H;直接寻址方式
MOVR0,#20HMOVA,@R0;间接寻址方式例二:
访问片内RAM80H存储单元;
MOVA,80H;直接寻址方式
MOVA,P0;例三:访问片外RAM20H存储单元
MOVR0,#20HMOVXA,@R0;间接寻址方式
MOVDPTR,#20HMOVXA,@DPTR
;间接寻址方式例四:访问片外RAM02FFH存储单元
MOVDPTR,#02FFHMOVXA,@DPTR
;间接寻址方式
173.2.5变址寻址指令使用DPTR或PC中的内容作为基地址,再与累加器A的内容相加,和作为操作数地址,达到访问程序存储器(ROM)数据表格的目的。有3条均为单字节指令:
MOVCA,@A+PC
;PC内容与A的内容相加得操作数地址并将此操作数送A
MOVCA,@A+DPTR;DPTR内容与A的内容相加得操作数地址并将此操作数送A
JMP@A+DPTR;
跳转到操作数地址18变址指令适用于对ROM存储器的数据表格访问。
【举例】:已知ROM中0302H单元有一个数x,现要把它送到累加器A中,试编程。
MOVDPTR,#0300H;立即数送DPTRMOVA,#02H;立即数送累加器AMOVCA,@A+DPTR;从ROM的0302单元取数送A19变址寻址示意图02H0300HROM
XALU0302H累加器ADPTR0300H+02H0302HMOVCA,@A+DPTR203.2.6相对寻址相对转移指令在执行中是将当前PC值与指令中的8位偏移量进行相加,形成指令要转移的目标地址,为解决程序转移设置。当前的PC值是指执行完转移指令后的PC值;相对转移指令操作码所在地址称为源地址;转移后的地址称为目的地址。目的地址=源地址+相对转移指令字节数+relSJMPrel由指令中有一个8位偏移量rel为带符号位的补码,所以控制程序转移的范围为-128~+127。21例如:SJMP54H;(80H、54H)
执行前PC=2000H,执行指令(2字节)后PC=2002H,54H2002HALU累加器APC2002H+54H2056H
54H80H程序存储器ROM2056H操作码偏移量2000H2002H(LOOP1)223.2.7位寻址采用位寻址方式的指令的操作数是8位二进制数中的某一位,指令中给出的是位地址。位地址在指令中用bit表示。寻址范围:RAM低128单元中位寻址区20H-2FH,16单元共128位(00H-7FH),可用位地址或字节地址加位数来表示
SETB78H;SETB2FH.0;将位地址为78H的位置1RAM高128单元中11个可进行位寻址的特殊寄存器。可用位名称或位地址,寄存器地址或名称加位数表示。
CLRF0;CLRD5H;CLRPSW.5;CLRD0H.5;23概述:
80c51指令系统由111条指令组成。其中,单字节指令49条,双字节指令45条,三字节指令17条。按照用途分为五类指令数据传送类指令算术运算类指令逻辑运算类指令控制转移类指令位操作类指令
§3.380c51指令系统24Rn(n=0~7):当前选中的工作寄存器组R0~R7。Ri(I=0,1):作为地址指针的两个工作寄存器R0,R1。#data:8位立即数。#data16:16位立即数。direct:8位片内RAM单元(包括SFR)的直接地址。addr11:11位目的地址,用于ACALL和AJMP指令中。addr16:16位目的地址。用于LCALL和LJMP指令中。rel:补码表示的8位地址偏移量。范围:-128~+127D。bit:片内RAM或SFR的直接寻址位地址。@:间接寄存器的符号。/:位操作指令中对该位先取反再参与操作,不影响原值。(×):×中的内容。((×)):×指出的地址单元中的内容。→:指令操作流程方向。符号规定及注释意思25
3.3.1数据传送指令数据传送类指令:完成数据在单片机内部之间的传送。1.以累加器A为目的操作数的指令(4条,即4种寻址方式)2.以寄存器Rn为目的操作数的指令(3条)3.以直接地址为目的操作数的指令(5条)4.以间接地址为目的操作数的指令(3条)5.十六位数据传送指令(1条)6.查表指令(2条)7.累加器A与片外RAM传送指令(4条)8.栈操作指令(二条)9.交换指令(5条)261.以累加器A为目的操作数的指令(4条,即4种寻址方式)汇编指令格式MOVA,Rn;MOVA,direct;MOVA,@Ri; MOVA,#data 机器码格式11101rrr11100101direct1110011i01110100data操作(Rn)→A(direct)→A((Ri))→A#data→A注释将工作寄存器Rn(即R0~R7)内容传送到累加器A中将直接寻址所得的片内RAM单元内容或特殊功能寄存器中的内容传送到累加器A中将间接寻址(Ri为R0或R1)所得的片内RAM单元内容传送到累加器A中将立即数传送到累加器A中27
MOVA,#30H;(A)=30HMOVA,30H ;(A)=11HMOVA,@R1 ;(A)=11HMOVA,R1;(A)=30H例:起始30H单元内容为11H,R1中为30H282、以寄存器Rn为目的操作数的指令(3条)汇编指令格式MOVRn,A;MOVRn,direct;MOVRn,#data;机器码格式11111rrr1rrrdirect01111rrrdata操作(A)→Rn(direct)→Rn#data→Rn注释将累加器A中内容传送到工作寄存器Rn(即R0-R7)中将直接寻址所得的片内RAM单元内容或特殊功能寄存器中的内容传送到工作寄存器Rn(即R0-R7)中将立即数传送到工作寄存器Rn(即R0-R7)中这组指令的功能是把源操作数所指定的内容送到当前工作寄存器组R0-R7中的某个寄存器。源操作数有寄存器寻址、直接寻址和立即数寻址三种方式。Back29如:(A)=78H,(R5)=47H,(70H)=F2H,执行指令:MOVR5,A;(A)→R5,(R5)=78HMOVR5,70H;(70H)→R5,(R5)=F2HMOVR5,#A3H;A3H→R5,(R5)=A3H注意:在80c51指令系统中没有“MOVRn,Rn”传送指令。303、以直接地址为目的操作数的指令(5条)机器码格式11110101direct
10001rrrdirect10000101direct2direct11000011idirect01110101directdata汇编指令格式MOVdirect,A;MOVdirect,Rn;MOVdirect1,direct2;MOVdirect,@Ri;MOVdirect,#data;操作(A)→directRn→directdirect2→direct1((Ri))→direct
#data→direct注释将A中内容传送到直接地址direct所指出的片内存储单元中。将工作寄存器Rn(即R0-R7)中内容传送到直接地址direct所指出的片内存储单元中。将直接地址源direct所指出的片内存储单元中内容传送到直接地址目的direct所指出的片内存储单元中将间接寻址(Ri为R0或R1)所得的片内RAM单元内容传送到直接地址direct所指出的片内存储单元中将立即数传送到直接地址direct所指出的片内存储单元中这组指令的功能是把源操作数所指定的内容送入由直接地址direct所指出的片内存储单元中。源操作数有寄存器寻址,直接寻址,寄存器间接寻址和立即寻址等方式。314、以间接地址为目的操作数的指令(3条)(Ri)表示Ri中的内容为指定的RAM单元。 汇编格式 机器码格式操作 注释
MOV@Ri,A;1111011i(A)→(Ri)将累加器A中内容传送间接寻址(Ri为R0或R1)所得的片内RAM单元中。
MOV@Ri,direct;0101011i(direct)→(Ri)将直接寻址得的片内RAMdirect单元内容或特殊功能寄存器内容传送到间接寻址(Ri为R0或R1)所得的片内RAM单元中MOV@Ri,#data;0111011i#data→(Ri)
将立即数传送到间接寻data
址(Ri为R0或R1)所得的片内RAM单元中。
325、十六位数据传送指令(1条)
这条指令的功能是把16位常数送入DPTR。DPTR由DPH和DPL组成。例:MOVDPTR#1000H;(DPTR)=1000H, (DPH)=10H,(DPL)=00H汇编指令格式MOVDPTR,#data16;机器码格式10010000data(h)data(l)操作#data16→DPTR注释将16位立即数传送到DPTR中336、查表指令(2条)汇编指令格式MOVCA,@A+DPTR;MOVCA,@A+PC;机器码格式1001001110000011操作((A)+(DPTR))→A先(PC)+1→PC((A)+(PC))→A注释将程序存储器内容传送到A中将程序存储器内容传送到A中34执行下面程序段后结果如何?MOVDPTR,#2000H;(DPTR)=2000HMOVA,#0AH;(A)=0AHMOVCA,@A+DPTR;(A)=(200AH)=11H例1:若:初始ROM内容:2000H00H2001H01H2002H09H2003H04H2004H06H2005H08H2006HFFH2007H66H2008H45H2009HABH200AH11H35例2:若初始ROM内容为:
100FH 01H
1010H 02H
1011H 03H
1012H 04H
所以,最后结果为:(A)=01(R0)=01(PC)=1004H执行下面程序后的结果如何?
1000H740CMOV
A,#0CH;(A)=0CH1002H83MOVCA,@A+PC;(PC)=1002+1=1003H,(A)=((A)+(PC))=(0C+1003)
=(100FH)(A)=01H1003HF8MOVR0,A;(R0)=(A)=01H367、累加器A与片外RAM传送指令(4条)
在80c51指令系统中,CPU对片外RAM的访问只能用寄存器间接寻址的方式,且仅有四条指令:汇编指令格式机器码格式操作MOVXA,@Ri1110001i((Ri))→AMOVXA,@DPTR11100000((DPTR))→AMOVX@Ri,A1111001i(A)→(Ri)MOVX@DPTR,A11110000(A)→(DPTR)
第2,4两条指令以DPTR为片外数据存储器16位地址指针,寻址范围达64KB。其功能是DPTR所指定的片外数据存储器与累加器A之间传送数据。 第1,3两条指令是用R0或R1作低8位地址指针,由P0口送出,寻址范围是256字节。这两条指令完成以R0或R1为地址指针的片外数据存储器与累加器A之间的传送数据。37例:若片内RAM(30H)=01H,片外RAM(30H)=02H,执行下面程序段后的结果如何。 MOVR1,#30H ; (R1)=30H(片内)
MOVXA,@R1 ; (A)=02H(片外)
MOVR0,A ; (R0)=(A)=02H MOVA,@R1 ; (A)=((R1))=01H(片内)
MOVR2,A ; (R2)=(A)=01H388、栈操作指令(二条)汇编指令格式机器码格式操作注释PUSHdirect11000000先(SP)+1→SP将direct内容压入堆栈
direct后(direct)→(SP)POPdirect11010000先((SP))→direct将堆栈内容弹出到
direct 后(SP)-1→SPdirect单元中39
MOVSP,#18H ;(SP)=18HMOVA,#30H ;(A)=30HMOVDPTR,#1000H ;(DPTR)=1000HPUSHAcc ;(SP)=19H(19H)=30HPUSHDPH ;(SP)=1AH(1AH)=10HPUSHDPL ;(SP)=1BH(1BH)=00HPOPDPL ;(DPL)=00H(SP)=1AHPOPDPH ;(DPH)=10H(SP)=19HPOPAcc ;(A)=30H(SP)=18H409、交换指令(4条)(1)整字节变换指令汇编指令格式机器码格式操作注释XCHA,Rn11001rrr(A)←→(Rn)A的内容与Rn的内容互换XCHA,direct 11000101(A)←→(direct)A的内容与direct的内容互换
directXCHA,@Ri1100011i((A)←→((Ri))A的内容与((Ri))t的内容互换初始时:(A)=34H,(30H)=11H XCHA,30H; (A)=11H,(30H)=34H MOVR1,#30H; (R1)=30H XCHA,@R1 ; (A)=11H,(30H)=34H41(2)半字节交换指令第一条指令为低半字节交换指令。该指令将累加器A的低4位与R0或R1所指出的片内RAM单元的低4位数据相互交换,各自的高4位不变,其操作表示为:如:(R1)=30H,(30H)=11H=00010001B,(A)=34H=00110100B则:XCHDA,@R1;(A)=00110001B=31H;
(30H)=00010100B=14HSWAPA ;(A)=00010011=13HA半字节半字节RAM汇编指令格式机器码格式操作XCHDA,@Ri1101011i(A)0-3←→((Ri))0-3SWAPA11000100(A)0-3←→(A)4-7第二条指令为A的低四位与高四位交换指令。该指令将累加器A的低4位与A的高4位数据相互交换。423.3.2算术运算指令1.不带进位加法指令(四条)2.带进位加法指令(四条)3.带借位减法指令(四条)4.乘法指令(1条)5、除法指令(1条)6、加1指令(5条)7、减1指令(4条)8、十进制调整指令(1条)算术运算指令:用于操作数之间的加、减、乘除运算。【特点】:多数情况下:操作数之一在累加器A中,结果也保留在A中,运算结果要影响PSW(进位标志、奇偶和溢出标志等)。431、不带进位加法指令(四条)汇编指令格式机器码格式操作注释ADDA,Rn;00101rrr(A)+(Rn)→A将工作寄存器内容和累加器A中的数相加,“和”存放于累加器A中ADDA,direct;00100101(A)+(direct)→A将内部RAM单元内容和
direct累加器A中的数相加,“和”存放于累加器A中ADDA,@Ri;0010011i(A)+((Ri))→A将间接寻址(Ri为R0或R1)
所得的片内RAM单元中内容和累加器A中的数相加,“和”存放于累加器A中ADDA,#data;00100100(A)+#data→A将立即数的8位无符号二进制
data数和累加器A中的数相加,“和”存放于累加器A中44说明:上述指令的执行将影响标志位AC,Cy,OV,P。当“和”的第3位或第7位有进位时,分别将AC,CY标志位置1,否则为0。溢出标志位OV=C7+C6(异或,对加减法按照有符号数原则设置该位)当位6向位7进位,而位7不向c进位时ov=1;或者位6不向位7进位,而位7向c进位时,同样ov=1。该标志位只有带符号数运算时才有用。例:若:(A)=78H,(R0)=64H
执行ADDA,R0后,结果及PSW=?
(A):78H=01111000B
+(R0):64H=01100100B
(A):DCH=11011100B标志位:CY=0,AC=0,OV=1,P=1(和中1的个数为奇数),即:PSW=05H
结果:(A)=DCH(R0)=64H452带进位加法指令(四条,进位位CY参与运算)汇编指令格式机器码格式操作注释ADDCA,Rn;00111rrr(A)+CY+(Rn)→A将工作寄存器内容与CY及累加器A中的数相加,“和”存放于累加器A中ADDCA,direct;00110101(A)+CY+(direct)→A将内部RAM单元内容与
directCY及累加器A中的数相加,“和”存放于累加器A中ADDCA,@Ri;0011011i(A)+CY+((Ri))→A将间接寻址(Ri为R0或R1)
所得的片内RAM单元中内容与CY及累加器A中的数相加,“和”存放于累加器
A中ADDCA,#data;00110100(A)+CY+#data→A将立即数的8位无符号二进
data制数与CY及累加器A中的数相加,“和”存放于累加器A中46说明:本组指令的功能是同时把源操作数所指出的内容和进位标志位Cy都加到累加器A中,结果存放到A中,其余的功能和不带进位的ADD指令相同。本组指令常用于多字节加法。
例:设(A)=0C3H,(R0)=0AAH,(CY)=1。
执行指令“ADDCA,R0”后的结果及标志位如何?解:(A):C3H=11000011+(CY):1=0000000111000100+(R0):AAH=10101010
(A):6EH=01101110标志位:CY=1,OV=1,AC=0,结果:(A)=6EH,(R0)=0AAH。
47例:编程,将(30H),(31H)单元中的16位数与(40H),(41H)单元中的16位数相加,结果存于(30H),(31H)单元中。解:
MOVA,30H ADDA,40H;数的低8位相加
MOV30H,A;数的低8位和送30H MOVA,31H ADDCA,41H;带进位的高8位相加
MOV31H,A;数的高8位和送31H483、带借位减法指令(四条)汇编指令格式机器码格式操作注释SUBBA,Rn;10011rrr(A)-CY-(Rn)→A将工作寄存器内容与CY及累加器A中的数相减,“差”存放于累加器A中SUBBA,direct;10010101(A)-CY-(direct)→A将内部RAM单元内容与
directCY及累加器A中的数相减,“差”存放于累加器A中SUBBA,@Ri;1001011i(A)-CY-((Ri))→A将间接寻址(Ri为R0或R1)
所得的片内RAM单元中内容与CY及累加器A中的数相减,“差”存放于累加器
A中SUBBA,#data;10010100(A)-CY-#data→A将立即数的8位无符号二进
data制数与CY及累加器A中的数相减,“差”存放于累加器A中49
说明:这组指令的功能是从累加器A中减去源操作数所指出的数及进位位CY的值,差保留在累加器A中。 由于80c51指令系统中没有不带借位的减法指令,如需要的话,可以在“SUBB”指令前用“CLRC”指令将Cy清0,这一点必须注意.50例:设(A)=0C9H,(R2)=54H,Cy=1。
执行指令“SUBBA,R2”的结果如何?
解: (A)=0C9H=11001001B-)Cy=1=00000001B11001000B-)(R2)=54H=01010100B
(A)=74H=01110100B结果为:(A)=74H标志位为:Cy=0AC=0OV=1P=051
4、乘法指令(1条)汇编指令格式机器码格式操作MULAB ;10100100(A)×(B)→B15-8A7-0该指令将累加器A和寄存器B中两个无符号数相乘,所得16位积的低字节存放在A中,高字节存放中B中。OV=1;表示乘积大于255(FFH),OV=0;表示乘积小于或等于255,A中存放积,B=0。Cy位总是被清0例:(A)=4EH,(B)=5DH,执行指令“MULAB”后结果如何?
解:结果为:(B)=1CH,(A)=56H,表示积(BA)=1C56H,OV=1。
525、除法指令(1条)例:(A)=BFH,(B)=32H,执行指令“DIVAB”后:
结果为(A)=03H,(B)=29H;标志位CY=0,OV=0。汇编指令格式机器码格式操作DIVAB;10000100(A)/(B)的商→A,(A)/(B)的余数→BA中内容除以B中内容,整数商存于A中,余数存于B中。该指令执行后,CY和OV均被清0。若原(B)=00H,则结果无法确定,用OV=1表示,CY仍为0。536、加1指令(5条)除INCA影响奇偶p标志位,其余指令的操作不影响PSW。若原单元内容为FFH,加1后溢出为00H,也不影响PSW标志。汇编指令格式机器码格式操作注释INCA;00000100(A)+1→AA中内容加1。INCRn;00001rrr(Rn)+1→RnRn中内容加1。INCdirect;00000101(direct)+1→directdirect单元中内容加1。
directINC@Ri;0000011i((Ri))+1→(Ri)Ri间接寻址所得的片内RAM
单元中内容加1。INCDPTR;10100011(DPTR)+1→DPTRDPTR中内容加1例:比较指令“INCA”和“ADDA,#01H”的结果。解: “INCA”指令只将A的内容加1,奇偶p标志位变化,其它标志位没有变化。“ADDA,#01H”指令不仅将A的内容加1,还影响标志位变化。54例有两个无符号16位数,分别存放在从M1和M2开始的数据区中,低8位先存,高8位在后。写出两个16位数的加法程序,和存于R3(高8位)和R4(低8位)。设和不超过16位。解由于不存在16位数的加法指令,所以只能先加低8位,后加高8位,而在加高8位时要连低8位相加的进位一起相加。取操作数时用寄存器间接寻址方式,并用加1指令来修改寄存器的内容,亦即修改了操作数的地址。MOVR0,#Ml;第一个加数首地址送R0MOVR1,#M2;第二个加数首地址送R1MOVA,@R0,;取第一个加数低8位ADDA,@R1:低8位相加MOVR4,A;存和之低8位INCR0;修改地址INCR1;修改地址MOVA,@R0;取第一个加数高8位ADDC
A,@R1;高8位相加MOVR3,A;存和之高8位557、减1指令(4条)汇编指令格式机器码格式操作注释DECA;00010100(A)-1→AA中内容减1。DECRn;00011rrr(Rn)-1→RnRn中内容减1。DECdirect;00010101(direct)-1→directdirect单元中内容减1。
directDEC@Ri;0001011i((Ri))-1→(Ri)Ri间接寻址所得的片内RAM
单元中内容减1。
除DECA;其余指令的操作不影响PSW。无DPTR减1指令.568、十进制调整指令(1条)汇编指令格式机器码格式操作DAA; 11010100 若(A0-3)>9或AC=1,则(A0-3)+6→A0-3
同时,若(A4-7)>9或CY=1,则(A4-7)+6→A4-7该指令调整累加器内容为BCD码。(机器满16进1,10进制数满10进1,所以修正时加上6)这条指令跟在ADD或ADDC指令后,将相加后存放在累加器中的结果进行十进制调整,完成十进制加法运算功能。必须注意,本指令不能简单地把累加器A的16进制数变换成BCD码,也不能用于十进制减法的调整。
57例: 设累加器A内容为:01010110B(即为56的BCD码),寄存器R3的内容为01100111B(即67的BCD码),CY内容为1。求执行下列指令后的结果。
ADDCA,R3;
DAA;解:先执行ADDCA,R3; (A):01010110BCD:56
(R3):01100111BCD:67
(+)(CY):00000001BCD:01
和:10111110BCD:BE
即(A)=10111110且影响标志位CY=0,AC=0;
再执行DAA;因为A中的高四位值为11,大于9,低四位值为14,也大于9,所以内部调整自动进行加66H的操作:
10111110
调整+)01100110 100100100BCD:124即(A)=00100100=24BCD,CY=1;AC=1。583.3.3逻辑操作指令
逻辑操作指令包括:与、或、异或、清除、求反、移位等操作。该指令组全部操作数都是8位25条指令。多数情况下一个操作数在A中,结果也存于A。
1.简单操作指令(2条)
2.移位指令(4条)
3.逻辑“与”指令(6条)
4.逻辑“或”指令(6条)
5.逻辑“异或”指令(6条)591.简单操作指令(2条)汇编指令格式机器码格式操作注释CLRA;111001000→A累加器A清0指令,只影响标志位P。CPLA;11110100(A)
→A累加器A取反指令,不影响标志位汇编指令格式机器码格式操作注释RLA;00100011A中内容循环左移一位。
←a7←a0
←RRA;00000011A中内容循环右移一位。 →a7→a0→RLCA;00110011A中内容连同进位位CY一起循 ←CY←a7←a0←环左移一位。RRCA;00010011A中内容连同进位位CY一起循 →CY→a7→a0→环右移一位。2.移位指令(4条)例如:无符号8位二进制数(A)=10111101B=BDH,(CY)=0。将(A)乘2,执行指令“RLCA”后结果:(A)=01111010B=7AH,(CY)=1,17AH正是BDH的2倍。603.逻辑“与”指令(6条)汇编指令格式 机器码格式 操作ANLA,Rn; 01011rrr (A)∧(Rn)→A
ANLA,direct; 01010101 (A)∧(direct)→A
directANLA,@Ri; 0101011i (A)∧((Ri))→A
ANLA,#data; 01010100 (A)∧data→A data
ANLdirect,A; 01010010 (direct)∧(A)→direct
directANLdirect,#data; 01010011 (direct)∧#data→direct direct data这组指令中前四条指令是将累加器A的内容和操作数所指出的内容按位进行逻辑“与”,结果存放在A中。后两条指令是将直接地址单元中的内容和操作数所指出的单元的内容按位进行逻辑“与”,结果存入直接地址单元中。若直接地址正好是I/O端口,则为“读——改——写”操作。614.逻辑“或”指令(6条)汇编指令格式 机器码格式 操作ORLA,Rn; 01001rrr (A)∨(Rn)→A
ORLA,direct; 01000101 (A)∨(direct)→A
directORLA,@Ri; 0100011i (A)∨((Ri))→A
ORLA,#data; 01000100 (A)∨data→A data
ORLdirect,A; 01000010 (direct)∨(A)→direct
directORLdirect,#data; 01000011 (direct)∨#data→direct direct data这组指令的功能是将两个指定的操作数按位进行逻辑“或”,前四条指令的操作结果存放在累加器A中,后两条指令的操作结果存放在直接地址单元中。625.逻辑“异或”指令(6条)汇编指令格式 机器码格式 操作XRLA,Rn; 01101rrr (A)∨(Rn)→A
XRLA,direct; 01100101 (A)∨(direct)→A
directXRLA,@Ri; 0110011i (A)∨((Ri))→A
XRLA,#data; 01100100 (A)∨data→A data
XRLdirect,A; 01100010 (direct)∨(A)→direct
directXRLdirect,#data; 01100011 (direct)∨#data→direct direct data这组指令的功能是将两个指定的操作数按位进行“异或”,前四条指令的结果存放在累加器A中,后两条指令的操作结果存放在直接地址单元中这类指令的操作均只影响标志位P。63已知:M1、M2单元中有2个BCD码,试编程将其紧缩为一个字节并存入M1单元。解:MOVR1,#M1
MOVA,@R1
SWAPA INCR1
ORLA,@R1
MOVM1,A0000BCD10000BCD2M1M1+1BCD10000BCD1BCD20000BCD1累加器ABCD1BCD2BCD10000BCD1BCD20000BCD1BCD10000BCD1BCD2累加器A0000BCD1BCD10000BCD1BCD2累加器A0000BCD1BCD10000BCD1BCD2已知:M1、M2单元中有2个BCD码,试编程将其紧缩为一个字节并存入M1单元。解:MOVR1,#M1
MOVA,@R1
SWAPA INCR1
ORLA,@R1
MOVM1,A0000BCD10000BCD2已知:M1、M2单元中有2个BCD码,试编程将其紧缩为一个字节并存入M1单元。解:MOVR1,#M1
MOVA,@R1
SWAPA INCR1
ORLA,@R1
MOVM1,A已知:M1、M2单元中有2个BCD码,试编程将其紧缩为一个字节并存入M1单元。解:MOVR1,#M1 MOVA,@R1 SWAPA INCR1 ORLA,@R1 MOVM1,A643.3.4控制程序转移类指令80c51单片机有丰富的转移类指令(17条),包括无条件转移、条件转移和调用指令及返回指令等。
【特点】:通过修改程序指针PC的内容,使CPU转到另一处执行,从而改变程序的流向。所有这些指令的目标地址都是在64K字节程序存储器地址空间范围内1.无条件转移指令(4条)2.空操作指令(1条)3.条件转移指令(8条)4.调用和返回指令(4条)651、无条件转移指令(4条)
无条件转移指令是当程序执行到该指令时,程序无条件的转移到指令所提供的地址处执行。无条件转移指令有长转移、短转移、相对转移和间接转移4条指令。
(1)长转移指令
指令格式机器码注释
LJMP addr16; 00000010 addr16→PC a15-a8
a7-a0指令提供16位目标地址,将指令的第二、第三字节地址码分别装入PC的高8位和低8位中,程序无条件转向指定的目标地址去执行。由于直接提供16位目标地址,所以程序可转向64K程序存储器地址空间的任何单元。66
(2)短转移指令(绝对转移)AJMP addr11; a10a9a800001 先(PC)+2→PC a7-a0 后addr11→PC10-0 (PC15-11)不变这条指令提供了11位地址,可在2K范围内无条件转移到由a10-a0所指出的地址单元中。因为指令只提供低11位地址,范围为000H~7FFH,高5位为原PC15-11位值,因此,转移的目标地址范围为
A15A14A13A12A11000
0000
0000B~~A15A14A13A12A11111
1111
1111B。67例1:ORG 0500H0500H: AJMP 0703H;0703H=0000011100000011B ;Addr11=11100000011B ;指令地址PC=0500H ;即:PC=0000
010100000000BPC+2,PC=0502H=0000010100000010B,然后将Addr11送PC的低11位:PC=0000011100000011B(0703H).指令的机器码:a10a9a800001 =11100001=E1H a7-a0 =00000011=03H
例2:ORG 0700H0700H: AJMP 0832H;0832H=0000100000110010B ;Addr11=00000110010B ;指令地址PC=0700H ;即:PC=0000011100000000B ;该指令为二字节指令在执行时先PC+2,(PC=0702H=0000011100000010B,PC的高五位为:00000B,于0832H的高五位不同,不在同一个2k范围内。)该指令跨越2k的范围,错误。68
(3)相对转移指令(短转移)指令的操作数是相对地址,rel是一个带符号的偏移字节数(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 激发员工学习动力商业领域的策略
- 科技助力教室清洁智能清洁设备的应用
- 高效排风系统在学生餐厅的应用研究
- 饮食与孩子免疫力的关系研究
- 精准教育下的作业量与学业压力
- 科技背景下的小学劳动教育创新实践
- 科技助力学生食品安全教育
- 2025年度退股协议全新版:养老产业股东权益转让与养老基金管理合同
- 科技辅助教学技能提升方案
- 2025年度股权抵押投资顾问服务合同
- 电力沟施工组织设计-电缆沟
- 《法律援助》课件
- 《高处作业安全》课件
- 春节后收心安全培训
- 小学教师法制培训课件
- 电梯操作证及电梯维修人员资格(特种作业)考试题及答案
- 2024年山东铁投集团招聘笔试参考题库含答案解析
- 2023人教版(PEP)小学英语(三、四、五、六年级)词汇及常用表达法(课本同步)
- GA/T 718-2007枪支致伤力的法庭科学鉴定判据
- 核医学内分泌系统课件
- 新教材教科版五年级下册科学全册课时练(课后作业设计)(含答案)
评论
0/150
提交评论