单片机原理:第三章 MCS-51指令系统

上传人:努力****83 文档编号:193035276 上传时间:2023-03-07 格式:PPT 页数:106 大小:2.39MB
返回 下载 相关 举报
单片机原理:第三章 MCS-51指令系统_第1页
第1页 / 共106页
单片机原理:第三章 MCS-51指令系统_第2页
第2页 / 共106页
单片机原理:第三章 MCS-51指令系统_第3页
第3页 / 共106页
点击查看更多>>
资源描述
第三章第三章MCS-51指令系统指令系统 3.1 3.1指令系统概述指令系统概述 3.23.2寻址方式寻址方式 3.33.3MCS-51单片机的指令系统单片机的指令系统3.13.1 指令系统概述指令系统概述机器语言:用二进制编码表示每条指令,是计算机能直接识别和执行的语言。汇编语言:用助记符、符号和数字等来表示指令的程序语言,它容易理解和记忆,与机器语言指令是一一对应的。高级语言:如PLM,C等。机器语言与汇编语言机器语言与汇编语言机器语言:例如:“1020”的机器码指令为:01110100 00001010;74 0AH;把 10放到累加器 A中 00100100 00010100;24 14H;A加20结果仍放在A中汇编语言:汇编语言程序 机器语言程序MOV A,0AH 74 0AHADD A,20H 24 14H汇编语言不像高级语言(如BASIC)那样通用性强,而是属于某种计算机所独有,与计算机的内部硬件结构密切相关。指令格式指令格式 操作码 目的操作数,源操作数操作码:规定了指令所实现的操作功能,由25个英文字母表示。操作数:指出了参与操作的数据来源和操作结果存放的目的单元。操作数可以直接是一个数(立即数),或者是一个数据所在的空间单元的地址。操作码和操作数都有对应的二进制代码,指令代码由若干字节组成。对于不同的指令,指令的字节数不同。8051指令系统中,有单字节、双字节或三字节指令。例如:MOV A,00HMCS51MCS51单片机的指令系统单片机的指令系统 8051指令系统由111条指令组成 有255种指令代码 42种助记符 MCS51指令系统可分为五大类:数据传送指令28条算术运算指令24条逻辑运算及移位指令25条控制转移指令17条位操作指令或布尔操作指令17条各种寻址方式各种寻址方式51单片机寻址方式:七种 寄存器寻址;直接寻址;立即数寻址;寄存器间接寻址;变址寻址;相对寻址;位寻址;寻址方式是指CPU在执行指令时寻找操作数的方式。当前选中寄存器区的当前选中寄存器区的8个工作寄存器(个工作寄存器(R0R7)RnRidirect-8位内部位内部RAM单元地址单元地址 00H7FH 专用特殊功能寄存器专用特殊功能寄存器SFR的地址的地址80HFFH 立即数(立即数(8位)位)#data#data16 立即数(立即数(16位)位)当前选中寄存器区中可做当前选中寄存器区中可做间址寄存器间址寄存器的的 2个工作寄存器(个工作寄存器(R0、R1)相关指令符号的说明相关指令符号的说明addr16 16位目的地址,用于位目的地址,用于LCALL、LJMP指令。指令。地址范围地址范围64KB ROM空间空间addr11 11位目的地址,用于位目的地址,用于ACALL、AJMP指令。指令。地址范围地址范围2KB ROM空间空间relDPTR 数据地址指针,可做数据地址指针,可做16位位间址寄存器间址寄存器。bit 内内RAM(含(含SFR)中的直接位寻址。)中的直接位寻址。8位带符号的偏移量,位带符号的偏移量,用于用于SJMP和所有的条件转移指令中。和所有的条件转移指令中。范围范围-128127相关指令符号的说明相关指令符号的说明A 累加器累加器B 专用寄存器,用于专用寄存器,用于MUL和和DIV指令指令C 位累加器位累加器(PSW.7),进位,进位/借位标志借位标志 间址或基址寄存器前缀如:间址或基址寄存器前缀如:Ri,A+DPTR/位操作的前缀,表示对该位操作数取反位操作的前缀,表示对该位操作数取反(X)X中的内容中的内容(X)由由X寻址的单元中的内容寻址的单元中的内容箭头左边的内容被箭头右边的内容所代替箭头左边的内容被箭头右边的内容所代替DPTR,A+PC相关指令符号的说明相关指令符号的说明3.2 3.2 寻址方式寻址方式51单片机寻址方式:七种 寄存器寻址;直接寻址;立即数寻址;寄存器间接寻址;变址寻址;相对寻址;位寻址;寻址方式是指CPU在执行指令时寻找操作数的方式。各种寻址方式与指令组合实例各种寻址方式与指令组合实例MOVA,R2ADDA,#0D0HJNCAD30HMOVR0,AMOVCA,A+DPTRMOVDPTR,#TABLMOVA,80HSETBPSW.3寄存器寻址立即数寻址相对寻址寄存器间接寻址变址寻址立即数寻址直接寻址位寻址3.23.2 寻址方式寻址方式立即数寻址立即数寻址 例如:例如:MOV A,3AH:(3AH)A MOV A,3AH;3AH AMOV DPTR,2000H;2000H DPTR寻址空间:寻址空间:指令形式:指令形式:操作码操作码立即数立即数v程序存储器程序存储器v指令的操作数存放在程序存储器中指令的操作数存放在程序存储器中v操作数紧跟操作码操作数紧跟操作码OP后面后面立即寻址:立即寻址:OP#data寻址空间:寻址空间:指令的三种形式:指令的三种形式:操作码操作码操作数地址操作数地址v在指令中直接给出操作数的在指令中直接给出操作数的真实地址真实地址v操作码后面操作码后面紧跟一个实际紧跟一个实际操作数地址操作数地址操作码操作码操作数地址操作数地址立即数立即数操作码操作码源操作数地址源操作数地址目的操作数地址目的操作数地址内部内部RAM的低的低128字节字节特殊功能寄存器特殊功能寄存器SFR区区直接寻址直接寻址直接寻址直接寻址是访问是访问 SFR 的的唯一方法唯一方法00H7FH80HFFHCPU内部内部寻址方式寻址方式直接寻址直接寻址寻址空间:寻址空间:指令的三种形式:指令的三种形式:操作码操作码当前选定的当前选定的寄存器内容寄存器内容就是实际操作数就是实际操作数操作码操作码立即数立即数操作码操作码直接地址直接地址R0R7,由,由RS1、RS0确定确定寄存器区寄存器区A、B、CY(位),(位),DPTR、ABMOV A,R3;A (R3)例例1:ADD A,R3;A (A)+(R3)例例2:寄存器寻址:寄存器寻址:操作数操作数隐含隐含隐含寻址隐含寻址寻址方式寻址方式寄存器寻址寄存器寻址寻址空间:寻址空间:指令的三种形式:指令的三种形式:操作码操作码操作码操作码立即数立即数操作码操作码直接地址直接地址内部内部 RAM(R0、R1、SP)外部外部 RAM(R0、R1、DPTR)寄存器间接寻址:寄存器间接寻址:指令选定的指令选定的寄存器内容寄存器内容就是实际就是实际的的操作数操作数地址地址寻址方式寻址方式寄存器间接寻址寄存器间接寻址MOV R0,A例例1:操作码操作码PCPCF6HROMR030H;累加器传送指令;累加器传送指令内内RAM 30HA MOVX A,DPTR例例2:操作码操作码PCPCE0HROMDPTR2000H外外RAM 2000HA “读读”RD“读读”寻址方式寻址方式寄存器间接寻址寄存器间接寻址 以以DPTR或或PC作作基址寄存器基址寄存器,A作作变址寄存器变址寄存器,两者相加两者相加形成形成操作数地址操作数地址。寻址空间:寻址空间:程序存储器程序存储器(A+DPTR、A+PC)指令形式:指令形式:操作码操作码寻址方式寻址方式基址寄存器加变址基址寄存器加变址寄存器间接寻址寄存器间接寻址MOVC A,A+DPTR例:例:操作码操作码PCPCDPTR2400HA 0FH93HROM 240FH设(设(A)=0FH(DPTR)=2400H ALU“读读”PSEN“读读”MOVC A,A+DPTR寻址方式寻址方式基址寄存器加变址基址寄存器加变址寄存器间接寻址寄存器间接寻址程序存储器程序存储器寻址空间:寻址空间:指令的三种形式:指令的三种形式:操作码操作码 rel操作码操作码 直接地址直接地址 rel操作码操作码 立即数立即数 rel相对寻址相对寻址以以当前当前PC值值为基准地址,加上指令的偏移量为基准地址,加上指令的偏移量“rel”,结果为目标地址。,结果为目标地址。rel为为有符号补码数有符号补码数,范围:范围:-128+127一般为双字节或三字节指令一般为双字节或三字节指令寻址指令寻址指令执行地址执行地址目标地址目标地址寻址方式寻址方式相对寻址相对寻址JNZ rel例:例:;累加器累加器A不等零则转移不等零则转移 设设:rel=23H2025H2002H2001H2000H ROM70H23H下一条指令下一条指令.操作码操作码PCPCPC(PC)=2002Hrel=23H修正后转移修正后转移目标地址目标地址D(PC)=2025HPCALU偏移量偏移量(PC)=2002HRel=23H)005202HD=寻址方式寻址方式相对寻址相对寻址2025H2112H2111H2110H ROMDFHF2H下一条指令下一条指令.操作码操作码PCPCPC(PC)=2112Hrel=F2H修正后转移修正后转移目标地址目标地址-D(PC)=2104HALU偏移量偏移量例:例:DJNZ R7,rel ;(R7)1不为不为“0”则转则转PC2104H指指 令令(PC)=2112HRel=F2H)FF4012HD=寻址方式寻址方式相对寻址相对寻址寻址空间:寻址空间:片内片内RAM的的20H2FH字节地址字节地址位地址:位地址:00H7FH,共,共128位。位。SFR中字节地址能被中字节地址能被8整除的整除的12个寄存器个寄存器,共共93位。位。以访问触发器的方式,对内部以访问触发器的方式,对内部RAM、SFR的的位地址空间位地址空间进行访问,称为位寻址。进行访问,称为位寻址。位地址位地址用于布尔指令。用于布尔指令。共共221位位专为布尔指令设计专为布尔指令设计寻址方式寻址方式位寻址位寻址寄存器寄存器R0R7、A、BCY、DPTR片内片内内内RAM的低的低128字节、字节、特殊功能寄存器特殊功能寄存器SFR直接寻址直接寻址direct寄存器间址寄存器间址R0、R1、SP R0、R1、DPTR片内片内RAM、片外片外RAM与与I/O口口立即数立即数#data程序存储器程序存储器程序存储器程序存储器基址加变址基址加变址A+DPTR、A+PC程序存储器程序存储器相对寻址相对寻址PC+rel位寻址位寻址片内片内RAM 20H2FH、部分部分SFRbit利用的变量利用的变量 使用的空间使用的空间方方 式式寻址方式寻址方式总结总结3.3 MCS-51单片机的指令系统单片机的指令系统 MCS51指令系统由111条指令组成 有255种指令代码 42种助记符 MCS51指令系统可分为五大类:数据传送指令29条 算术运算指令24条 逻辑运算及移位指令25条 控制转移指令17条 位操作指令或布尔操作指令17条一、数据传送类指令一、数据传送类指令 数据传送类指令是把源操作数传送到目的操作数,指令执行后,源操作数不改变,目的操作数修改为源操作数。数据传送指令不影响标志,通常指C、AC和 OV。数据传送类指令用到的助记符有8种:片内传送:MOV片外传送:MOVX查表传送:MOVC累加器交换:XCH,XCHD,SWAP堆栈操作:POP,PUSH一、数据传送类指令一、数据传送类指令 源操作数可以采用:寄存器 寄存器间接 直接 立即 寄存器基址加变址5种寻址方法。目的操作数可以采用前3种寻址方法数数据据类类传传送送指指令令汇汇总总1.片内数据传送指令片内数据传送指令MOV 指令格式:MOV 目的操作数,源操作数 操作数为片内数据存储器,共有5种类型:data,A,Rn,direct,Ri。以累加器为目的操作数以累加器为目的操作数的的MOV指令指令 以累加器为目的操作数的指令(4条,即4种寻址方式)rrr表示寄存器Rn的编码,rrr000-111分别表示R0R7 机器码中i表示间接寻址寄存器Ri的编码,i=0-l表示R0Rl。MOV A,#data ;(A)data 机器码:01110100 dataMOV A,Rn ;(A)(Rn)机器码:11101rrrMOV A,direct;(A)(direct)机器码:11100101 directMOV A,Ri ;(A)(Ri)机器码:1110011i以以寄存器寄存器Rn为为目的操作数的目的操作数的MOV指令指令例如:(A)=78H,(R5)=47H,(70H)=F2HMOV R5,A;MOV R5,70H;MOV R5,A3H;MOV Rn,#data;(Rn)data 机器码:01111rrr dataMOV Rn,A;(Rn)(A)机器码:11111rrrMOV Rn,direct;(Rn)(direct)机器码:10101rrr direct(A)R5,(R5)=78H(70H)R5,(R5)=F2HA3HR5,(R5)=A3H注:8051指令系统中没有“MOV Rn,Rn”传送指令。MOV direct,#data;(direct)data 机器码:01110101 dataMOV direct,A;(direct)(A)机器码:11110101MOV direct,Rn;(direct)(Rn)机器码:10001rrrMOV direct,direct;(direct)(direct)机器码:10000101 目的direct 源directMOV direct,Ri;(direct)(Ri)机器码:1000011i direct以直接寻址为目的操作数以直接寻址为目的操作数的的MOV指令指令例如:MOV 30H,#50H;MOV 00H,#10H;MOV 0B0H,A;MOV PSW,10H;MOV 40H,R5;MOV 7FH,R0;(30H)50H(00H)=(R0)10H(0B0H)=(P3)(A)=15H(PSW)=(0D0H)(10H)=15H(40H)(R5)=57H(7FH)(R0)=(10H)=15H以间接地址为目的操作数以间接地址为目的操作数的的MOV指令指令MOV Ri,#data;(Ri)data 机器码:0111011i dataMOV Ri,A;(Ri)(A)机器码:1111011iMOV Ri,direct;(Ri)(direct)机器码:1010011i direct例如:MOV R0,#70H;MOV R1,A;MOV R0,90H;(R0)=(10H)70H(R1)=(40H)(A)=15H(R0)=(60H)(90H)=55H数据传送类指令例题:数据传送类指令例题:例:设例:设(80H)=70H,(70H)=30H,P1口口为输入口,当前的输为输入口,当前的输入状态为入状态为AAH,执行下面程序,分析执行结果。,执行下面程序,分析执行结果。MOVR0,#80HMOVA,R0MOVR1,AMOVB,R1MOVR0,P1;80HR0;(80H)=70H A;(R1)=70H;(B)=30H;AAH 80H(80H)=AAH(B)=30H(R1)=70H(R0)=80H十六位数据传送指令十六位数据传送指令MOV DPTR,#data16;(DPTR)#data16 机器码:90 data158 data70例如:MOV DPTR,#2000H;(DPTR)2000H片外数据传送指令片外数据传送指令MOVX 片外数据传送指令是片外数据存储器与累加器A之间的传送指令。片外数据存储单元可用DPTR间接寻址或Ri间接寻址方式表示。其中:(P2)(Ri)表示以(P2)为高8位地址,以(Ri)为低8位地址的片外数据存储器单元。u上述4条指令也是8051的输入输出指令MOVX A,DPTR ;(A)(DPTR)机器码:E0MOVX DPTR,A ;(DPTR)(A)机器码:F0MOVX A,Ri ;(A)(P2)(Ri)机器码:1110001iMOVX Ri,A ;(P2)(Ri)(A)机器码:1111001i2.片外数据传送指令片外数据传送指令MOVX例:1.将地址为3000H的片外数据存储器单元的内容21H传送到片内地址为30H的单元中。2.将寄存器R5中的内容32H传送到片外地址为3010H的数据存储器单元中 解:MOV DPTR,#3000H ;DPTR3000H MOVX A,DPTR ;A(DPTR)=(3000H)=21H MOV 30H,A ;30H (A)=21H MOV A,R5 ;A(R5)=32H MOV DPTR,#3010H ;DPTR3010H MOVX DPTR,A ;(DPTR)=3010H (A)=32H MOVDPTR,#0203H MOVXA,DPTR MOV30H,A MOV A,#0FH MOVXDPTR,A执行结果为执行结果为:(DPTR)=0203H(30H)=FFH(0203H)=(A)=0FH;DPTR 0203H;A (DPTR);30H (A);A 0FH ;(DPTR)(A)例例3:设外部设外部RAM(0203H)=FFH,分析以下指令执行后,分析以下指令执行后,DPTR、内部(、内部(30H)、外部()、外部(0203H)的值分别是多少?)的值分别是多少?2.片外数据传送指令片外数据传送指令MOVX3.MOVC查表传送指令查表传送指令(2条条)又称为程序存储器传送指令程序存储器传送指令,将程序存储器中的数据采用变址寻址变址寻址方式,传送到累加器累加器A中 MOVC A,A+PC指令取指后取指后PC增增“1”,以,以当前当前PC作基作基址,址,A作变址,两者相加形成作变址,两者相加形成16位位ROM地址,将该单元地址,将该单元内容读入内容读入A 常用于查表操作 只能查找指令所在地址以后256B范围内的代码或常数,称为近程查表近程查表。“MOVC A,ADPTR”指令以DPTR为基址寄存器进行查表,所以查表范围可达整个程序存储器的64KB空间,称为远程查表远程查表。MOVC A,A+PC ;(A)(A)+(PC)机器码:83MOVC A,A+DPTR;(A)(A)+(DPTR)机器码:933.MOVC3.MOVC查表传送指令查表传送指令例如:在程序存储器中,数据表格为 1010H:02H 1011H:04H 1012H:06H 1013H:08H执行程序 1000H:MOV A,#0DH 1002H:MOVC A,A+PC 1003H:MOV R0,A结果为:(A)=02H,(R0)=02H,(PC)=1004H。;0DH A,查表的偏移量;(0DH+1003H)A;(A)R03.MOVC3.MOVC查表传送指令查表传送指令 又如:在程序存储器中,数据表格为 7010H:02H 7011H:04H 7012H:06H 7013H:08H程序:1000H:MOV A,#10H 1002H:PUSH DPH 1004H:PUSH DPL 1006H:MOV DPTR,#7000H 1009H:MOVC A,ADPTR 100AH:POP DPL 100CH:POP DPH结果:(A)=02H,(PC)=100EH,(DPTR)=原值。;10H A;DPH入栈;DPL入栈;7000H DPTR;(10H7000H)A;DPL出栈;DPH出栈3.MOVC3.MOVC查表传送指令查表传送指令例:设在程序存储器地址为1000Hl009H的存储单元中存放09的平方表,30H单元中存放变量X,任给X的值,求出Y=X2,并将Y存入40H单元中。解:MOV DPTR,#1000HMOV A,30HMOVC A,A+DPTRMOV 40H,A;(DPTR)1000H,DPTR指向平方表首地址;(A)(30H)=02H,设X=2,取X到累加器A;(A)(A)+(DPTR)=(02H+1000H)=(1002H)=04H;(40H)(A)=04H,存Y到 40H单元 4.数据交换指令数据交换指令(5条条)寄存器内容与累加器内容交换寄存器内容与累加器内容交换XCH A,Rn (n=07);(A)(Rn)单字节指令单字节指令 内内RAM(含(含SFR)内容与累加器内容交换)内容与累加器内容交换XCH A,direct;(A)(direct)双字节指令双字节指令 内部内部RAM内容与累加器内容交换内容与累加器内容交换XCH A,Ri (i=0,1);(A)(Ri)单字节指令单字节指令 内部内部RAM内容低内容低4位与累加器低位与累加器低4位内容交换位内容交换XCHD A,Ri (i=0,1);(A30)(Ri)30)单字节指令单字节指令A(Ri)4.数据交换指令数据交换指令(5条条)累加器累加器A高高4位与低位与低4位交换位交换SWAP A;(A30)(A74)单字节指令单字节指令A 4.数据交换指令数据交换指令(5条条)4.数据交换指令数据交换指令例 已知:(R0)=20H,(20H)=75H,(A)=3FH 执行下列指令后R0、A、20H单元内容为多少?解:由上述分析可知,运行程序后:(R0)=20H,(A)=0F7H,(20H)=35HXCH A,R0 ;(A)(R0)=(20H),(A)=75H,(20H)=3FHXCHD A,R0 ;(A)03 (R0)03,(A)=7FH,(20H)=35HSWAP A ;(A)03(A)47,(A)=0F7H5.栈操作指令栈操作指令(2条条)入栈入栈:PUSH direct;先(SP)+1 SP,后(direct)(SP)出栈出栈:POP direct ;先(SP)direct,后(SP)-1 SP 本操作不影响标志位,堆栈中数据的压入和弹出遵循“先进后出”的规律。例:进入中断服务子程序时,把数据指针DPTR、程序状态字PSW和累加器A保护进栈。当前SP为38H。PUSH DPLPUSHDPHPUSH PSWPUSH A 指令执行后,SP=3CH。数据传送类指令小结数据传送类指令小结算术运算类指令算术运算类指令(24(24条条)包括加、减、乘、除基本四则运算,共计24条。有三类八种助记符:加法指令:ADD,ADDC,INC,DA减法指令:SUBB,DEC乘除指令:MUL,DIV 算术运算指令(加1和减1指令除外)影响标志位(进位 CY、半进位AC、溢出位 OV)。借助溢出标志,可对带符号数进行2的补码运算。借助进位标志,可进行多精度加、减运算;也可以对压缩BCD数进行运算。运运算算类类指指令令加法加法目的操作数累加器A,另一操作数片内RAM 指令助记符指令助记符说说 明明字字 节节 2112ADD A,#dataADD A,Rn立即数加到累加器立即数加到累加器寄存器内容加到累加器寄存器内容加到累加器ADD A,RiADD A,direct内内RAM内容加到累加器内容加到累加器直接地址内容加到累加器直接地址内容加到累加器2112ADDC A,#dataADDC A,Rn立即数和进位加到累加器立即数和进位加到累加器寄存器内容和进位加到累加器寄存器内容和进位加到累加器ADDC A,RiADDC A,direct内内RAM内容和进位加到累加器内容和进位加到累加器直接地址内容和进位加到累加器直接地址内容和进位加到累加器加法加法例:设(A)=0C3H,(R0)=0AAH。ADD A,R0 结果:(A)=6DH 标志位:CY=1,AC=0 溢出标志OV=C7C6=1 0=1减法减法 目的操作数累加器A,另一操作数片内RAM 没有不带借位的减法指令,可以在“SUBB”指令前用“CLR C”指令将CY清零。两个带符号数相减,其结果必须要考查OV标志,若OV为1,表示差数溢出,即破坏了正确结果的符号位。指令助记符指令助记符说说 明明字字 节节 2112SUBB A,#dataSUBB A,RnSUBB A,RiSUBB A,direct累加器减立即数和借位累加器减立即数和借位累加器减寄存器内容和借位累加器减寄存器内容和借位累加器减累加器减RAM内容和借位内容和借位累加器减直接地址内容和借位累加器减直接地址内容和借位减法减法例:将存储单元40H与50H内容相减,减得的差存入60H单元中,即(40H)-(50H)(60H)CLR CMOV A,40HSUBB A,50HMOV 60H,A解:;(CY)0;(A)(40H);(A)(A)-(50H)-(CY);(60H)(A)减法减法 例 已知:X=2288H,Y=4488H,假设X已存入41H与40H单元,而Y已存入51H与50H单元,编写X-Y的程序,并将X-Y的差存入61H与60单元中CLR C ;(CY)0MOV A,40H ;(A)(40H)SUBB A,50H ;(A)(A)-(50H)-(CY)MOV 60H,A ;(60H)(A)MOV A,41H ;(A)(41H)SUBB A,51H ;(A)(A)-(51H)-(CY)MOV 61H,A ;(61H)(A)解:增量指令增量指令INC 只有一个操作数片内RAM 除除“INC A”指令影响指令影响 P 标志位,其余指令不影响任何标标志位,其余指令不影响任何标志位。志位。指令助记符指令助记符说说 明明字节字节 1121INC AINC Rn累加器内容加累加器内容加“1”寄存器内容加寄存器内容加“1INC direct内内RAM(含(含SFR)内容加)内容加“1INC Ri内内RAM内容加内容加“1INC DPTR数据指针数据指针DPTR内容加内容加“11减量指令减量指令DEC 只有一个操作数片内RAM 除除“DEC A”指令影响指令影响 P 标志位,其余指令不影响任何标志位,其余指令不影响任何标志位。标志位。指令助记符指令助记符说说 明明字字 节节 1121DEC ADEC Rn累加器内容减累加器内容减“1”寄存器内容减寄存器内容减“1”DEC direct内部内部RAM(含(含SFR)内容减)内容减“1”DEC Ri内部内部RAM内容减内容减“1”十进制调整指令十进制调整指令DA A;对累加器对累加器A,作,作BCD码码加法加法后进行后进行“过过9补补6”调整调整若若(A3A0)9 或者或者AC=1 则(则(A3A0)(A3A0)+06H若若(A7A4)9 或者或者CY=1则(则(A7A4)(A7A4)+60H注意:注意:DA 指令不能对指令不能对BCD码码减法减法的结果进行调整。的结果进行调整。单字节指令单字节指令BCDH BCDLA例例 设设(A)=37H,(R3)=36H,执行下面的程序后,执行下面的程序后A的值是多少?的值是多少?0011 0111(37H)0011 0110(36H)(6DH)0110 1101过过“9”0000 0110 0111 0011补补“6”(73H);(A)=6DH;(A)=73H 0111 0011(73H)1001 1001(99H)10000 1100(0CH)CY0110 01100111 0010(72H);(A)=0CH CY=1;(A)=72H过过“9”补补“6”110111100 ADD A,R3DA A ADD A,#99HDA A“+99”就等于减就等于减“-1”互补互补DA A 只能跟在加法指令之后只能跟在加法指令之后。十进制调整指令十进制调整指令乘法指令乘法指令7、MULMUL ABDIV AB单字节指令单字节指令;执行执行(A)(B)(BA)的操作的操作CY=08、DIV单字节指令单字节指令;执行执行(A)/(B)后,商后,商 A,余,余 BCY=0乘法指令乘法指令例 如图所示,被乘数x=6655H存放在地址为31H、30H单元中,乘数y=33H存放在地址为40H单元中,将x、y的乘积存放在50H、51H、52H。即:x*y=(31H,30H)*(40H)(52H,51H,50H)乘法指令乘法指令MOVA,30HMOVB,40HMULABMOV50H,AMOV51H,BMOVA,31HMOVB,40HMULAB ADDA,51HMOV51H,AMOVA,#0ADDCA,BMOV52H,A算术运算类指令小结算术运算类指令小结逻辑运算类指令逻辑运算类指令(24(24条条)有二类,双操作数逻辑运算指令与、或、异或运算,ANL、ORL、XRL、单操作数指令:循环移位运算,RL、RLC、RR、RRC、CLR和CPL。双操作数逻辑运算指令不影响标志位。位逻辑指令属于布尔变量操作类指令。逻辑运算类指令逻辑运算类指令(24(24条条)逻辑运算类指令逻辑运算类指令(24(24条条)双操作数逻辑运算指令其目的操作数只能是累加器A与直接寻址的存储单元 direct。所有指令操作数都是8位,即片内数据。双操作数逻辑运算指令双操作数逻辑运算指令任何1位十六进制数与0与为0;与F 与不变。因此,任何数与0FH与,将屏蔽该数的高4位而保留其低4位。任何1位十六进制数与0或不变,与F 或为F。因此,任何数与0FH 或,其高4位保持不变,而低4位为F。任何1位十六进制数与0异或 不变,与F 异或 将各位取反。因此,任何数与0FH异或,其高4位不变,而其低4位取反。例 已知:(30H)=(31H)=(32H)=0AAH,执行下列指令后30H、31H、32H单元内容为多少?解:ANL 30H,#0FH ORL 31H,#0FHXRL 32H,#0FH(30H)=0AAH=1010 1010 0 FH=0000 1111 0 AH=0000 1010(31H)=0AAH=1010 1010 0 FH=0000 1111 AFH=1010 1111(30H)=0AAH=1010 1010 0 FH=0000 1111 A5H=1010 0101;(30H)(30H)0FH=AAH 0FH=0AH;(31H)(31H)0FH=AAH 0FH=0AH;(30H)(32H)0FH=AAH 0FH=0AH双操作数逻辑运算指令双操作数逻辑运算指令例 根据累加器中位40的状态用逻辑与、或指令控制P1口位40的状态ANL A,#00011111B ;屏蔽A75ANL P1,#11100000B ;清P1的低五位ORL P1,A ;按A60设置P1.4P1.0 分析这段程序读者可能发现需要置位的口线上先输出0状态。这样就将发生为时1个机器周期的短暂的“闪烁”。如果在应用上不允许这样的“闪烁”,则应把程序改为:ANL A,#00011111B ;屏蔽A75ORL P1,A ;使P160按A60 置位ORL A,#11100000B ;ANL P1,A ;使P160按复位单操作数逻辑运算指令单操作数逻辑运算指令(2)A取反 CPL A;(A)(A)机器码:1111 0100(1)A清零 CLR A;(A)00H 机器码:0010 0011单操作数逻辑运算指令单操作数逻辑运算指令(6)A带进位循环右移 RR A;CYA7A0机器码:0001 0011(5)A带进位循环左移 RLC A;CYA7A0机器码:0011 0011(3)A循环左移 RL A;A7A0机器码:0010 0011(4)A循环右移 RRC A;A7A0机器码:0000 0011单操作数逻辑运算指令单操作数逻辑运算指令例 已知(A)=00100010=22H,(CY)=1,分别执行CPL A,RL A,RR A指令后A的内容是什么?解:CPL A;(A)(A)=11011101=DDH RL A;(A)01000100=44H,相当于A乘以2 RR A;(A)00010001=11H,相当于A除以2逻辑运算指令练习逻辑运算指令练习拼字拼字例 编写拼字和拆字程序 1)拼字:将41H单元与40H单元中7与6的ASCII码37H、36H拼为十进制数的BCD码76,存放在50H单元中。即(41H)=37H 76(50H),见表。(40H)=36H 2)拆字:将50H单元中十进数的BCD码76,拆为2个BCD码07与06,分别存放在60H和61H单元中。即(50H)=76H 06(60H),见表。07(61H)解:(1)拼字MOV 50H,40H ;(50H)(40H)=36HANL 50H,#0FH ;(50H)(50H)0FH=06HMOV A,41H ;(A)(41H)=37HANL A,#0FH ;(A)(A)0FH=07H RL ARL ARL ARL A ;累加器A左移4次,将高四位与低四位互换,(A)=70HORL 50H,A ;(50H)(50H)(A)=76逻辑运算指令练习逻辑运算指令练习拆字拆字(2)拆字MOV A,50H ;(A)(50H)=76HSWAP A ;(A)67HANL A,#0FH ;(A)(A)0FH=07HMOV 61H,A ;(61H)(A)=07HMOV 60H,50H ;(60H)(50H)=76HANL 60H,#0FH ;(60H)(60H)0FH=07H 思考题:若要将2位十进制数的BCD码转换成2个ASCII码应如何编写程序?逻辑运算类指令小结逻辑运算类指令小结控制转移类指令控制转移类指令(17(17条条)控制转移类指令控制转移类指令 控制程序转移类指令共有17条,不包括按布尔变量控制程序转移的指令。分无条件转移;条件转移子程序调用与返回这类指令用到的助记符有:ACALL、AJMP、LCALL、LJMP、SJMP、JMP、JZ、JNZ、CJNE、DJNZ。全存贮空间的长调用、长转移;按2KB分块的程序空间内的短转移;绝对转移;相对转移;长转移长转移LJMP addr16;PC addr16addr15802H 机器码机器码addr70三字节指令三字节指令 短转移短转移AJMP addr11;PC100 A100 A10A9A800001A7 A0机器码机器码 ;PC (PC)+2转移范围转移范围 2KB转移范围转移范围 64KB无条件转移指令无条件转移指令双字节指令双字节指令无条件转移指令无条件转移指令AJMP 将程序存储器分为:将程序存储器分为:32个区:由个区:由PC1511决定决定,每个每个区区2KB;每个区分每个区分8页:由页:由A10、A9、A8决决定。定。A7 A0A10A9A8 00001PC15 PC11PC10PC9PC8PC7 PC0.在在2区形成区形成11位目标地址位目标地址.AJMP0区区1区区31区区0000H07FFH0800H0FFFH1000H17FFHF800HFFFFH.1000H17FFH保持高保持高5位地址位地址以确定某区以确定某区0 0 0 1 02区区2KB范围内范围内页内地址页内地址页地址页地址操作码操作码00001例:AJMP add11的执行过程A10A9A800001A7 A0机器码机器码无条件短转移指令无条件短转移指令 AJMP只能实现只能实现2KB范围内范围内的转移,转移时必须保持高的转移,转移时必须保持高5位地位地址不变址不变 例如:例如:2350H AJMP转移范围:转移范围:2000H27FFH指令指令2350H AJMP 4000H?SJMP rel;PC (PC)+rel 指令中的指令中的rel是是8位带符号补码,范围位带符号补码,范围-128+127。可由汇编自动计算并填入指令代码,也可手工计算。可由汇编自动计算并填入指令代码,也可手工计算。;PC (PC)+2 10000000 rel机器码机器码双字节指令双字节指令计算式:计算式:rel=目标地址目标地址-(PC+2)相对转移指令相对转移指令相对转移指令相对转移指令例:在下列程序段中,计算出相对转移指令SJMP NEXT 机器码中rel 值。指令地址 汇编程序 机器码(PC)目标2010H NEXT:ADD A,#05H;24 05 (PC)当前2030H SJMP NEXT;80 rel(PC)下条2032H MOV A,#03H;74 03解:(PC)目标2010H,(PC)下条=(PC)当前+2=2030H+2=2032H,Rel=(PC)目标-(PC)下条=2010H-2032H=-22H,rel为负数,所以用补码表示:rel补码=M+rel=100H+(-22H)=0DEH,指令机器码是80DE例:分析指令例:分析指令 SJMP$符号符号“$”指指本指令执行前的本指令执行前的PC值值,指令,指令“SJMP$”执行后,程序仍然转移回此指令继续执行,计执行后,程序仍然转移回此指令继续执行,计算机于是不断的执行这一指令,相当于进入等待算机于是不断的执行这一指令,相当于进入等待状态。状态。原地踏步原地踏步相对转移指令相对转移指令rel=0FEH=(-2)补补间接长转移间接长转移(散转散转)指令指令 用散转指令,可根据累加器中的值,实现多路用散转指令,可根据累加器中的值,实现多路分支转移。分支转移。JMP A+DPTR;PC (A)+(DPTR)73H机器码机器码单字节指令单字节指令指令助记符指令助记符说说 明明字字 节节 3221长转移长转移LJMP addr16绝对转移绝对转移AJMP addr11短转移短转移SJMP rel间接长转移间接长转移JMP A+DPTR(散转指令)(散转指令)可以有可以有n个目标地址个目标地址无条件转移指令小结无条件转移指令小结条件转移指令条件转移指令指令助记符指令助记符说说 明明字节字节 223323JZ relJNZ relCJNE A,#data,relCJNE Rn,#data,relDJNZ Rn,relDJNZ direct,rel累加器累加器A为零则转移为零则转移累加器累加器A不为零则转移不为零则转移累加器累加器A与立即数不等则转移与立即数不等则转移寄存器与立即数不等则转移寄存器与立即数不等则转移寄存器减寄存器减“1”不等零则转移不等零则转移内内RAM(含(含SFR)减)减“1”不为零则转移不为零则转移CJNE A,direct,relCJNE Ri,#data,rel 间接间接RAM与立即数不等则转移与立即数不等则转移累加器累加器A与直接内与直接内RAM不等则转移不等则转移33条件转移指令条件转移指令例 从P1.7输出5个方波PULSE:MOV R2,#10 ;预置方波数 CPL P1.7 ;1个机器周期 DJNZ R2,PULSE;2个机器周期子程序调用及返回指令子程序调用及返回指令 长调用长调用LCALL addr16;PC addr16addr15812H 机器码机器码addr70三字节指令三字节指令 ;PC (PC)+3;SP (SP)+1,(SP)PC70 ;SP (SP)+1,(SP)PC158;在调用子程序之前,保护断点地址在调用子程序之前,保护断点地址转向子程序转向子程序子程序调用及返回指令子程序调用及返回指令ACALL addr11双字节指令双字节指令 ;PC (PC)+2;SP (SP)+1,(SP)PC70;SP (SP)+1,(SP)PC158;在调用子程序之前,保护断点地址在调用子程序之前,保护断点地址A10A9A810001A7 A0机器码机器码;PC100 A100 转向子程序转向子程序在在2KB范围内范围内 绝对调用绝对调用子程序调用及返回指令子程序调用及返回指令 子程序返回子程序返回RET ;PC158 (SP),SP (SP)-122H机器码机器码单字节指令单字节指令 中断返回中断返回RETI32H机器码机器码单字节指令单字节指令 ;PC70 (SP),SP (SP)-1;PC158 (SP),SP (SP)-1 ;PC70 (SP),SP (SP)-1空操作指令空操作指令4、空操作、空操作NOP ;PC (PC)+1单字节指令单字节指令00H机器码机器码控制转移类指令小结控制转移类指令小结布尔处理类指令布尔处理类指令1717条条布尔处理类指令布尔处理类指令 由MCS-51硬件结构中的布尔处理器进行运算 进位标志C的相当于CPU中的累加器A,通过C完成位的传送和逻辑运算。位地址内部RAM20H2FH单元位寻址区(128位)和专用寄存器中的可寻址位(分布在80HFFH范围内,但不是连续的)。位地址的表达方式位地址的表达方式 位地址的表达有多种方式:1)直接地址方式:如0D5H;2)点操作符方式:如PSW.5;3)位名称方式:如F0;4)用户定义名方式:如用伪指令bit USR_FLG bit F0经定义后,允许指令中用USR_FLG代替F0CYD7 D6 D5 D4 D3 D2 D1 D0ACF0RS1RS0OV PPSW.7 PSW.6 PSW.5PSW.0 F00D5H位传送指令位传送指令2 2条条 MOV C,bit ;(CY)(bit)机器码:1010 0010 bit MOV bit,C ;(CY)(bit)机器码:1010 0010 bit 其中:bit为位地址区(20H2FH)及可位寻址的特殊功能寄存器的某个位地址。位状态控制指令位状态控制指令6 6条条 (1)位清零指令位清零指令 CLR C ;(CY)0 机器码:机器码:1100 0011 CLR bit ;(bit)0 机器码:机器码:1100 0010 bit 位清零指令将位清零指令将CY或以或以bit为地址的位单元清为地址的位单元清0。(2)位置位置1指令指令 SETB C ;(CY)1 机器码:机器码:1101 0011 SETB bit ;(bit)1 机器码:机器码:1101 0010 bit 位置位置1指令将指令将CY或以或以bit为地址的位单元置为地址的位单元置1。(3)位取反指令位取反指令 CPL C ;(CY)(CY)机器码:机器码:1011 0011 CPL bit ;(bit)(bit)机器码:机器码:1011 0010 bit 位取反指令将位取反指令将CY或以或以bit为地址的位单元内容取反。为地址的位单元内容取反。例:例:例例 设设(20H)=7EH=01111110,(2FH)=0F0H=11110000,执,执行下列指令后行下列指令后20H、2FH单元的内容为多少?单元的内容为多少?CLR 04HSETB PSW.4SETB PSW.3CPL 7FH执行上述指令后执行上述指令后(20H)=01101110,(2FH)=01110000。解:解:;(04H)=(20H.4)0;(RS1)=(PSW.4)1;(RS0)=(PSW.3)1,选择工作寄存器的选择工作寄存器的3区区;(7FH)=(2FH.7)0位逻辑运算指令位逻辑运算指令4条条 位处理指令只有位处理指令只有“与与”和和“或或”两类逻辑指令,目的操两类逻辑指令,目的操作数为作数为CY,源操作数为位地址单元。,源操作数为位地址单元。(1)与指令与指令 ANL C,bit ;(C)(C)(bit)机器码:机器码:1000 0010 bit ANL C,/bit ;(C)(C)(bit)机器码:机器码:1011 0000 bit (2)或指令或指令 ORL C,bit ;(C)(C)(bit)机器码:机器码:0111 0010 bit ORL C,/bit ;(C)(C)(bit)机器码:机器码:1010 0000 bit 使用MCS一51单片机的位逻辑指令,可实现各种数字逻辑电路的功能。例:编程实现如图所示逻辑电路的功能。例:例:解:MOV C,P1.1 ;(C)(P1.1)ANL C,P1.2 ;(C)(C)(P1.2)MOV 20H.0,C ;(20H.0)(C)MOV C,P1.3 ;(C)(P1.3)ORL C,/P1.4 ;(C)(C)(P1.4)ANL C,/20H.0;(C)(C)(20H.0)MOV P1.5,C ;(P1.5)(C)位条件转移指令位条件转移指令5 5条条三组:三组:布尔累加器转移:标志布尔累加器转移:标志C C 判位变量转移判位变量转移 判位变量清判位变量清0 0转移转移布尔累加器转移布尔累加器转移JC rel ;(PC)+2 PC ;若(C)=1,则(PC)+rel PC ;若(C)=0,则顺序往下执行JNC rel ;(PC)+2 PC ;若(C)=0,则(PC)+rel PC ;若(C)=1,则顺序往下执行判位变量转移判位变量转移JB bit,rel ;(PC)+3 PC ;若(bit)=1,则(PC)+rel PC ;若(bit)=0,则顺序往下执行 JNB bit,rel ;(PC)+3 PC ;若(bit)=0,则(PC)+rel PC ;若(bit)=1,则顺序往下执行判位变量清判位变量清0 0转移转移JBC bit,rel ;(PC)+3 PC ;若(bit)=1,则(PC)+rel PC,0 Bit ;若(bit)=0,则顺序往下执行布尔处理类指令小结布尔处理类指令小结 ;(R0)=200;P1.7变反(变反(1s);P1.7为低电平为低电平 MOV R0,#0C8H CLR P1.7CPL P1.7 NOPLOOP:NOPDJNZ R0,LOOP;(1s);(1s);(R0)0 则转。(则转。(2s)1s1s1s 2s10s例:分析下面程序的功能(假设晶振为例:分析下面程序的功能(假设晶振为12MHz)。)。P1.7100个脉冲个脉冲 布尔处理类例题:布尔处理类例题:;(R0)=200;P1.7变反(变反(1s);P1.7为低电平为低电平;(1s);(1s);(R0)0 则转。(则转。(2s)作业 4、5、6、7、8、9、10、13、14、20、23、24
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!