版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、内容安排 3.1 MCS-51单片机指令格式 3.2 MCS-51指令寻址方式 3.3 MCS-51单片机指令系统 习题;3、5、6、8、10,第3章 MCS-51单片机指令系统,指令:是计算机用于控制某个功能部件完成某一指定动作的指示和命令 指令系统:所有指令的集合 指令由两部分组成,即操作码和操作数。 操作码用来规定指令进行什么操作 操作数则是指令操作的对象,3.1 MCS-51单片机指令格式,指令的一般格式:,指令有单字节指令、双字节指令、三字节指令不同长度的指令,格式略有不同: (1)单字节指令:指令只有一个字节,操作码和操作数同在一个字节中。 (2)双字节指令:一个字节为操作码,另一
2、个字节是操作数。 (3)三字节指令:操作码占一个字节,操作数占二个字节。其中操作数既可能是数据,也可能是地址。,3.1 MCS-51单片机指令格式,3.2 MCS-51指令寻址方式,寻址方式:,寻址方式就是CPU执行一条指令时,怎样找到该指令所要求的操作数的方式。操作数总是存放在某个存储单元中,找操作数实际就是寻找操作数所在单元的地址,因此就称为寻址方式。,51单片机的寻址方式有7种:,1. 立即寻址 操作数直接由指令给出,通常紧跟指令操作码之后,该操作数被称为立即数,它为8/16位二进制数,其前面加#号标识。 如: MOV A,#2AH ;操作码为74H,操作数为2AH,操作码和操作数统称为
3、机器码:742AH,2字节 MOV DPTR, #1324H ;机器码:901324H,3.2 MCS-51指令寻址方式,2.直接寻址 操作数直接以单元地址形式给出 例如:MOV A,40H指令中的源操作数就是直接寻址,即40H为操作数的地址。机器码为E5H 40H。 51单片机的直接寻址方式可用于访问片内、片外数据存储器,也可以用于访问程序存储器。 但访问片内数据存储器时只能访问其低128字节(00H7FH)和高128字节的特殊功能寄存器。,3.2 MCS-51指令寻址方式,特殊功能寄存器,除了以单元地址的形式外,还可用寄存器符号的形式给出。 如 MOV A,80H; 直接地址的通用符号为d
4、irect MOV A,P0 由于52子系列的片内RAM有256个字节单元,其高128字节单元与SFR的地址是重叠的,因此,为了避免混乱,规定直接寻址指令不能访问片内RAM高128字节单元(80HFFH),若要访问这些单元,则只能用寄存器间址指令,而访问SFR时,只能用直接寻址指令。,3寄存器寻址寄存器寻址是指指令中的操作数为寄存器中的内容。 可用寄存器有: (1)四组工作寄存器R0R7共32个工作寄存器,由PSW中的RS1、RS2两位状态来选择当前寄存器组 (2)SFR中有A、B、DPTR及CY(位) 如:MOV R3,#12H ; MOV A,R3 ; (A)(R3),3.2 MCS-51
5、指令寻址方式,如: MOV A, 00H ; MOV A, R0 ; 如果使用0区的工作寄存器R0,那么00H就是R0的字节地址,从这个意义上说这两条指令功能是一样的,执行时间也是一样的(1T),但从所占存储空间上看前者为2字节,后者只需1个字节。,4. 寄存器间接寻址方式 寄存器中存放的是操作数的地址 在寄存器的名称前面加前缀标志“” 例如:MOV A,Ri ;i=0或1 寻址范围: (1)51子系列访问内部RAM低128个单元,外部数据存储器的低256个字节,其通用形式为Ri。,3.2 MCS-51指令寻址方式,52子系列可访问内部RAM的256个单元 (2)片外数据存储器的64K字节的间
6、接寻址寄存器用DPTR。 例如: MOVX A,DPTR (3)片外数据存储器的低256字节 例如:MOVX A,Ri,3.2 MCS-51指令寻址方式,5. 基址加变址寄存器间接寻址(变址寻址) 以DPTR或PC为基址寄存器,以A为变址寄存器,以两者相加形成的16位地址为操作数的地址。 这种寻址方式的指令只有3条: MOVC A,A+DPTR MOVC A,A+PC JMP A+DPTR,3.2 MCS-51指令寻址方式,6相对寻址 相对寻址方式是以程序计数器PC的当前值为基准,加上指令中给出的相对偏移量rel以形成目标地址。 目的地址转移指令所在地址转移指令字节数rel 操作数rel为程序
7、转移的偏移量,是一带符号的8位二进制数补码。 例: JC 16H ;(PC)+2+16HPC rel相对偏移量的通用符号,3.2 MCS-51指令寻址方式,7位寻址 是指位操作指令中直接给出位操作数的地址,可以对片内RAM的位寻址区(20H2FH)和字节地址能被整除的特殊功能寄存器中的各位进行位操作。位地址的通用符号为bit。,3.2 MCS-51指令寻址方式,特殊功能寄存器PSW中的可寻址位在指令中有如下4种的表示方法: (1)直接使用位地址。例如,PSW.5的位地址为0D5H。 (2)位名称的表示方法。例如:PSW.5是F0标志位,可使用F0表示该位。 (3)单元地址加位数的表示方法。 例
8、如 :(0D0H).5。 (4)特殊功能寄存器符号加位数的表示方法。例如:PSW.5,3.2 MCS-51指令寻址方式,MCS-51的基本指令共111条,按指令所占的字节来分: (1) 单字节指令49条; (2) 双字节指令45条; (3) 三字节指令17条。 按功能分类,可分为下面5大类: (1)数据传送类(28条) (2)算术操作类(24条 (3)逻辑运算类(25条) (4)控制转移类(17条) (5)位操作类(17条),3.3 MCS-51单片机指令系统,数据传送指令的操作是把某一单元中内容传送到另一单元中去。 一般传送类指令的通用指令格式为:MOV , 源操作数可以是累加器A、通用寄存
9、器Rn、直接地址(direct)、间址寄存器Ri和立即数。 目的操作数可以是累加器A、通用寄存器Rn、直接地址(direct)和间址寄存器Ri。,3.3.1 数据传送指令,1. 片内RAM数据传送指令组该类指令共有16条。(1) 以A为目的操作数的指令: MOV A,Rn ; (Rn)A,n=07 MOV A,Ri ; (Ri)A,i=0,1 MOV A,direct ;(direct)A MOV A,#data ; #dataA,3.3.1 数据传送指令,例 MOV A ,38H;A(38)H MOV A ,#38H;A38HMOV A ,R0 ;A(R0) MOVA ,R0 ;将R0指定的
10、33H中的数7AH送A中。 以上的第四条指令,如果设(33H)=7AH;(R0)=33H,则执行结果:A=(R0)=(33H)=7AH。,3.3.1 数据传送指令,2.以Rn为目标的操作数的指令: MOV Rn,A ; (A)Rn,n=07 MOV Rn,direct ;(direct)Rn,n=07 MOV Rn,#dat ; #dataRn,n=07 注意:没有工作寄存器送工作寄存器(含间址) 例 MOV R1 ,#10H ;将立即数10H送R1寄存器,,3.3.1 数据传送指令,3.以直接地址direct为目的操作数的指令 MOV direct,A ; (A)direct MOV dir
11、ect,Rn;(Rn)direct, n=07 MOV direct1,direct2; MOV direct,Ri ; (Ri)direct MOV direct,#data; #datadirect例 MOV30H ,31H ;30H(31H) MOV P2 , R2 ;寄存器R2内容送P2口,3.3.1 数据传送指令,4.以寄存器间接地址为目的操作数的指令 MOV Ri,A ;(A)(Ri),i=0,1 MOV Ri,direct ; (direct)(Ri) MOV Ri,#data ; #data(Ri) 例 设(A)=33H ,(R0)=56H ,则执行指令: MOV R0 ,A
12、;(R0)(A), 即(56H)=33H,3.3.1 数据传送指令,5. 16位数传送指令 MOV DPTR,#data16 ; #data16DPTR 唯一的16位数据的传送指令 ,立即数的高8位送入DPH,立即数的低8位送入DPL。 例 MOV DPTR ,#1011H 结果为(DPH)=10H, (DPL)=11H,3.3.1 数据传送指令,6.累加器A与外部数据存储器传送指令 MOVX A,DPTR ;(DPTR)A,读外部RAM/IO MOVX A,Ri ;(Ri)A,读外部RAM/IO MOVX DPTR,A;(A)(DPTR),写外部RAM/IO MOVX Ri,A ;(A)(R
13、i),写外部RAM/IO 功能:读外部RAM存储器或I/O中的一个字节,或把A中一个字节的数据写到外部RAM存储器或I/O中。,3.3.1 数据传送指令,7. 堆栈操作指令(PUSH 、POP):2条,只能采用直接寻址方式 功能:进栈指令PUSH用于保护片内某个单元内容 出栈指令POP用于恢复片内某个单元内容 PUSH direct ; (SP)+1(SP),(direct)(SP) POP direct ; (SP)(direct),(SP)-1(SP),3.3.1 数据传送指令,入栈指令 PUSH direct 例 (SP)=60H, (A)=30H ,(B)=70H 时,执行 PUSH
14、Acc ;(SP)+1=61HSP, (A) 61H,不能用A PUSH B ;(SP)+1=62HSP, (B) 62H 结果: (61H)=30H, (62H)=70H, (SP)=62H 出栈指令 POP direct 例 (SP)=62H, (62H)=70H ,(61H)=30H 时,执行 POP DPH ;(SP) DPH, (SP)1=61HSP POP DPL ;(SP) DPL, (SP)1=60HSP 结果: (DPTR)=7030H, (SP)=60H,3.3.1 数据传送指令,8.查表指令 用于读程序存储器中的数据表格的指令,均采用基址寄存器加变址寄存器间接寻址方式。指
15、令助记符为MOVC,共两条: MOVC A, A+PC ;(PC)(PC)+1, (A)(A)+(PC),机器码为83H (2) MOVC A, A+DPTR ; 机器码为93H,前一条指令采用PC作基址寄存器,CPU取完该指令后PC会自动加1,指向下一条指令的第一个字节地址,即此时是以(PC)+1作为基址的。另外,由于累加器A中的内容为8位无符号数,是本条指令与待查表格间的距离字节数,这就使得本条指令查表范围只能在离本条指令的256个字节以内。,例:设(A)=30H,执行地址1000H处的指令 1000H: MOVC A,A+PC 执行结果将程序存储器中1031H的内容送入A。,第2条指令是
16、以DPTR作基址寄存器,因此可以很方便地把一个16位(表的首地址)送DPTR,实现在整个64KB存序存储器查表,也就是说待查的表格可放置在存序存储器的任何位置。指令中A的内容通常为待查表格中元素的序号。,例:在ROM 1000H开始存有5个字节数,编程将第二个字节数取出送片内RAM 30H单元中。 程序段如下: MOV DPTR,#1000H ;置ROM地址指针(基址) MOV A ,#01H ;表内序号送A(变址) MOVC A,A+DPTR ;从ROM 1001H单元中取数送到A MOV 30H ,A ;再存入片内RAM 30H中ORG 1000H ;伪指令,定义数表起始地址TAB:DB
17、55H,67H,9AH,34H,57H ; 在ROM 1000H开始的空间定义5个单字节数执行结果:(30H)=67H。,3.3.1 数据传送指令,9字节交换指令 (exchange) (1)整字节交换指令 XCH A,Rn XCH A,direct XCH A,Ri 功能:将累加器A的内容与内部RAM、SFR中的内容互换,影 响标志位 (2) 低半字节交换指令 XCHD A,Ri ;(A)30 (Ri)30 功能:累加器A的低四位与片内RAM某单元的低四位交换,高 四位不变,3.3.1 数据传送指令,(3)累加器A高低半字节交换指令(SWAP) SWAP A ;A74 A30 功能:将累加器
18、A中的高4位与低4位内容互换,不影响标志位 例 若(A)=45H,(R0)=20H,(20H)=69H,执行下列指令后SWAP A ;(A)=54HXCH A ,R0 ;(A)= 20H,(R0)=45HXCHD A , R0 ;(A)=49H,(20H)=65H,3.3.1 数据传送指令,功能:执行加、减、乘、除法四则运算和加1、减1操作以及十进制的调整 特点: 支持8位无符号数操作,借助溢出标志可对带符号数进行补码运算 算术运算类指令执行结果影响PSW,3.3.2 算术运算类指令,1不带进位位的加法指令 add 共有4条: ADD A,Rn ;(A)+(Rn)A,n=07 ADD A,di
19、rect ;(A)+(direct)A ADD A,Ri ;(A)+(Ri)A,i=0,1 ADD A,#data ; (A)+#dataA,3.3.2 算术运算类指令,8位二进制数加法运算指令的一个加数总是在累加器A中,第二加数可用4种不同寻址方式得到,其相加结果再送回累加器A中,同时影响AC、CY、OV、P位。 注意:累加器A中的值前后是不一样的。 影响程序状态字PSW中的OV、C、AC和P的情况如下: 进位标志C:和的D7位有进位时,C=1;否则,C=0。辅助进位标志AC:和的D3位有进位时,AC=1;否则,AC=0。溢出标志OV:和的D7、D6位只有一个有进位时,OV=1;否则,OV=
20、0。 溢出表示运算的结果超出了数值所允许的范围。,3.3.2 算术运算类指令,例 :设内部RAM中40H和41H单元分别存放两个加数53H和FCH,相加结果存放42H单元。可设计程序为: MOV R0, #40H;设置数据指针MOV A, R0;取第一个加数INC R0;修改数据指针ADD A, R0;两数相加INC R0;修改数据指针MOV R0,A;存结果 结果为:(A)=4FH,(CY)=1,(AC)=0,(OV)=0,(P)=1,3.3.2 算术运算类指令,2带进位加法指令 标志位Cy参加运算,因此是三个数相加。共4条: ADDC A,Rn ;(A)+(Rn)+CA,n=07 ADDC
21、 A,direct ;(A)+(direct)+CA ADDC A,Ri ;(A)+(Ri)+CA,i=0,1 ADDC A,#data ;(A)+#data+CA,3.3.2 算术运算类指令,结果为:(A)=05H,Cy=1,Ac=1,OV=0,P=0 (A中1 的位数为奇数),例:(A)=85H,(20H)=7FH,Cy=1,执行指令: ADDC A,20H,加1指令 increase INC A ;A(A)+1 INC Ri ;Ri(A)+1 INC direct ;direct(direct)+1 INC Ri ;(Ri)(Ri)+1 INC DPTR ;DPTR(DPTR)+1 对标
22、志位不产生影响 若: (A)0FFH , (Cy)=0 执行: INC A 结果:(A)00H , (Cy)=0,3.3.2 算术运算类指令,如:(1)MOV A, #35H (2) MOV A, #35H ADD A, #46H ADD A, #46H DA A (A)=7BH (A)81H,4.十进制调整指令 Decimal Adjust DA A 用途:紧跟BCD码加法指令之 后,进行十进制调整。,3.3.2 算术运算类指令,在计算机里十六进制数和BCD码的表现形式是一样的,机器无法区别,做加法运算时均按十六进制计算,所以做BCD码加法运算时后面一定要加一条十进制调整指令。,5带借位的减
23、法指令 Subtract Borrow 4条指令: SUBB A,Rn ; (A)-(Rn)- CyA,n=07 SUBB A,direct ; (A)-(direct)- CyA SUBB A,Ri ;(A)-((Ri))- CyA, i=0,1 SUBB A,#data ;(A)-#data - CyA,3.3.2 算术运算类指令,功能:从累加器A中的内容减去指定的变量和进位 标志Cy的值,结果存在累加器A中。,对PSW的影响: 如果位7需借位则置“1” Cy,否则清“0”Cy;如果位3需借位则置“1”Ac,否则清“0”Ac;如果位6需借位而位7不需要借位,或者位7需借位,位6不需借位,则
24、置“1”溢出标志位OV,否则清“0”OV。根据运算结果A里1的个数是奇数还是偶数决定P为1或0。,6减1指令 decrease 共4条,其功能是将操作数指定单元内容减1。 DEC A ;A-1A, A中内容减1 DEC Rn ; Rn-1Rn, Rn中内容减1 DEC direct ;(direct)-1(direct), 直接地址中内容减1 DEC Ri ;(Ri)-1(Ri), Ri间址中的内容减1 注意:DPTR只有加1指令,没有减1指令!,3.3.2 算术运算类指令,7乘法指令 Multiple MUL AB ; (A)(B) 低8位A 高8位B A、B中都是无符号整数 如果积大于25
25、5,OV1,否则OV0;进位标志 总是清零 Cy0。,3.3.2 算术运算类指令,8.除法指令 Division DIV AB ; (A)(B) 商 A ,余数B A、B中都是无符号整数 如果除数B为“0”,OV1,否则OV0; 进位标志总是清零 Cy0。 divide,dividend,divider,3.3.2 算术运算类指令,此类指令共24条,包括或、与、异或、求反、清0、循环移位。其共同特点是当A作目的操作数(第一操作数)时,影响P位;带进位的移位指令影响CY位,其余都不影响PSW,3.3.3 逻辑运算及移位类指令,1.逻辑与指令 ANL A, Rn ANL A, direct ANL
26、 A, data ANL A, Ri ANL direct, A ANL direct, data “有0即0,全1为1”,3.3.3 逻辑运算及移位类指令,2.逻辑或指令 ORL A, Rn ORL A, direct ORL A, data ORL A, Ri ORL direct, A ORL direct, data “有1即1,全0为0” 0000 0110 ) 0110 1101 0110 1111 B 6FH,3.3.3 逻辑运算及移位类指令,3.逻辑异或指令 Exclusive Relation Logic XRL A, Rn XRL A, direct XRL A, data
27、 XRL A, Ri XRL direct, A XRL direct, data 相异为1,相同为0”,3.3.3 逻辑运算及移位类指令,4求反指令(1条) Complement Logic CPL A ; 对累加器A的内容各位求反,结果送回A中,影响P位 5清0指令(1条) Clear CLR A ; 将累加器A的内容清0 注意:MCS-51的指令系统中对字节操作求反、清0,只有这2条指令,其他单元要求反、清0操作,则要用其他的指令或通过累加器A中进行。,3.3.3 逻辑运算及移位类指令,3.3.3 逻辑运算及移位类指令,6循环移位指令(4条) Recirculation RL A ;Re
28、circulation Left RLC A ;Recirculation Left Carry RR A ;Recirculation Right RRC A ; Recirculation Right Carry,控制转移类指令共计 17 条 无条件转移指令 条件转移指令 子程序调用及返回指令 功能:有了丰富的控制转移类指令, 就能很方便地实现程序的向前、 向后跳转, 并根据条件分支运行、 循环运行、 调用子程序等。,3.3.4 控制转移类指令,1无条件转移指令 (执行时间为2T) 长转移指令 (Long Jump) LJMP addr16; (PC)(PC)+3,(PC)addr16 本
29、指令为三字节指令。指令功能是将16位值送入PC中,CPU转向地址为addr16的单元处取令执行。 短转移指令(绝对转移,Absolute Jump) AJMP addr11; (PC)(PC)+2,(PC100)addr100 短转移指令为2字节指令。是用指令提供的11位地址替换PC的低11位,所形成的新的PC值作为目的地址 .,3.3.4 控制转移类指令,AJMP的机器码是由11位直接地址addr11和指令操作码0001按下列分布组成的:,指令执行后,程序转移的目的地址由AJMP指令所在位置的地址(PC)值加上该指令的字节数2,构成当前PC值。取当前PC值的高5位与指令中提供的11位直接地址
30、形成转移的目的地址,即,由于11位地址的范围是0000000000011111111111,即2KB,而目的地址的高5位是PC当前值(固定),因此程序可转移的范围只能是和PC当前值在同一2KB内,可向前亦可向后。, 间接转移指令 (相对长转移指令,散转指令) JMP A+DPTR;(PC)(A)+(DPTR) 它是以数据指针DPTR的内容为基址,以累加器A的内容为相对偏移量,在64KB范围内无条件转移。例如,当DPTR为程序中某表的首地址,A中内容为表中的序号,则可根据A的不同取值使程序执行转移到不同位置。,3.3.4控制转移类指令,例如:假设A的取值分别为0、2、4,执行下列程序段程序将会转
31、移到不同处理程序的入口。,MOV DPTR ,#TABLE ;表首地址送DPTR JMP A+DPTR : TABLE: AJMP TAB1 ;当(A)=0时转TAB1执行 AJMP TAB2 ;当(A)=2时转TAB2执行 AJMP TAB3 ;当(A)=4时转TAB3执行, 相对短转移指令 Short Jump SJMP rel ; (PC)(PC)+2+rel 本指令为2字节指令。SJMP指令可用来使程序原地踏步:HERE:SJMP HERE或SJMP $($表示PC的当前值)。rel=HERE-HERE-2=FEH,故机器码为80 FE。 单片机没有可使CPU停止运行的指令。,2条件转
32、移指令 判零转移指令 Jump Zero 专判累加器A的内容为0与否? JZ rel ;PCPC+2,若A=0,PCPC+rel ;若A0,则 顺序执行。 JNZ rel ;PCPC+2,若A0,PCPC+rel ;若A=0,则顺序执行。,3.3.4 控制转移类指令, 比较转移指令 Compare Jump Not Equal CJNE A,direct,rel ;PCPC+3, ;若A(direct),则PCPC+rela CJNE A,#data,rel ;PCPC+3, ;若Adata,则PCPC+rel CJNE Rn,#data,rel ;PCPC+3, ;若Rndata,则PCPC
33、+rel CJNE Ri,#data,rel ;PCPC+3, ;若(Ri)data,则PCPC+rel 。*比较指令不改变原操作单元, 循环转移指令 Decrease Jump Not Zero DJNZ Rn,rel ;PCPC+2,RnRn-1, ;若 Rn0,则PCPC+rel DJNZ direct,rel;PCPC+3, ;(direct)(direct)-1, ; 若(direct)0,则PCPC+rel,4子程序调用与返回指令 有了子程序调用和返回指令,才能使模块化程序设计得以实现。用一条子程序调用指令,可将程序执行转向子程序的入口地址。仅从转向子程序入口看,子程序调用指令和跳
34、转指令相似。但由于子程序执行完后,还须返回主程序继续执行原来未完成的工作,故执行子程序调用指令时,首先要将断点地址压栈保存,然后才转向子程序入口地址。在子程序的最后也须用一条子程序返回指令,使断点地址得以恢复,返回主程序继续执行。,3.3.4控制转移类指令,子程序调用指令有长调用和短调用两条,它们都是2T指令,(1)长调用指令 LCALL addr16 ;(PC) (PC)+3 , 机器码:12H addr158 addr70 ;(SP) (SP)+1, (SP) (PC 70) ; (SP) (SP)+1, (SP) (PC 158) ;(PC) addr 150,(2)短调用指令 ACAL
35、L addr11 ; (PC) (PC)+2,机器码:a10a9a810001 a7 a1a0 ; (SP) (SP)+1, (SP) (PC 70) ;(SP) (SP)+1, (SP) (PC 158) ;高5位地址不变, (PC) 100 addr11 ;形成目标地址。,(3)返回指令 返回指令共有两条: 一条是对应两条调用指令的子程序返回指令RET; 另一条是对应从中断服务程序的返回指令RETI。 RET;(PC158(SP),(SP)(SP)1, (PC70) (SP) ,(SP)(SP)1 RETI;(PC158)(SP),(SP)(SP)1, (PC70)(SP) ,(SP)(S
36、P)1,3.3.4 控制转移类指令,5空操作指令 NOP ; (PC) (PC)+1, 空操作指令是一条单字节单周期指令。 它控制CPU不做任何操作, 仅仅是消耗这条指令执行所需要的一个机器周期的时间, 不影响任何标志, 故称为空操作指令。 但由于执行一次该指令需要一个机器周期, 所以常在程序中加上几条NOP指令用于设计延时程序, 拼凑精确延时时间或产生程序等待等。,3.3.4控制转移类指令,在单片机硬件结构中还附有一个位处理机,又称布尔处理机,专门用于对一位数码(布尔变量)进行操作,称作位操作。 累加器(借用进位标志CY) 存储器(即位寻址区中的各位) 完成位操作的运算器等。,3.3.5位操
37、作指令,1.数据位传送指令 MOV C,bit MOV bit,C 例 MOV C,06H ;(20H).6Cy 06H是内部RAM 20H字节位6的位地址。 MOV P1.0,C ;CyP1.0 2位变量修改指令 CLR C;清“0”Cy CLR bit;清“0”bit位 CPL C;Cy求反,3.3.5位操作指令,1.数据位传送指令 MOV C,bit MOV bit,C 例写出指令,将00H位的值送01H位 MOV C,00H MOV01H,C 2位变量修改指令 CLR C;清“0”Cy CLR bit;清“0”bit位 CPL C;Cy求反,3.3.5位操作指令,CPL bit ;bi
38、t位求反 SETB C;置“1” Cy SETB bit ;置“1” bit位 这组指令将操作数指出的位清“0”、求反、置“1”, 不影响其它标志。 例 将P1 口的P1.7 置位, 并清进位位的程序如下: SETB P1.7 ; (P1.7) 1 CLR C ; (CY) 0 当(P1)=00001111B时, 执行完上述指令后, (P1)=10001111B, (CY)=0。,3.3.5位操作指令,3. 位逻辑指令 位逻辑指令包含“与”ANL、 “或”ORL、 “非”CPL位逻辑运算操作, 共有如下 6 条指令: ANL C, bit ; (CY) (CY)(bit ) , 机器码:82H
39、 ANL C, / bit ; (CY) (CY)(bit ) , B0H ORL C, bit ; (CY) (CY)(bit) , 72H ORL C, / bit ; (CY) (CY)(bit ) , A0H CPL bit ; (bit) (bit) , B2H CPL C ; (CY) (C) , B3H,3.3.5位操作指令,4位条件转移指令 JC rel;PCPC+2,若C=1则PCPC+rel 否则顺序执行。 JNC rel;PCPC+2,若C1则PCPC+rel JB bit,rel;PCPC+2,若(bit)=1则 PCPC+rel JNBbit,rel;PCPC+2,若
40、(bit)1则 PCPC+rel JBCbit,rel;PCPC+3,若(bit)=1则 PCPC+rel且(bit)0,3.3.5位操作指令,3.3.6 伪指令,前面所学的指令都会使计算机进行一定的操作,都有与之对应的机器码。除此之外,单片机还提供了一些注释性指令,这些指令,仅在汇编时向汇编程序提供信息,使其准确而顺利地完成汇编任务。这种指令没有相应的机器码,因而不会被CPU所执行,故称为伪指令。 常用伪指令及其功能:,3.3.6 伪指令,ORG起始地址伪指令 指明程序和数据块起始地址。 例3.1 源程序 指令地址 ORG 2000H 2000H MAIN:MOV R0,#30H 2002H
41、 MOV A,R0,2. DB -定义字节伪指令 格式为: 标号: DB X1,X2,,Xn 例3.2: ORG 1000H DB0AAHSJ-DATA:DB25,25H 经汇编后,从地址1000H处存贮器的内容: (1000H)= AAH (1001H)= 19H (1002H)= 25H,3.3.6 伪指令,3DW-定义字伪指令 格式为:标号: DW Y1, Yi*为双字节数据,若为单字节数应在其高位添00H,数据类型可为十进制、十六进制数或表达式,两个数据之间用逗号分开。 汇编程序从当前ROM地址开始,存放DW后面的数据。存放时高8位在前,低8位在后。,3.3.6 伪指令,3.3.6 伪
42、指令,例 3.3 ORG1000H DW1234HSJ_DATA:DW56H,2000经汇编后,从地址1000H处存贮器的内容为:(1000H)= 12H(1001H)= 34H(1002H)= 00H(1003H)= 56H(1004H)= 07H(1005H)= D0H,3.3.6 伪指令,4. DS -定义存贮空间伪指令 格式为: DS 表达式 例3.4 ORG1000H DS07H DB20H,20 DW12H 经汇编后,从地址1000H开始保留7个单元,然后从1007H处存贮器的内容为: (1007H)= 20H (1008H)= 14H (1009H)= 00H (100AH)=
43、12H,3.3.6 伪指令,5. EQU- 赋值伪指令 格式为:(必须先定义后使用) 字符名称 EQU 项(数或汇编符号) 例3.5 AA EQUR1 D10 EQU10 ADD_Y EQU 07ABH MOVA,AA MOVA,D10 LCALL ADD_Y 6. DATA-数据地址赋值伪指令(只限于内部数据存储区) 格式为:(可先使用后定义) 字符名称 DATA 表达式,3.3.6 伪指令,7.BIT -定义位地址符号伪指令 格式为: 字符名称 BIT 位地址 其功能是把BIT之后的位地址值赋给字符名称。 例3-6 P11BITP1.1 A2BIT02H 这样,P1口位1地址91H就赋给了
44、P11,而A2的值为02H。 8. END- 汇编结束伪指令 END伪指令通知汇编程序结束汇编。,主要内容,4.1汇编语言程序设计概述 4.2汇编语言程序设计步骤 4.3汇编语言程序设计 习题:4.1,4.2,4.4,4.6,4.6,第四章 MCS-51汇编语言程序设计,4.1 汇编语言程序设计概述,汇编语言程序 : 用汇编语言编写的、完成特定功能的指令序列 ,亦称汇编源程序。 汇编程序: 能将汇编语言源程序转换成机器语言目标程序的系统软件。,4.1 汇编语言程序设计概述,将汇编语言程序翻译成机器语言程序的过程称为汇编。 1.手工汇编:人工查指令表汇编。用于设计短小程序或调试程序的场合。 2.
45、机器汇编:用汇编程序进行汇编。,4.1 汇编语言程序设计概述,汇编源程序经汇编程序汇编得到机器语言程序,4.1 汇编语言程序设计概述,汇编的主要任务:,1)确定程序中每条汇编语言指令的指令机器码。 2)确定每条指令在存储器中的存放地址。 3)提供错误信息。 4)提供目标执行文件(*.OBJ/*.HEX)和列表文 件(*.LST)。,4.1 汇编语言程序设计概述,一、汇编语言语句的种类 1.指令性语句 指令系统中的全部指令,每条指令有对应的机器代码。 2. 伪指令 汇编控制指令,仅提供汇编信息,没有对应的机器代码。,4.1 汇编语言程序设计概述,二、汇编语言的格式 MCS-51汇编语言为四分段格
46、式。即 标号字段: 操作码字段 操作数字段 ; 注释字段 下面是一段汇编语言程序的四分段书写格式,4.1 汇编语言程序设计概述,例4.1:把片外存储器2200H单元中的数送入片内70H单元中。 标号域 操作码域 操作数域 注释域 BEGIN:MOV DPTR,#2200H ;(DPTR)=2200H MOV R0,#70H ;(R0)=70H MOVX A,DPTR ;(A)=(DPTR ) MOV R0,A ;(R0)=(A) HERE: SJMP HERE,4.1 汇编语言程序设计概述,基本语法规则: 1标号字段 是语句所在地址的标志符号 (1)标号后边必须跟以冒号“:” (2)由18个A
47、SCII字符组成 (3)同一标号在一个程序中只能定义一次 (4)不能使用汇编语言已经定义的符号作为标号,4.1 汇编语言程序设计概述,2操作码字段 是汇编语言指令中唯一不能空缺的部分。汇编程序就是根据这一字段来生成机器代码的。 3操作数字段 通常有单操作数、双操作数和无操作数三种情况。如果是双操作数,则操作数之间,要以逗号隔开。,4.1 汇编语言程序设计概述,(1)操作数可用十六进制(不能以字母开头,如果是字母开头的应在其前面添0) 、二进制和十进制数形式表示。 (2)工作寄存器和特殊功能寄存器常采用工作寄存器和特殊功能寄存器的代号来表示,也可用其地址来表示。 4注释字段 必须以分号“;”开头
48、,可换行书写,但必须注意也要以分号“;”开头。,4.2 汇编语言程序设计步骤,1.分析问题,确定算法 2.根据算法,画出程序流程图 3.分配内存工作区及有关端口地址 4.编写程序 养成在程序的适当位置上加上注释的好习惯。 5.上机调试 编写完毕的程序,必须“汇编”成机器代码,才能调试和运行,调试与硬件有关程序还要借助于仿真开发工具并与硬件连接。,4.3 汇编语言程序设计,汇编语言程序设计常用基本结构: 1顺序结构 2分支结构 3循环结构 4子程序 (含中断子程序),4.3 汇编语言程序设计,一、顺序结构 也称直线程序,程序走向只有一条路径。 例4.2 双字节求补程序(设数据在R4R5中): M
49、OV A,R5 ;取低字节 CPL A ADD A,#1 ;低字节求补 MOV R5,A MOV A,R4 ;取高字节 CPL A ADDC A,#0 ;高字节求补 MOV R4,A,4.3 汇编语言程序设计,例4.3 将压缩式BCD码分解成为单字节BCD码。,MOV R0,#40H;设指针 MOV A,R0;取一个字节 MOV R2,A;暂存 ANL A,#0FH;清0高半字节 INC R0 MOV R0,A ;保存数据个位 MOV A,R2 SWAP A ;十位换到低半字节 ANL A,#0FH INC R0 MOV R0,A;保存数据十位,4.3 汇编语言程序设计,二、 分支结构(单分支
50、和多重分支) 由条件转移指令构成程序判断框部分,形成程序分支结构。,1、单重分支程序 一个判断决策框,程序有两条出路。,4.3 汇编语言程序设计,例4.4 求R2中补码绝对值,正数不变,负数求补。 MOV A,R2 JNB ACC.7,NEXT ;为正数? CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束,4.3 汇编语言程序设计,2、多重分支程序多次使用条件转移指令,形成两个以上判断框。 指令系统提供了非常有用的两种多分支选择指令: 间接转移指令: JMP A+DPTR; 比较转移指令: CJNE A,direct,rel; CJNE A,#data
51、,rel; CJNE Rn,#data,rel; CJNE Ri,#data,rel;,4.3 汇编语言程序设计,例4.5 求符号函数Y=SGN(X) +1 当 X0 SGN(X)= 0 当 X=0 -1 当 X0,4.3 汇编语言程序设计,SYMB: MOV A,40H ;取X JZ STOR ;X=0,Y=X JB ACC7,MINUS ;X0 MOV A,# 1 ;X0,Y=+1 SJMP STOR MINUS:MOV A,#0FFH ;X0,Y= -1 STOR: MOV 41H,A ;保存Y RET,4.3 汇编语言程序设计,三、循环程序包含多次重复执行的程序段,循环结构使程序紧凑。
52、 循环程序的构成,1循环初始化 完成循环前的的准备工作。如:清结果单元、设指针、设循环控制变量初值等。,4.3 汇编语言程序设计,2循环处理 循环程序结构的核心部分,完成实际的处理工作,是需反复循环执行的部分,故又称循环体。这部分程序的内容,取决于实际处理问题的本身。 3循环控制 在重复执行循环体的过程中,不断修改循环控制变量,直到符合结束条件,就结束循环程序的执行。循环结束控制方法分为循环计数控制法和条件控制法。,4.3 汇编语言程序设计,计数循环结构 设循环计数器,控制循环次数。正计数和倒计数两种方式。 条件控制结构: 设定循环结束标志实现循环控制。 4.循环结束 对循环程序执行的结果进行
53、分析、处理和存放。 例4.6 找正数表最小值。正数表存在片外RAM中以LIST为起始单元,用-1作为结束标志。,4.3 汇编语言程序设计,START:MOVDPTR,#LIST ;数表首地址 MOVB,#127 ;预置正数最小值初值 NEXT: MOVX A,DPTR ;取数 INCDPTR ;修改指针 CJNE A,#-1,NEXT1 ;是否为表结尾? SJMP DONE ;循环结束 NEXT1:CJNE A,B,NEXT2 ;比较 NEXT2:JNCNEXT MOVB,A ;保存较小值 SJMP NEXT DONE: SJMP DONE,循环程序通常有两种编制方法: 一种是先循环处理后循环
54、控制(即先处理后判断),如图4-8所示; 另一种是先循环控制后循环处理(即先判断后处理),如图4-9所示。,4.3 汇编语言程序设计,例4.7 已知内部RAM的BLOCK单元开始有一无符号数据块,块长在LEN单元。请编出求数据块中各数累加和、并存入SUM单元的程序。 解: 1先判断后处理(见图4-10a),(a) 先判断后处理 (b) 先处理后判断 图4-10 例4.5程序流程图,求累加和参考程序:(见图4-10(a) ORG 1000H LEN DATA 20H SUM DATA 21H BLOCK DATA 22H CLR A ;A清零 MOV R2,LEN ;块长送R2 MOV R1,#
55、BLOCK ;块始地址送R1 INC R2 ;块长+1 SJMP CHECK LOOP: ADD A,R1 ;(A)+(R1)送A INC R1 ;修改数据块指针R1 CHECK: DJNZ R2,LOOP ;若未完,则转LOOP MOV SUM,A ;存累加和 SJMP $ END,2先处理后判断(见图4-10(b)) 参考程序为: ORG 1000H LEN DATA 20H SUM DATA 21H BLOCK DATA 22H CLR A ;A清零 MOV R2,LEN ;块长送R2 MOV R1,#BLOCK ;数据始地址送R1 NEXT: ADD A,R1 ;(A)+(R1)送A
56、INC R1 ;修改数据块指针R1 DJNZ R2,NEXT ;若未完,则转NEXT MOV SUM,A ;存累加和 SJMP $ END,4.3 汇编语言程序设计,例4.8 求n个单字节数据的累加,设数据串已在43H起始单元,数据串长度在42H单元,累加和不超过2个字节。,单重循环 简单循环结构:循环体中不套循环。,4.3 汇编语言程序设计,SUM: MOVR0,#42H ;设指针 MOVA,R0 MOVR2,A ;循环计数器n CLRA ;结果单元清0 MOVR3,A ADD1: INCR0 ;修改指针 ADDA,R0 ;累加 JNC NEXT ;处理进位 INCR3 ; 有进位,高字节加1 NEXT: DJNZ R2, ADD1 ;循环控制:数据是否加完? MOV40H,A ;循环结束,保存结果 MOV41H,R3 RET,4.3 汇编语言程序设计,多重循环 循环体中套循环结构。以双重循环使用较多。 例4.9 软件延时50ms程序设计。 设晶振为12MHz时,一个机器周期为1s。 DEL: MOV R7,#200 DEL1: MOV R6,#125 DEL2: DJNZ R6,DEL2 ;125*2=250s DJNZ R7,DEL1 ;0.25m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信用社呆账核销审计制度
- 企业三级培训教育制度
- 审计整改问责制度
- 地质队绩效考核制度
- 中小学绩效考核制度
- 内部审计奖惩制度细则
- 新材料及电子化学品配套磷资源精矿输送项目可行性研究报告模板-拿地立项申报
- 2023-2024学年广东省深圳市八年级(下)期中英语试题含答案
- 2023-2024学年广东深圳高级中学八年级(下)期中道法试题含答案
- T-SCA 019-2021 工业互联网集装箱二级节点平台用户接入与标识管理规范
- 更换引流袋技术操作
- 部编版三年级下册语文课课练全册(附答案)
- 军用靶场设计方案
- 管理会计学 第10版 课件 第3章 本-量-利分析
- Unit 3 Zhong Nanshan- Part B(小学英语教学)闽教版英语五年级下册
- 消防维保方案(消防维保服务)(技术标)
- 车辆交通危险点分析预控措施
- QC成果提高SBS防水卷材铺贴质量一次合格率
- 大舜号海难事故案例分析
- TGRM 057.1-2023 非煤岩岩爆倾向性评价规范 第1部分:室内指标测定及等级分类
- 2023年安徽新闻出版职业技术学院单招考试职业技能考试模拟试题及答案解析
评论
0/150
提交评论