C3 MCS-51系列单片机的指令系统和汇编语言程序示例

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第三章MCS-51系列单片机的指令系统和汇编语言程序示例郝丽俊@smicSMIC第二章复习51单片机的硬件结构关键词:性能特点结构组成CPU时序指令周期程序存储器数据存储器22020/1/29SMIC32020/1/29SMIC42020/1/2900H01H……1FH30H31H……7EH7FH80H81H82H……D0HE0HF0H片内RAM4组工作寄存器位寻址区数据缓冲区(用户RAM区)特殊功能寄存器(专用寄存器、SFR)不连续的128个字节的空间SFR如何将00H~#0FH依次存入内部RAM30H~3FH单元?如何将内部RAM3AH单元的内容存入内部RAM40H单元?SMIC第三章主要内容72020/1/29汇编语言与指令系统寻址方式各类指令程序格式和伪指令各类程序示例SMIC83.1汇编语言与指令系统程序:完成某项特定任务的指令的集合。程序设计语言:机器语言、汇编语言、高级语言对于要求反应灵敏性高的实时控制系统以及要求体积小系统小的许多“电脑化”产品,应用汇编语言特别好。SMIC91.指令系统MCS-51的指令系统有42种操作码助记符,用来描述33种操作功能,共111条指令。指令特点:指令长度较短,周期较短;简明、整齐,易于掌握;丰富的位操作指令;可直接用传送指令实现端口的输入/输出操作。每条指令通常由操作码和操作数组成。SMIC102.指令分类按字节数分:单字节、双字节、三字节指令按指令执行时间分:单周期、双周期、四周期指令按功能分:数据传送类、算术运算类、逻辑运算类、控制转移类、布尔处理类指令操作码操作数1操作数2操作数3SMIC113.指令描述常用符号Ri:当前选中的寄存器区中的8个工作寄存器R0~R7(i=0~7)。Rj:当前选中的寄存器区中的2个工作寄存器R0、R1(j=0,1)。#data:包含在指令中的8位立即数。#data16:包含在指令中的16位立即数。direct:8位的内部数据存储器单元中的地址。addr16:16位目的地址。addr11:11位目的地址。SMIC12rel:8位带符号的偏移字节,简称偏移量。DPTR:数据指针,可用作16位地址寄存器。bit:内部RAM或专用寄存器中的直接寻址位。A:累加器。B:专用寄存器,用于乘法和除法指令中。C:进位标志或进位位,或布尔处理中的累加器。SMIC13@:间址寄存器或基址寄存器的前缀,如@Rj,@DPTR。/:位操作数的前缀,表示对该位操作数取反,如/bit。(×):×寄存器内容。((×)):由×寄存器内容寻址单元中的内容。:箭头右边的内容被箭头左边的内容所代替。SMIC143.2寻址方式指令给出参与运算的数据的形式称为寻址方式。MCS-51系列指令寻址方式如下:立即寻址寄存器寻址寄存器间接寻址直接寻址、位寻址基址寄存器加变址寄存器间接寻址相对寻址SMIC151.立即寻址指令中跟在操作码以后的第一个字节就是实际的操作数(不需另去寄存器或存储器等处寻找和取数)。操作数前面加有#号。如:MOVA,#70H;(A)←70HM程序存储空间PC01110100PC+101110000A70HSMIC162.寄存器寻址-寻址某工作寄存器以通用寄存器的内容为操作数的寻址方式。通用寄存器指A、B、DPTR以及R0~R7。例如:CLRA;(A)←0INCDPTR;(DPTR)←(DPTR)+1MOVR5,A;(R5)←(A)SMIC173.寄存器间接寻址间接寻址的存储器空间包括内部RAM(不包括SFR)和外部RAM。能用于寄存器间接寻址的寄存器有R0,R1,DPTR,SP。其中R0、R1必须是工作寄存器组中的寄存器。SP仅用于堆栈操作。为表现间接寻址,于寄存器前加一“@”MOV——访问片内RAMMOVX——访问片外RAM以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。SMIC18例如:MOV@R0,A;((R0))←(A)MOVXA,@R1;(A)←((P2R1))…34H…30H片内RAM34H30HAR0…64H…3410H片外RAM64H10HAR134HP2说明:由P2口提供高8位地址30H。SMIC外部传送(MOVX)192020/1/29•以指针方式读、写外部数据存储器或I/O端口。•@Rj只提供低8位地址指针,•适用于256个地址的小规模总线扩展。或者由P2口以I/O方式提供高8位(页)地址。•@DPTR提供16位地址指针,可访问总线扩展的整个64k空间。例如:MOVP2,#30H;由P2口提供高8位地址30HMOVR0,#0;低8位地址为00HMOVXA,@R0;读(3000H)单元SMIC举例:202020/1/29•将内部30H40H单元的内容送外部数据存储器,从4000H单元开始存放。MOVR0,#30HMOVR2,#17MOVDPTR,#4000HLOOP:MOVA,@R0MOVX@DPTR,AINCR0INCDPTRDJNZR2,LOOPSMIC寄存器间接寻址范围总结:212020/1/291、内部RAM低128单元。对内部RAM低128单元的间接寻址,应使用R0或R1作间址寄存器,其通用形式为@Rj(j=0或1)。2、外部RAM--64KB。对外部RAM64KB的间接寻址,应使用@DPTR作间址寻址寄存器,其形式为:@DPTR。例如MOVXA,@DPTR;其功能是把DPTR指定的外部RAM的单元的内容送入累加器A中。外部RAM的低256单元是一个特殊的寻址区,除可以用DPTR作间址寄存器寻址外,还可以用R0或R1作间址寄存器寻址。例如MOVXA,@R0;这条指令的意思是,把R0指定的外部RAM单元的内容送入累加器A。3、堆栈操作指令(PUSH和POP)也应算作是寄存器间接寻址,即以堆栈指针SP作间址寄存器的间接寻址方式。寄存器间接寻址方式不可以访问特殊功能寄存器!!寄存器间接寻址也须以寄存器符号的形式表示,为了区别寄存器寻址我寄存器间接寻址的区别,在寄存器间接寻址方式式中,寄存器的名称前面加前缀标志“@”。SMIC224.直接寻址指令中直接给出操作数地址的寻址方式,能进行直接寻址的存储空间有SFR寄存器和内部数据RAM。直接寻址是访问专用寄存器[SFR]的唯一方法。如:ANL70H,#48H;(70H)←(70H)同48H作“与”位地址的访问也采用直接寻址的方法-直接位寻址。程序存储空间128内RAMPC01010011PC+101110000PC+201001000ALU70HSMIC23补充:位寻址位寻址只能对有位地址的单元作位寻址操作。位寻址其实是一种直接寻址方式,不过其地址是位地址。例如:SETB10H;将(10H)位置1又如:MOV32H,C;(32H)←进位位C32H为位地址,是片内RAM26H的D2位比较:MOV32H,A;(32H)←(A)32H为片内RAM地址字节地址D7D6D5D4D3D2D1D02FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H…………20H07H06H05H04H03H02H01H00HSMIC245.基址寄存器加变址寄存器间接寻址只能对程序存储器中数据进行操作。只有读操作而无写操作。指令符号:MOVC。如:MOVCA,@A+DPTR;(A)←((A+DPTR))…64H…2010H程序存储区10H2000HADPTR+64HSMIC256.相对寻址当前程序计数器PC的内容加上指令给出的偏移量rel,形成新的PC值的寻址方式。rel为有符号的单字节,以补码表示,范围为-128~127。相对寻址用于修改PC值,主要用于实现程序的分支转移。[程序转移类指令,参见p104]SMIC26SJMP08H××H…××H2000H程序存储区2000HPC+22002H200AH08H+如,SJMP08H;(PC)←(PC)+2+08H2002H200AHSMIC27总结:不同存储器所用指令机器寻址方式SMIC28每一种寻址方式可涉及的存储器空间寻址方式存储器空间指令举例立即寻址ROM(操作码常数)MOVA,#55H寄存器寻址R0~R7,A,B,DPTRMOV55H,R3寄存器间接寻址内部RAM[@R0,@R1,@SP(PUSH&POP)]内部RAM的低4位[@R0,@R1,仅XCHD]外部RAM[@R0,@R1,@DPTR]MOVA,@R0XCHDA,@R1MOVXA,@DPTR直接寻址内部RAM00H-7FHSFRMOVA,55H基址变址寻址ROM[@A+PC,@A+DPTR]只有3条MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR相对寻址ROM256B范围(PC+rel)SJMP55H位寻址内部RAM位寻址区(00H-7FH)可位寻址SFRCLR00HSETBEASMIC思考:如何访问右图所示各存储单元?00H01H……1FH30H31H……7EH7FH80H81H82H……D0HE0HF0H片内RAM4组工作寄存器位寻址区数据缓冲区(用户RAM区)特殊功能寄存器(专用寄存器、SFR)不连续的128个字节的空间SFRSMIC如何将00H~#0FH依次存入内部RAM30H~3FH单元?如何将内部RAM3AH单元的内容存入内部RAM40H单元?思考:SMIC313.3数据传送指令数据传送类指令是指令系统中量最多、使用最多的指令。direct(直接寻址)@Ri(间接寻址)Rn寄存器data立即数累加器ASMIC32指令操作码:MOV:片内数据传送指令MOVX:访问片外RAM传送指令MOVC:基址寄存器加变址寄存器传送指令格式:MOV操作数1,操作数2目的源SMIC331.立即数置数指令立即数送累加器MOVA,#data立即数送某工作寄存器MOVRi,#data其中,i=0~7,分别代表R0~R7。立即数送某片内RAM单元MOV@Rj,#data其中,j=0、1,分别代表R0、R1SMIC34立即数送某直接寻址字节MOVdirect,#data立即数送DPTRMOVDPTR,#data16其中,data16为16位立即数,送入16位寄存器DPTR,其中高8位送入DPH,低8位送入DPL。DPTR专用于外部数据传送。SMIC35例3.1已知:(R0)=20H。问,执行如下指令后,A、R7、20H、21H和DPTR单元中的内容。MOVA,#18HMOVR7,#28HMOV@R0,#38HMOV21H,#48HMOVDPTR,#58HSMIC362.内部数据存储器与累加器传送指令某工作寄存器内容送累加器MOVA,Ri累加器内容送某工作寄存器MOVRi,A其中,i=0~7,分别代表R0~R7。SMIC37某片内RAM单元内容送累加器MOVA,@Rj累加器内容送某片内RAM单元MOV@Rj,A其中,j=0、1,分别代表R0、R1。SMIC38某片内RAM单元内容或某专用寄存器内容送累加器MOVA,direct累加器内容送某片内RAM单元或某专用寄存器MOVdirect,Adirect可以是80H、90H,也可以是P0、P1SMIC39例3.2已知:(R1)=32H,(30H)=AAH,(31H)=BBH,(32H)=CCH,求执行下列指令后,A、50H、30H、31H、32H和R1中的内容。MOVA,30HMOV50H,AMOVA,@R1MOVR1,#31HMOV@R1,AMOVR1,ASMIC403.Ri、SFR与内部RAM间传送指令某片内RAM单元(低128字节)内容或某专用寄存器内容送某工作寄存器MOVRi,direct某工作寄存器内容送某片内RAM单元(低128字节)或某专用寄存器MOVdirect,Ri其中,i=0~7,分别代表R0~R7。SMIC41某片内RAM单元(低128字节)内容送另一片内RAM单元MOV@Rj,direct某

1 / 133
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功