单片机原理及应用(胡乾斌)第三章.ppt

上传人:sh****n 文档编号:14275467 上传时间:2020-07-15 格式:PPT 页数:97 大小:406.50KB
返回 下载 相关 举报
单片机原理及应用(胡乾斌)第三章.ppt_第1页
第1页 / 共97页
单片机原理及应用(胡乾斌)第三章.ppt_第2页
第2页 / 共97页
单片机原理及应用(胡乾斌)第三章.ppt_第3页
第3页 / 共97页
点击查看更多>>
资源描述
第三章,MCS51单片微机的指令系统,3.1 MCS51指令及其表示方法,指令系统是根据单片机硬件电路确定的一组操作编码,每一条指令完成一个特定的操作。指令系统设计是单片机设计的一个组成部分,芯片制造厂在推出单片机的同时也要提供指令系统,我们为了使用单片机就必须了解和熟悉其指令系统。本节介绍指令的格式,指令的字节数等基本知识。,一、机器语言指令与汇编语言指令,和一般的微机一样,指令具有两级形式,即机器语言指令和汇编语言指令,指令的集合便是程序。例如作10+20的运算可采用下列二进制机器语言程序 : 01110100B 00001010B 16进制表示为74H 0AH 00100100B 00010100B 24H 14H 为了使用方便,用助记符来表示操作性质,并规定一定的书写格式,这样就形成了汇编语言级的指令和程序,例如上述程序的汇编语言形式为: MOV A, #0AH ADD A, #14H,操作码,操作数,上述程序中MOV为助记符,表示操作的性质是数据传送,助记符后面的符号A为累加器ACC,是数据传送的“目的”地址(地址为符号地址),#0AH中前缀#表示0AH为数据,处于此位置的数据或符号(或不带#的数)是数据传送的“源”(或“源”地址)。第二条指令的ADD表示加法操作。根据上例可知,汇编语言指令的格式为: 标号:助记符 操作对象 指令中的操作对象可以是寄存器名、存贮器地址、数据(带有前缀#等),操作对象可以是1个或2个、3个,例如上例中两条指令均为两个操作对象,第一个为目的操作对象,第二个为源操作对象。,由于汇编语言指令不是机器代码,故编制好汇编语言程序后,还需要再翻译成机器语言程序(称目标程序),然后才能输入到计算机的存贮器中去执行。机器语言程序主要由数码组成,它包含两种不同性质的编码,一种是表示操作性质的数码操作码,另一种为表示某个数(或地址)的编码操作数,所以机器语言指令的格式为: 地址 操作码 操作数(02个) 例如上述机器码程序74H、24H为操作码,0AH、14H为操作数,汇编语言指令与机器语言指令具有完全确定的关系,二者可以互相转换。,二、指令的格式,指令是完成一种特定操作的命令。 一条指令由一个操作码和几个操作数组成,其中操作数可以是02个,在计算机中以8位二进制码为一个字节,各种编码均以字节为单位(即16进制的2位数)。,单字节指令: 双字节指令: 三字节指令:,操作码,操作码,操作数,操作码,第1操作数,第2操作数,二、指令的格式,例如: 操作内容 汇编语言 机器语言指令 累加器内容加1 INC A 00000100(04H) 累加器内容取反 CPL A 01011000(18H) MOV A ,Rn(n=07); 机器码为11101rrrb 式中 rrr为07的二进制码 MOV data , #data ; 机器码为 75H data #data,操作码,操作码,第一操作数,第二操作数,3.2 寻址方式,一、指令系统中使用的符号 A累加器; B乘、除运算寄存器,亦可当作一般寄存器使用; Rn工作寄存器n=07; Ri用于存放地址的工作寄存器i=0,1,亦称8位地址指针; DPTR16位数据(地址)指针(由DPH,DPL两个寄存器组成),存放16位地址; 以寄存器的内容为地址的前缀; rrr: R0R7对应的rrr为000111;,dir(direct或data)单片机内地址为dir(direct或data)的通用寄存器; #data8位的数据; #data1616位的数据; SP堆栈指针,其内容为堆栈栈顶的地址; bit位操作中的一个“位”; CPSW中的最高位,亦称位累加器; addr1111位地址; addr1616位地址; rel相对地址; (X)以X(R0,R1,DPTR,dir等)的内容为地址的该单元内容; 其它特殊功能寄存器符号及其内部的“位”符号。,二、寻址方式,计算机的各种操作都涉及到寄存器和存贮器,它们分布在片内和片外,数量很多,因此指令中必须明确指明是哪一个寄存器或哪一个存贮单元,寻址方式就是在指令中给出的寻找操作数或操作数所在地址的方法。执行任何一条指令都需要使用操作数。MCS51系列单片微机指令系统中共有以下7种寻址方式。,1.立即寻址,立即寻址是指在指令中直接给出参与操作的数,出现在指令中的这种操作数称为立即数,这种寻址方式称为立即寻址。为了与直接寻址指令中的直接地址相区别,在立即数前面必须加上前缀“#”。 例如:指令 MOV DPTR, #1234H 其中1234H就是立即数,指令功能是把16位立即数1234H送入数据指针DPTR中。,1.立即寻址,例如:指令 MOV DPTR, #1234H 机器语言指令: 90 12 34,程序存储器,PC,PC+1,PC+2,特殊功能寄存器,DPH,DPL,12,34,2.直接寻址,直接寻址是指在指令中直接给出操作数单元的地址。 例如:指令 MOV A, 3AH 其功能是把片内RAM中3AH单元内的数据传送给累加器A。直接寻址方式只能给出8位地址,因此这种寻址方式的寻址范围只限于片内RAM。具体地说: (1)低128单元,在指令中直接以单元地址形式给出。 (2)特殊功能寄存器,这时除可以单元地址形式给出外,还可以寄存器符号形式给出。虽然特殊功能寄存器可以使用符号标志,但在指令代码中还是按地址进行编码的。 例如:指令 MOV A,B ; MOV A,F0H ;,2.直接寻址,(3)位地址空间。 特殊功能寄存器和位地址空间只能用直接寻址方式来访问。 例:指令: MOV A,45H ; 机器代码:E5 45,程序存储器,E5,45,PC,PC+1,片内RAM,XX,45H,XX,A,3.寄存器寻址,寄存器寻址是指在指令中将指定寄存器的内容作为操作数。因此指定了寄存器就能得到操作数。 寄存器寻址方式中,用符号名称来表示寄存器。 例如:指令INC R0 其功能是把寄存器R0的内容加1,再送回R0中。由于操作数在R0中,指定了R0,也就得到了操作数。 寄存器寻址方式的寻址范围包括: (1)在指令中只能使用当前寄存器组。因此在使用中要通过指定PSW中的RS1、RS0,以选择使用的当前寄存器组。 (2)部分特殊功能寄存器。例如累加器A、B寄存器、CY以及数据指针DPTR。,3.寄存器寻址,例如:指令 MOV A,R3; 机器代码:EB 设累加器A 的内容为28H,R3的内容为58H。PSW中RS1,RS0分别为:1、0。则R3的地址为13H。,程序存储器,EB,PC,片内RAM,58,13H (R3),28 H,A,58H,4.寄存器间接寻址,寄存器间接寻址是指在指令中给出的寄存器内容是操作数的地址,从该地址中取出的才是操作数。寄存器间接寻址也需以寄存器符号名称的形式表示,为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址中,应在寄存器的名称前面加前缀“”。 例如:指令 MOV A , R0 ;机器代码 E6,程序存储器,片内RAM,5E,00H (R0),XX,A,5EH,XX,寄存器间接寻址的寻址范围: (1)片内RAM的低128单元,只能采用R0或R1作为间址寄存器,其形式为Ri(i=0,1),例: MOV A,R0; (2)片外RAM的64KB单元,使用DPTR作为间址寄存器,其形式为DPTR,例如:MOVX A,DPTR,其功能是把DPTR指定的片外RAM单元的内容送累加器A。 (3)片外RAM的256单元,除了可使用DPTR作为间址寄存器外,也可使用R0或R1作间址寄存器。例如MOVX A,R0; (4)堆栈区:堆栈操作指令(PUSH和POP)也应算作是寄存器间接寻址,即以堆栈指针(SP)作间址寄存器的间接寻址方式。,5.变址寻址,变址寻址是指以DPTR或PC作基址寄存器,累加器A作变址寄存器,以两者内容相加,形成的16位程序存储器地址作为操作数地址,又称基址寄存器+变址寄存器间接寻址。 有效地址=基址寄存器PC(或DPTR)+A 例如:指令 MOVC A,A+DPTR 机器代码 93 假定指令执行前(A)=54H, (DPTR)=1256H 变址寻址形成的操作数地址为1256H+54H=12AAH,若12AAH单元的内容为00H,则该指令执行的结果是A的内容为00H。,程序存储器,54,A,93,PC,SFR,56,DPL,DPH,12,1256H,54H,12AAH,12AAH,00,00,例如:指令 MOVC A, A+DPTR 机器代码 93,变址寻址指令有: MOVC A , A+DPTR; (A+DPTR) A MOVC A , A+PC; PC+1 PC,( A+PC ) A JMP A+DPTR; ( A+DPTR ) PC 变址寻址方式用于查表操作。,6.相对寻址,相对寻址是仅用于相对转移指令的一种寻址方式。与其他寻址方式不同,这种寻址方式是要寻找指令地址,即寻找下一条要执行指令的地址。相对寻址的有效地址D(目的地址)为: D=PC+rel PC的当前值称为源地址,它是相对转移指令操作码的地址;rel是相对地址,它是目的地址与源地址的差值。 相对地址的机器码称为偏移量,记为disp,它与rel的关系是: dipsrel-b 目的地址=源地址+转移指令字节数+dips 若转移指令为2字节,则b2;若转移指令为3字节,则b=3。偏移量为一字节二进制补码数,取值范围为-128一+127。相对地址取值范围为-126+129。在源程序中,相对地址rel一般用标号表示。,6.相对寻址,例如:指令 JC 18H ;设CY=1,操作码的地址为1000H。 机器代码 40 16,程序存储器,16,1001H,1000,PC,1000H,40,16H,1000H+2,1018H,1018H,1018H,6.相对寻址,例: 设有如下一段程序,试写出与JNZ RET0相对应的机器代码。 地址 机器代码 标号 源程序 0152H 70 XX JNZ RET0(A0, PC 016CH ) 016CH DO E0 RET0: POP A,解:源地址=0152H,目的地址=016CH,rel=D-PC=016CH-0152H=1AH,disp=rel-2=1AH-2=18H,18,6.相对寻址,例: 设有如下一段程序,试写出与DJNZ R7,ML2相对应的机器代码。 地址 机器代码 标号 源程序 0110H CO DO ML2: PUSH PSW 011BH DF XX DJNZ R7,ML2,解:源地址= 011BH ,目的地址= 0110H,rel=D-PC= 0110H - 011BH = - 0BH - 0BH补=F5H,disp=rel-2=F5H-2=F3H,F3,7.位寻址,8051有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式,位寻址的寻址范围: (1)RAM中的位寻址区 片内RAM中的单元地址20H-2FH,共16个单元128位,为位寻址区,位地址是00H-7FH。对这128个位的寻址使用直接位地址表示。 例如 MOV C,2BH 指令的功能是把位寻址区的2BH位的值送累加位C。 SETB 3AH;(给3A位置1) (2)可位寻址的特殊功能寄存器位 可供位寻址的特殊功能寄存器共有11个,有寻址位83位。,3.3 指令系统,MCS51的指令系统,共有111条指令,按其功能可分为五大类: (1)数据传送类指令(28条) (2)算术运算类指令(24条) (3)逻辑运算类指令(25条) (4)控制转移类指令(17条) (5)布尔操作(位)类指令(17条)。,3.3.1 数据传送类指令,一、片内数据传送指令 片内数据传送指令的助记符为MOV,大部分的传送方式都是双向的,现以目的寄存器为序列列出如下: 1.以累加器A为目的操作数的指令组 指令 操作内容 MOV A ,Rn; ARn MOV A, direct; A(direct) MOV A, Ri; A(Ri) MOV A, #data; Adata,1.以累加器A为目的操作数的指令组 例:R1=20H,(20H)=55H;MOV A,R1执行后,A=55H。 例:已知A=40H,R6=50H,(6FH)=32H,R0=18H,(18H)=10H,执行下列程序段: MOV A, R6 ; A 50H MOV A, 6FH ; A (6FH) MOV A, R0 ; A (R0) 执行后,A=10H。,2.以工作寄存器Rn为目的操作数的指令组 指令 操作内容 MOV Rn, A ; RnA MOV Rn, direct ; Rn(direct) MOV Rn, #data ; Rndata 这组指令的功能是把源操作数的内容送入当前工作寄存器区的R0-R7中的某一个寄存器,源操作数有寄存器寻址、直接寻址和立即寻址等寻址方式。 例:已知A=3FH,(4EH)=2FH,R1=20H,R3=30H,执行下列程序段: MOV A,#2EH ; A 2EH MOV R1 ,A ; R1 A MOV R2 ,4EH ; R2 ( 4EH ) MOV R3 ,#6FH ; R3 6FH 执行后,A=2EH,R2=2FH,R3=6FH,3.以直接地址direct为目的操作数的指令组 指令 操作内容 MOV direct, A ; (direct)A MOV direct, Rn ; (direct)Rn MOV direct1, direct 2 ; (direct1)(direct2) MOV direct, Ri ; (direct)(Ri) MOV direct, #data ; (direct) data 这组指令的功能是把源操作数的内容送入由直接地址指出的存储单元。源操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。,例如: MOV A,80H ; 表示把片内RAM中地址为80H单元(即P1口)中的内容送A。 MOV 80H,#88H ; 表示把立即数88H送到片内RAM中的80H地址单元中去。 MOV 80H, E0H ; 表示把E0H单元的内容送到80H单元中去。这是片内数据存储单元中的直接地址单元之间数据的直接传送。,4间接地址为目的操作数的指令 指令 操作内容 MOV Ri , A ; (Ri) A MOV Ri , direct ; (Ri) (direct) MOV Ri , #data ; (Ri) data 例:A=30H,R1=40H, MOV R1 , A ; 执行后, (40H)=30H。,二、16位数目标地址传送指令,MOV DPTR, #data16; 该指令把16位常数装入数据指针DPTR,即数据高八位送入DPH寄存器,数据低八位送入DPL寄存器。16位常数在指令的第二、第三字节中(第二字节为高位字节DPH,第三字节为低位字节DPL)。此操作不影响标志位。 例:执行指令 MOV DPTR,#1234H 执行结果:(DPH)=12H, (DPL)=34H,三、堆栈操作指令 PUSH direct:SPSP+1,(SP) (direct) POP direct:(direct) (SP),SP SP-1 例如:设SP=30H,(50H)=80H,指令如下: PUSH 50H ; SP SP+1,(31H) (50H) POP 40H ;(40H) (31H),SP SP- 1 程序执行过程中如图所示。,四、查表指令,MOVC A,A+PC ;PC PC+1,A ( A+PC) MOVC A,A+DPTR ;A (A+DPTR) 例如,在程序存储器中,数据表格为: 1010H:01 1011H:02 1012H:03 执行程序: 1000H:MOV A,#0DH ; A 0DH 1002H:MOVC A,A+PC ; A(0DH+1003H) 结果:A=01H,PC=1003H。,例如:在程序存储器中,数据表格为: 2000H:01H 2001H:23H 2002H:45H 2003H:67H 执行程序: 1000H:MOV A, #03H 1002H:MOV DPTR , #2000H 1005H:MOVC A, A+DPTR 结果:A=67H,DPTR=2000H。,五、片外数据传送指令,片外数据传送指令的助记符为MOVX,片外数据传送必须使用累加器A,另一操作对象采用间接寻址方式。 指令 操作内容 MOVX A , Ri ; A (Ri) MOVX A , DPTR ; A (DPTR) MOVX Ri , A ; (Ri ) A MOVX DPTR , A ; (DPTR) A,例如:DPTR=2000H,(2000H)=18H 指令 MOVX A, DPTR;执行后 A=18H,例如,把片内RAM40H单元中内容送到片外RAM 2000H单元中去。程序如下: MOV A, 40H ;A(40H) MOV DPTR, #2000H ;DPTR2000H MOVX DPTR, A ;(2000H)A 例如,把片外RAM2100H单元内容传送2120H 单元中去,程序如下: MOV DPTR, #2100H MOVX A, DPTR MOV DPTR, #2120H MOVX DPTR, A,六、交换指令,1、字节交换指令 XCH A, Rn ; A Rn XCH A, direct ; A (direct) XCH A, Ri ; A (Ri) 上述指令的功能是,将累加器A的内容与源操作数所指出的数据互相交换。 例如,已知R0=10H,A=4EH,(10H)=5FH;执行指令:XCH A, R0 ; 结果:A=5FH,(10H)=4EH。,2、半字节交换指令 XCHD A ,Ri ;A.3-A.0 (Ri.3-Ri.0) 该指令的功能是,将累加器A中低4位与Ri间接寻址单元内容的低4位相互交换,而各自的高4位内容不变。 例如,已知R0=10H,A=35H,片内RAM(10H)=46H; 执行指令:XCHD A , R0; 结果:A=36H,(10H)=45H。,3、累加器A的高4位与低4位内容互换指令 SWAP A ; A.3-A.0 A.7-A.4 该指令的功能是,将A的高、低两半字节相互交换。 例:设A=86H,程序如下: MOV R3,#4FH ; R3 4FH XCH A,R3 ; A R3 SWAP A ; A.7- A.4 A.3-A.0 XCH A,R3 ; A R3 结果:A=86H,R3=F4H,3.3.2 算术运算类指令,MCS51算术运算指令,主要是对8位无符号二进制数进行加法、减法、乘法和除法四则运算;增1、减1运算; 可以实现对压缩BCD码加减运算和对带符号二进制数进行2的补码运算。 算术运算指令共有24条。在加法、带进位加法和带借位减法的指令中,累加器A中总是存放目的操作数,并存放操作的中间结果;而源操作数则可以是立即数、工作寄存器内容、间接或直接寻址片内RAM内容。这些指令都影响程序状态字PSW的进位位C、溢出位OV、半进位位AC和奇偶标志位P。仅当源操作数为A时,加1、减1指令才对标志位P有影响。乘法、除法指令影响标志位OV和P。,一、加法类指令,1、加法指令(4条) ADD A,Rn ; A A+Rn ADD A,direct ; A A+(direct) ADD A, Ri ; A A+(Ri) ADD A, #data ; A A+data 这组指令的功能是,把源操作数所指出的内容和累加器A的内容相加,其结果存放在累加器A中。,例如,设A=85H,R0=20H,(20H)=9EH 执行指令: ADD A,R0; 其操作如下: 1000 0101 +)1001 1110 10010 0011 结果:A=23H、Cy=1、AC=1、OV=1、P=1。,2、带进位加法指令(4条),ADDC A ,Rn ; A A+Rn+Cy ADDC A ,direct ; A A+(direct)+Cy ADDC A ,Ri ; A A+(Ri)+Cy ADDC A ,#data ; A A+data+Cy 这是一组带进位的加法指令。其功能是,把源操作数所指出的内容和累加器A的内容以及进位标志Cy相加,结果存放在A中。带进位加法指令常用于多字节加法运算。,例如,设A=4EH,R0=20H,(20H)=9EH,Cy=1: 执行指令:ADDC A,R0; 其操作如下: 0100 1110 1001 1110 +) 1 1110 1101 结果:A=EDH,Cy=0,AC=1,OV=0,P=0。,3、加1指令(5条),INC A ; A A+1 INC Rn ; Rn Rn+1 INC direct ; (direct) (direct)+1 INC DPTR ; DPTR DPTR+1 INC Ri ; (Ri) (Ri)+1 这组指令的功能是,把操作数所指定单元的内容加1。其操作除第一条指令影响奇偶标志位外,其余指令操作均不影响PSW。 当用上述指令对并行I/O口的内容加1时,其原来的数据不是从I/O口的引脚上读入,而是从I/O口的输出锁存器中读入,加1后仍保存于输出锁存器下,即对I/O进行读改写操作。,4. 二十进制调整指令(1条),DA A ; 十进制修正 这条指令的功能是,对BCD码加法运算的结果自动进行修正,以便得到正确的BCD码运算结果。 如前所述,09的BCD码是用4位二进制数(00001001)表示的,进行加法运算时,两位BCD数之间应逢十进位。但是,计算机中加法运算都是按二进制规则进行的,所以对于用4位二进制数表示的1位BCD数实际上是逢十六进位,显然不符合十进制运算的要求,可能产生错误的结果。因此,在BCD码加法运算后,必须进行十进制调整,这样才可以得到正确的BCD码结果。,例如:设A=(00111000)BCD(即38) data=(01001001)BCD(即49):执行指令:ADD A, #data; 其操作如下: 0011 1000 +) 0100 1001 1000 0001 由于计算机中是按二进制进行运算的,BCD码结果为81,这显然是错误的。如果在ADD A, #data;指令执行之后,再执行一条指令DA A;即 1000 0001 +) 0000 0110(+6修正) 1000 0111 所得结果为87,即调整后得到的BCD码结果是正确的。,DA A; 指令的操作过程是:测试累加器A的低4位及辅助进位位AC,若A中的低4位值大于9或AC=1,则累加器A的低4位加6修正;测试累加器A的高4位及进位位CY,若A中的高4位值大于9或CY=1,则A的高4位加6修正;否则,不修正。 需要注意的是:DA A;指令只对累加器A起作用,它不能单独使用,且必须在加法指令ADD和ADDC之后,也不适用于减法指令。,例,编写6位BCD码加法程序。 解:设被加数存于片内RAM的30H32H单元中,加数存于40H42H单元中,低位在前,高位在后,各单元中均为压缩BCD码。结果和分别存入50H52H单元中。程序如下: MOV A,30H ADD A,40H; A (30H)+(40H) DA A MOV 50H,A ; 低2位BCD码之和存入50H中 MOV A,31H ADDC A,41H; A (31H)+(41H)+Cy DA A MOV 51H,A;中间2位BCD码及低位进位之和存51H中 MOV A ,32H ADDC A,42H; A (32H)+(42H)+C DA A MOV 52H,A: 高2位BCD码及进位之和存入52H中,二、减法类指令,1.带借位的减法指令(4条) SUBB A, Rn ; A A-Rn-Cy SUBB A, direct ; A A-(direct)-Cy SUBB A, Ri ; A A-(Ri)-Cy SUBB A, #data ; A A-data-Cy 这组指令的功能是,将累加器A中的数减去源操作数所指出的数和进位位Cy(有借位时Cy =1),其差值存入A中。 MCS51指令系统中,只有带借位的减法指令,在进行单字节或多字节减法运算时,应先将进位标志位Cy清0。,例:编写多字节减法运算程序。 解:设被减数在片内RAM30H32H单元中,减数在40H42H单元中,低位数对应低位地址,高位数对应高位地址,其差值存入50H52H单元中。程序如下: CLR C ; CY清0 MOV A,30H SUBB A,40H ;A (30H)-(40)-CY MOV 50H,A MOV A,31H SUBB A,41H ;A (31H)-(41H)-CY MOV 51H,A MOV A ,32H SUBB A,42H ;A (32H)-(42H)-CY MOV 52H, A,例:编写十进制减法程序。 解:由于MCS51没有十进制减法指令,为了能借用DA A 指令,可采用减法变成补码相加的办法,用9AH减去减数,即得以10为模的减数的补码。 设被减数和减数均为压缩BCD码,分别存于R3、R4中,其差值也存入R3中,程序如下: BCDSUB:CLR C MOV A,#9AH ;求减数的补码 SUBB A,R4 ADD A,R3 ;补码相加 DA A MOV R3,A,2、减1指令(4条) DEC A ; A A-1 DEC Rn ; Rn Rn-1 DEC direct ; (direct) (direct)-1 DEC Ri ; (Ri) (Ri)-1 这组指令的功能是,把操作数所指定的单元的内容减1,其操作除第一条指令影响奇偶标志外,其余指令操作均不影响PSW标志。 与加1指令一样,对并行I/0口的输出内容进行减1操作时,其原来口数据的值将从1/0口的输出锁存器读入,减1后的值仍保存于输出锁存器中,而不是对该输出口的引脚上内容进行减1操作。,三、乘法指令(1条),MUL AB ;BA AXB 这条指令的功能是,把累加器A和寄存器B中的两个8位无符号数相乘,所得16位乘积的低字节放在A中,高字节放在B中。如果乘积大于255(FFH),则溢出标志位OV置I,否则清0,CY总是为0。 例如,设A=40H,B=5EH; 执行指令:MUL AB 结果:A=80H,B=17H,乘积是1780H。,四、除法指令(1条),DIV AB ;AB的商 A,余数 B 这条指令的功能是将累加器A中8位无符号整数除以寄存器B中8位无符号整数。所得商的整数部分存于A中,余数存于B中。 如果除数为0,则指令执行结果为不定值,即A和B中内容不确定, 即0不能作除数。此时,OV置I。否则清0 。 例如,设A=F8H,B=12H; 执行指令;DIV AB 结果:A=0DH(商),B=0EH(余数)。,例:编写将累加器A中二进制数转换成3位BCD码程序,结果的百位数存于R7,十位数和个位数存于R6。 解:应用除法指令,将待转换的数除以100,得百位数,再将余数除以10,得十位数,最后的余数,即为个位数,编写程序如下: MOV B,#100 DIV AB ;A中商为百位数 MOV R7,A ;百位数送R7 MOV A , #10 XCH A,B ;B中余数与A中除数10互换 DIV AB ;A中得十位数,B中得个位数 SWAP A ADD A,B ;组合成2位BCD码 MOV R6,A ;十位、个位数送R6,3.3.3 逻辑运算类指令,这类指令主要用于对8位数进行逻辑运算,包括逻辑与、逻辑或、逻辑异或、取反、清零以及循环移位指令。 逻辑运算指令共有24条,下面分别予以介绍。 一、逻辑与指令(6条) ANL A, Rn ; A ARn ANL A, direct ; A A(direct) ANL A, Ri ; A A(Ri) ANL A, #data ; A Adata ANL direct, A ; (ditect) (ditect)A ANL direct, #date ; (ditect) (ditect)data,上述前四条指令的目的操作数是累加器A,源操作数可以是工作寄存器、片内RAM和立即数。指令的功能是,将A中的内容和源操作数所指定的内容按位逻辑与,结果存入目的操作数A中。 后两条指令的目的操作数是直接寻址单元内容,源操作数是累加器A或立即数,两个操作数的内容按位逻辑与,结果存入直接寻址单元中。 当直接寻址并行I/0口时,其情况与算术运算指令类同。其原来的数据不是从I/O口的引脚上读入,而是从I/O口的输出锁存器中读入,即对I/O进行读改写操作。,例如,已知A=8DH,R0=7EH; 执行指令:ANL A,R0 其操作如下: 1000 1101 (8DH) )0111 1110 (7EH) 0000 1100 (0CH) 结果:A=0CH。 逻辑与指令常用于屏蔽某些位,如上例所示,将A的D7位和D0位变为0,即屏蔽了。由此可见,用ANL指令屏蔽某些位,方法是将需屏蔽的位和0相与。,二、逻辑或指令(6条),ORL A, Rn ; A AVRn ORL A, direct ; A AV(direct) ORL A, Ri ; A AV(Ri) ORL A, #data ; A AVdata ORL direct , A ; (direct) (direct)VA ORL direct, #data ; (direct) (direct)Vdata 这组指令的目的操作数和源操作数跟逻辑与指令的相同,两个操作数指定的内容按位相或运算。前四条指令结果存入A中;后两个指令结果存入直接寻址单元中。对并行I/O口的操作跟逻辑与操作类同。,例如,已知A=DAH,R0=25H; 执行指令:ORL A,R0; 其操作如下: 11011010(DHA) V)00100101(25H) 11111111(FFH) 结果A=FFH 由上例可以看出,两个操作数中任一位只要有一个是1,该位操作结果为1;而只有两位均为0时,结果才为0。因此,可采用逻辑或指令实现对某些位置位的功能,同时逻辑或指令也可用于组合信息。,例如,将累加器A的D7、D5、D3、D1置1,其余位置0,送入外部数据存储器2000H单元。编写程序如下 ORL A,#10101010B ;A的D7、D5、D3、D1位置1 ANL A,#10101010B ;A的D6、D4、D2、D0位屏蔽 MOV DPTR,#2000H MOVX DPTR,A ;存数,三、逻辑异或指令(6条),两个操作数所指定的内容按位异或。前四条指令结果存入A中;后两条指令结果存入直接寻址单元中。对并行I/O口的异或操作跟逻辑与操作类同。利用上述所令,可对目的操作数的某些位取反,只需将取反的位与1相异或,这时源操作数常用立即数。,XRL A, Rn ; A AVRn XRL A, direct ; A AV(direct) XRL A, Ri ; A AV(Ri) XRL A, #data ; A AVdata XRL direct , A ; (direct) (direct)VA XRL direct, #data ; (direct) (direct)Vdata,例如,已知A=A5H,要求对高4位取反 执行指令:XRL A,#11110000B。 其操作如下: 1010 0101(A5H) )1111 0000(F0H) 0101 0101(55H) 结果:A=55H。,四、累加器A清零指令(1条) CLR A ;A 0 这条指令的功能是将累加器A的内容清0。 五、累加器A取反指令(1条) CPL A ;A A 这条指令的功能是将累加器A的内容逐位取反。,六、累加器A循环移位指令(4条),前两条指令的功能是,分别将累加器A的内容循环左移或右移一位;后两条指令的功能是,分别将累加器A的内容连同进位位CY循环左移或右移一位。,3.3.4 控制转移类指令,控制转移类指令属于程序控制指令。其作用是,改变程序执行的方向,或调用子程序,或从子程序返回。这些都是通过改变程序计数器PC中的内容来实现的。这类指令可分为转移指令、调用子程序指令和返回指令。下面分别予以介绍。,一、转移类指令,转移类指令通过改变PC的内容,以改变正在执行的指令顺序,转向新的地址继续执行下去,从而实现程序分支。根据指令转移的条件,转移指令可分为无条件转移指令和条件转移指令。前者CPU无条件地转移到指定位置执行程序,后者只有当条件满足时才能实现程序的转移,否则继续执行下一条指令。条件转移指令是使CPU能够进行逻辑判断的主要手段。,1、无条件转移指令(4条) LJMP addr16 ;PC addr16 AJMP addr11 ;PC PC+2,PC.10-PC.0 addr11 JMP A+DPTR ;PC (A+DPTR) SJMP rel ;PC PC +rel 第一条指令叫长转移指令,执行结果是,将16位地址addrl6送程序计数器PC中。 第二条指令叫绝对转移指令,指令中只提供了低11位地址,PC当前值的高5位不变,程序只能转移到下一条指令开始的2K字节范围内执行,其机器码为: a10 a9 a8 00001 ;其中00001为操作码 a7 a6 a5 a4 a3 a2 a1 a0 ;a10-a0为11位数 第三条指令是变址寻址(间接)转移指令,它是将累加器A中的8位数和数据指针DPTR中的16位数相加,形成16位的转移目标地址送给PC,而不改变A和DPTR的内容,不影响标志位。 第四条指令叫短转移指令是两字节无条件相对转移指令,该指令执行后,程序便转移到当前PC值与rel值之和所指示的地址单元。,例如: 地址 指令 1030H: AJMP addr11 设add11=00110000101B,指令的机器码: 001 00001 10000101 指令执行后:PC=00010 001 10000101 PC=1185H 程序转到1185H处执行。 例如:设累加器A中内容为0-6之间的偶数,程序存储器中存放着标号为JPTBL的转移表。执行下面程序,将根据A的内容转到相应的分支处理程序。 MOV DPTR ,#JPTBL JMP A+DPTR JPTBL:AJMP LABEL0 ;转LABEL0分支程序 AJMP LABEL1 ;转LABEL1分支程序 AJMP LABEL2 ;转LABEL2分支程序 AJMP LABEL3 ;转LABEL3分支程序,2、条件转移指令(10条),在多数情况下,程序的转移是有条件的,由条件转移指令来实现。根据给定的条件进行检测,若条件得到满足,则程序转向指定的目标地址去执行;否则,不转移,继续往下执行程序。这类条件转移指令都是相对转移指令,其转移的范围是以转移指令的下一条指令的第一个字节地址为起始地址的-128+127个字节内。 下面按不同的检测条件分四种情况加以介绍。,1)判零转移指令 JZ rel JNZ rel 这两条指令都是对累加器A的内容进行检测,根据A中的内容是否为零来决定程序是否转移,指令执行后,A的内容不变。指令执行过程如图所示。,2)判C、转移指令 JC rel JNC rel 这两条指令是以PSW中的进位标志CY作为检测条件,根据CY标志的情况来决定程序是否转移。指令执行过程如图所示。CY也是布尔(位)处理器的累加器,所以也可作为位处理CY转移指令,用于位处理方式。,3.比较转移指令 CJNE A, direct, rel CJNE A, #data, rel CJNE Rn, #data, rel CJNE Ri, #data, rel 指令的功能是,比较两个操作数的大小,如果它们的值不相等,则程序转移,转移的目标地址是PC+rel;如果它们的值相等,则不转移,程序继续往下(PC+3)执行。若第一操作数大于第二操作数,则CY=0;若第一操作数小于第二操作数,则CY=1。指令执行不影响任何一个操作数的内容。指令执行过程如图所示,图中S1、S2分别表示第一操作数和第二操作数。,CJNE是三字节指令,指令汇编后的机器语言格式如 下: 操作码 data rel-3 例如:指令 CJNE A,#45H,40H 机器代码 B4 45 3D 三字节相对转移指令的偏移量计算规则如下: 向后转移:偏移量=目的地址-(源地址+3) 向前转移:偏移量=(目地地址+0100H)-(源地址+3),例:已知程序段如下,试计算偏移量disp。 地址 机器码 源程序 2000H B4 80 disp CJNE A,#80H ,ADDR 2006H 24 38 ADDR: ADD A,#38H 解:目的地址大于源地址,这是向后转移的情况,所以 disp=2006H-(2000H+3)=03H,例:已知程序段如下,试计算偏移量disp。 地址 机器码 源程序 204DH 24 OF ADDR:ADD A,#OFH 205DH B4 80 disp CJNE A,#80H,ADDR 解:目的地址小于源地址,这是向前转移的情况,所以 disp=(204DH+0100H)(205DH+3)=EDH,4)循环转移指令 DJNZ Rn,rel DJNZ direct,rel 指令执行示意图所示。,例:累加器A的内容由0递增,加到100,其结果存在累加器A中,试编写该程序。 解:程序如下: 地址 机器码 源程序 2000H E4 CLR A ;A清0 2001H 75 50 64 MOV 50H,#64H ;设循环次数 2004H 04 L1:INC A ;累加 2005H D5 50 FC DJNZ 50H,L1 ;不为0,转L1 ;否则,顺序执行,二、调用子程序及返回指令,1、调用子程序指令(2条) LCALL addrl6 ; PC PC+3,SP SP+1,(SP) PC7-0 SP SP+1,(SP) PC15-8,PC addrl6 ACALL addr11 ;PC PC+2,SP SP+1,(SP) PC7-0 SP SP+1(SP) PC15-8,PC10-0 addr11 第一条指令LCALL为长调用指令,addr16是子程序入口地址。执行时,先将断口地址压入堆栈。然后将子程序入口地址装入PC,CPU转去执行子程序。 由于该指令提供了16位的子程序入口地址addr16,所以可调用64KB范围内所指定的子程序。LCALL指令为三字节指令,其汇编后机器语言格式为:12 addr15-8 addr7-0即紧接操作码12H后,16位地址先高位后低位,按顺序排列。,第二条指令ACALL为短调用指令(双字节指令)。其执行过程类似于LCALL指令。 但是,由于指令只提供了11位程序入口地址,因此被调用的子程序入口地址必须与调用指令ACALL的下一条指令的第一个字节在相同的2KB存储区内。,2.返回指令(2条),RET ; PC15-8 (SP),SP SP-1 PC7-0 (SP),SP SP-1 RETI ; PC15-8 (SP),SP SP-1 PC7-0 (SP),SP SP-1 第一条指令是子程序返回指令。指令的功能是,将堆栈内的断口地址弹出送入PC,使CPU返回到原断口地址处,继续执行原程序。 第二条指令是中断返回指令。这条指令除了执行RET指令的功能外,还清除内部相应的中断状态寄存器(该寄存器由CPU响应中断时置位)的内容。它只能用于中断服务程序,RETI与RET不能互换使用。返回指令只能置于子程序或中断服务程序的末尾,表示子程序或中断服务程序的结束。,三、空操作指令(1条),NOP ;PC PC+1 这是一条单字节指令。执行时,不作任何操作(即空操作),仅将程序计数器PC的内容加1,使CPU指向下一条指令继续执行程序。这条指令常用于产生一个机器周期的延迟或在程序中补空,便于程序调试时指令的增删。,3.3.5 位操作类指令,MCS-51单片机从硬件到软件构成了完整的按位操作的布尔处理器,或称位处理器。它与一般微处理器的主要区别在于:CPU不是以字节或字而是以位作为处理对象进行操作的。进行位操作时,以进位标志Cy作为位累加器,具有一套按位处理指令集,包括位数据传送、位逻辑运算和位条件控制转移等指令。 在MCS-51单片机内部数据存储器中,有两部分按位寻址的存储地址空间:一部分是片内RAM的20H-2FH共16个字节单元128位,其位地址为00H-7FH,各位地址相应于从20H字节单元的最低位开始,到2FH字节单元的最高位。另一部分是特殊功能寄存器区中,字节地址能被8整除的专用寄存器也具有位地址,其位地址从80H-F7H,中间有极少数位未被定义,不能按位寻址。,在汇编语言中,位地址的表达方式有下述几种: (1)直接用位地址表示 例:D4H,2FH (2)用点操作符号表示。 点操作符(即“.”)的前面部分是字节地址或是可位寻址的专用寄存器;其后面部分的数字表示它们的位。 例:(DOH).4,PSW.4 (3)寄存器的位定义名称。 例:RS1,OV。 (4)用户定义的位符号地址 例:L1 BIT PSW.4,即将PSW.4定义为位符号地址L1,经定义后,允许在指令中用L1代替PSW.4。,一、位数据传送指令(2条),MOV C,bit ;C (bit) MOV bit, C ;(bit) C 第一条指令的功能是,将位地址中的1位二进制数送入位累加器Cy中;第二条指令的功能则是,将位累加器Cy的内容传送到指定的位地址。注意,这种位数据传送指令必须通过位累加器Cy来实现,也就是说,其中一个操作数必须是位累加器Cy,另一个操作数可以是任何直接寻址的位。 例如,已知片内RAM (20H)=8AH=10001010B,P1口输出的数据为01100110B,执行下列程序: MOV C,07H ;C (20H).7 MOV P1.7,C ;P1.7 C 结果:Cy=1, P1.7=1。,二、位状态修改指令(6条),这组指令的功能是对位累加器Cy或直接寻址的位分别进行清0,取反、置1操作不影响其他标志位。,三、位逻辑运算指令(4条),这组指令的功能是,把位累加器Cy的内容及直接指定的位地址的内容分别逻辑与逻辑或,运算结果存于Cy中。指令中的“/”表示对该位地址内容取反后(不改变位地址原内容)再参与运算。 例如:设P1.0=1, A.7=1, OV=0,执行下列程序: MOV C,P1.0 ; C 1 ANL C,A.7 ; C 11 ANL C,/OV ; C 1/0 结果:C=1,例:编一程序,实现图示的逻辑功能。设输入变量U、V分别是P1.1、P2.2的输入状态,W是(20H)0位的变量,输出Y为P3.3. 解:程序如下:,四. 位条件转移指令(3条),JB bit, rel ; 若(bit)=1,则PC PC+rel 否则,PC PC+3 JNB bit, rel ; 若(bit)=0,则PC PC+rel; 否则,PC PC+3 JBC bit, rel ; 若(bit)=1,则PC PC+rel,(bit) 0 否则,PC PC+3,(bit) 0 上述3条指令均为相对转移指令,都是三字节指令。它们的功能是,分别检测指定位是1还是0,若条件符合,则CPU转向指定的目标地址去执行程序;否则,顺序执行下条指令。前两条指令操作时,不影响位地址内容;第三条指令不论条件满足与否,位检测后,将使位地址内容清0。 上述指令汇编后机器语言的格式以及偏移量的计算方法与前面三字节的相对转移指令相同。,例:比较片内RAM 40H、50H两个地址单元中无符号数的大小,若40H中的的数小,则把片内RAM中的40H位置1:若50H中的数小,则把片内RAM中的50H位置1:若40H与50H中的数值相等,则把片内RAM中的20H位置1,然后返回。试编写程序。 解:设程序起始起址为2000H,编出程序如下: 地址 机器码 源程序 2000H E5 40 MOV A,40H 2002H B5 50 03 CJNE A,50H,L1;两数不等,转L1 2005H D2 20 SETB 20H ;两数相等,20H位置1 2007H 22 RET 2008H 40 03 L1:JC L2 ;(40H)中数小,转L2 200AH D2 50 SETB 50H ;(50H)数小,50H位置1 200CH 22 RET 200DH D2 40 L2:SETB 40H ;(40H)数小,40H位置1 200FH 22 RET,应用举例1,MOV P1, #0FEH ; 11111110B 可以使P1.0上的发光二极管点亮 MOV P1, #0F0H ; 11110000B 可以使P1口上的上面4个发光二极管点亮,8段数码管显示,MOV P1, #00H ; 显示 8. MOV P1, #0F8H ; 显示 7 MOV P1, #88H ; 显示 A,应用举
展开阅读全文
相关资源
相关搜索

最新文档


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


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

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


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