![第3章指令系统[上new]_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/76c2ee28-5cde-4223-9006-8c1f4ef86b20/76c2ee28-5cde-4223-9006-8c1f4ef86b201.gif)
![第3章指令系统[上new]_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/76c2ee28-5cde-4223-9006-8c1f4ef86b20/76c2ee28-5cde-4223-9006-8c1f4ef86b202.gif)
![第3章指令系统[上new]_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/76c2ee28-5cde-4223-9006-8c1f4ef86b20/76c2ee28-5cde-4223-9006-8c1f4ef86b203.gif)
![第3章指令系统[上new]_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/76c2ee28-5cde-4223-9006-8c1f4ef86b20/76c2ee28-5cde-4223-9006-8c1f4ef86b204.gif)
![第3章指令系统[上new]_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-3/7/76c2ee28-5cde-4223-9006-8c1f4ef86b20/76c2ee28-5cde-4223-9006-8c1f4ef86b205.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、l3.1 .1 汇编语言汇编语言l汇编语言是用助记符、符号和数字等来表示指令的程序语言。汇编语言是用助记符、符号和数字等来表示指令的程序语言。l机器语言是用二进制编码来表示的。机器语言是用二进制编码来表示的。l89C51单片机是单片机是8位机,其机器语言以位机,其机器语言以8位二进制码为单位位二进制码为单位(一个字节)。(一个字节)。89C51指令有:单字节、双字节或三字节指指令有:单字节、双字节或三字节指令。令。例:“10+20”汇编语言程序 机器语言程序MOV A,#0AH 74 0AHADD A,#14H 24 14H机器语言程序(机器码,或称为机器语言程序(机器码,或称为“代码代码”)
2、通过某种方法)通过某种方法存放在存放在ROM中。中。l89C51汇编语言指令组成:汇编语言指令组成:操作码操作码 +操作数操作数l格式:格式: 操作码操作码目的操作数目的操作数 ,源操作数,源操作数l例:例: MOV A,#13H 标号段标号段-由用户定义的符号组。标号段可有可无。若一条指令中由用户定义的符号组。标号段可有可无。若一条指令中 有标号段,标号代表该指令的第有标号段,标号代表该指令的第1个字节所存放的存储个字节所存放的存储 器单元的地址,故标号又称为符号地址,在汇编时,把器单元的地址,故标号又称为符号地址,在汇编时,把 该地址赋值给标号。该地址赋值给标号。 操作码操作码-规定指令所
3、实现的操作功能,由规定指令所实现的操作功能,由25个英文字母表示。个英文字母表示。操作数操作数-指出了参与操作的数据来源和操作结果存放的目的单元。指出了参与操作的数据来源和操作结果存放的目的单元。 操作数可以是:一个常数(立即数);一个数据所在的操作数可以是:一个常数(立即数);一个数据所在的地址,即在执行指令时从指定的地址中取出操作数。地址,即在执行指令时从指定的地址中取出操作数。 操作码和操作数都有相对应的二进制代码(即机器码)。指令操作码和操作数都有相对应的二进制代码(即机器码)。指令代码由若干字节组成。代码由若干字节组成。l注释段注释段-可有可无。加入注释段的目的是便于阅读。在阅可有可
4、无。加入注释段的目的是便于阅读。在阅读读 程序,尤其是在调试程序时会带来很多方便。程序,尤其是在调试程序时会带来很多方便。l不同的指令,指令的字节数也不同。在不同的指令,指令的字节数也不同。在89C5189C51指令指令系统中,有系统中,有单字节(一字节)、双字节或单字节(一字节)、双字节或3 3字节指字节指令令。第一个字节第一个字节第二个字节第二个字节第三个字节第三个字节单字节指令单字节指令操作码操作码双字节指令双字节指令操作码操作码操作数操作数三字节指令三字节指令操作码操作码操作数操作数操作数操作数1. 单字节(一字节)指令单字节(一字节)指令单字节指令中的单字节指令中的8位二进制代码既包
5、含操作码的信息,也包含位二进制代码既包含操作码的信息,也包含操作数的信息。操作数的信息。 单字节指令又有二种情况:单字节指令又有二种情况:记住:一字节记住:一字节=8位二进制数位二进制数1). 指令码中隐含着对某一个寄存器的操作指令码中隐含着对某一个寄存器的操作例如,指令:例如,指令:INC DPTR“DPTR”是是“数据指针数据指针”,属于,属于“特殊功能寄存器特殊功能寄存器”。该条指令翻译成机器码为:该条指令翻译成机器码为:A3H。二进制数为:。二进制数为:1010 0011B。该机器码是人为(芯片发明者)规定的,该机器码是人为(芯片发明者)规定的,INTEL 51系列单片机系列单片机的指
6、令参见教材附录的指令参见教材附录A、B。2). 由指令码中的由指令码中的rrr三位的不同编码指定某一个寄存器三位的不同编码指定某一个寄存器例如,工作寄存器向累加器例如,工作寄存器向累加器A传送数据指令:传送数据指令:MOV A,Rn其指令格式(机器码)为:其指令格式(机器码)为:1110 1rrr2. 双字节指令双字节指令用一字节表示操作码,另一字节表示操作数或操作数所在的地址。用一字节表示操作码,另一字节表示操作数或操作数所在的地址。其格式为:其格式为:如:如:ADD A,#45H机器码:机器码:24H 45H问:该条指令占用问:该条指令占用ROM中几个单元?中几个单元?3. 3字节指令字节
7、指令一字节表示操作码,另两个字节为操作数。其格式为:一字节表示操作码,另两个字节为操作数。其格式为:如:如:MOV DPTR,#2100H机器码:机器码:90H 21H 00H寻址寻址-就是寻找就是寻找(或确定)(或确定)指令中指令中操作数操作数或或操作数所在的地址操作数所在的地址。寻址方式寻址方式-就是如何找到存放操作数的地址,并把操作数提就是如何找到存放操作数的地址,并把操作数提 取出来的方法。取出来的方法。寻址方式越多,计算机寻址能力越强,但指令系统也就越复杂。寻址方式分为以下七种:寻址方式分为以下七种: 按功能分为以下五种:按功能分为以下五种:1 1、立即数寻址、立即数寻址 1 1、数
8、据传送指令、数据传送指令2 2、直接寻址、直接寻址 2 2、算术运算指令、算术运算指令3 3、寄存器寻址、寄存器寻址 3 3、逻辑运算指令、逻辑运算指令4 4、寄存器间接寻址、寄存器间接寻址 4 4、控制转移类指令、控制转移类指令5 5、相对寻址、相对寻址 5 5、位操作指令位操作指令6 6、变址寻址、变址寻址7 7、位寻址、位寻址l指令中常用符号说明指令中常用符号说明(P56P56)Rn当前寄存器区的8个工作寄存器R0R7(n07);Ri当前寄存器区可作地址寄存器的2个工作寄存器R0和R1(i0,1);direct8位内部RAM单元的地址(即字节地址)及特殊功能寄存器的地址;#data表示8
9、位常数(立即数);#datal6表示16位常数;addr16表示16位地址;addrll表示11位地址;rel8位带符号的地址偏移量。偏移范围为-128+127。bit表示位地址;间接寻址寄存器或基址寄存器的前缀; / 位操作指令中,该位求反后参与操作,不影响该位;X 片内RAM的直接地址或寄存器;(X) 相应地址单元中的内容;(X)表示X地址单元中的内容; :箭头左边的内容送入箭头右边的单元内1、寄存器寻址、寄存器寻址 由指令指出寄存器组由指令指出寄存器组R0R7中某一个或其他寄存器中某一个或其他寄存器的内容作为操作数。的内容作为操作数。 如:1)、MOV A, R0 ;(R0) A 2)、
10、ADD A,R1 ;(A)+(R1) A 3)、MOV P1,A ;(A) P1口 操作数在寄存器中,如R0R7,A、B、Cy(位)、DPTR等。 在此寄存器中存放着在此寄存器中存放着真正的被操作对象真正的被操作对象。l例:例:“INC Rn” 指令的机器为:指令的机器为:0000 1rrr。 若若Rn为为R 3 时,即时,即 INC R3 ,则其机器码为,则其机器码为0000 1011。2、直接寻址直接寻址 指令中直接给出的操作数是片内指令中直接给出的操作数是片内RAM单元的的地单元的的地址。址。 如:MOV A,40H ;(40H) A ,即片内即片内RAM40H单元的内容送入单元的内容送
11、入A中中 使用使用 直接寻址方式可访问片内直接寻址方式可访问片内RAM的低的低128个单元及特殊个单元及特殊功能寄存器(功能寄存器(SFR)。)。 对对SFR,既可使用其字节地址,也可使用其名字。,既可使用其字节地址,也可使用其名字。 如:如: MOV A , P0 ; (P0) A P0口的字节地址为口的字节地址为80H,故上条指令又可写成:,故上条指令又可写成: MOV A, 80H ; (80H) A 3、立即数寻址、立即数寻址 操作码后面紧跟的是一字节或两字节操作数。操作码后面紧跟的是一字节或两字节操作数。 用用“#” 表示,以区别直接地址。表示,以区别直接地址。 如:如:MOV A,
12、 #40H ;40H A 该指令与该指令与“MOV A,40H”有何区别?有何区别?89C51中只有一条要求操作码后面两字节立即数的指令:中只有一条要求操作码后面两字节立即数的指令: MOV DPTR, #datal6例:例:MOV DPTR,#2100H ;2100H DPTR 其机器码为:其机器码为:90 21 00H4、寄存器间接寻址、寄存器间接寻址 操作数的地址事先存放在某个寄存器中,然后把操作数的地址事先存放在某个寄存器中,然后把 这个寄存器中的内容作为地址,由该地址所指定这个寄存器中的内容作为地址,由该地址所指定 的单元内容作为操作数。的单元内容作为操作数。 89C51规定规定用用
13、R0或或R1作为间接寻址寄存器,可寻址片内作为间接寻址寄存器,可寻址片内RAM低位地低位地址的址的128字节单元内容;字节单元内容; 用用DPTR(数据指针)作为间接寄存器,寻址数据指针)作为间接寄存器,寻址片外片外RAM(数据存储器)的数据存储器)的64KB空间,但不能用这种寻址方法寻址特殊空间,但不能用这种寻址方法寻址特殊功能寄存器(功能寄存器(SFR)。)。如如: MOV A,R0 MOVX A,DPTR操作数在片操作数在片内内RAMRAM中中操作数在操作数在片外片外RAMRAM中中例如:将片内例如:将片内RAM 65H单元的内容单元的内容47H送送A。其中其中R0中的内容为中的内容为6
14、5H。 程序如下:程序如下: MOV R0,#65H ;65H (R0R0) MOV 65H,#47H ;47H (6565H H) MOV A,R0 ;(;(R0) A A使用使用“MOV A,Ri”时时 R0或或R1要先赋值。要先赋值。5 5、变址寻址、变址寻址( (基址寄存器基址寄存器+ +变址寄存器寻址变址寄存器寻址) ) 以以DPTR或或PC为基址寄存器,以为基址寄存器,以A为变址寄存器(为变址寄存器(A中的中的内容为无符号数),把两者内容相加(形成的内容为无符号数),把两者内容相加(形成的16位地址)位地址)作为操作数的地址。作为操作数的地址。 用变址寻址方式用变址寻址方式只能访问
15、只能访问ROM(从(从ROM中读取数据),中读取数据),访问范围:访问范围:64KB。 例:例: MOVC A, A+DPTR ;(;(A)+(DPTR) A 变址寻址方式常用于查表操作。变址寻址方式常用于查表操作。使用该指令时,使用该指令时, DPTR要先赋值。这个数值一般要先赋值。这个数值一般称为表的首地址。称为表的首地址。E0A程序存储区2040H 9320E0H 472041H DPH 20DPL 00ALU20E0H47指令代码例如: 2040H:MOVC A,A+DPTR 设DPTR=2000H,A=0E0H机器码为机器码为:93HPC6 6、相对寻址、相对寻址将将PCPC中的当前
16、内容与指令中的当前内容与指令第二字节给出的数第二字节给出的数相加,结果作为跳相加,结果作为跳转指令的转移地址(转移目的地址)。转指令的转移地址(转移目的地址)。PCPC中的中的当前当前内容称为内容称为基基地址地址(本指令后的字节地址)指令第二字节给出的数据称为(本指令后的字节地址)指令第二字节给出的数据称为偏偏移量移量( (rel)rel),1 1字节带符号数字节带符号数. . 常用于跳转指令。常用于跳转指令。 如如: : JC 23H ;JC 23H ;若若Cy=0Cy=0,不跳转;不跳转; Cy=1Cy=1,跳转跳转改变PC程序存储区ALU如:1000H: JC 23H;若若Cy=0,不跳
17、转;不跳转; Cy=1,向前跳转向前跳转23H个单个单元元1025H1000H 401025H 451001H 23 1024H 471002H 3023H1002H指令代码当前PC其机器码为:其机器码为:40 2340 23H H地址共共23H个单元个单元PC目的地址目的地址 = = 源地址源地址 + 2 + 2(相对转移指令字节数)(相对转移指令字节数)+ + relrel相对转移分为相对转移分为正向跳转正向跳转和和反向跳转反向跳转。正向跳转时:正向跳转时: rel = rel = 目的地址目的地址 源地址源地址 2 2反向跳转时:反向跳转时:rel = FEH rel = FEH 地址差
18、地址差7 7、位寻址、位寻址对片内对片内RAMRAM的的位寻址区位寻址区和某些可和某些可位寻址位寻址的特殊功能寄存器进行的特殊功能寄存器进行位操作时的寻址方式。位操作时的寻址方式。 如如: : SETB 3DH; SETB 3DH; 将将2727H.5H.5位置位置1 1 CLR C CLR C ;CyCy位清位清0 0操作数在片内RAM位地址区或SFR某些位中 MCS-51指令系统分为五大类指令系统分为五大类l数据传送指令(数据传送指令(28条)条)l算术运算指令(算术运算指令(24条)条)l逻辑运算及移位指令(逻辑运算及移位指令(25条)条)l控制转移指令(控制转移指令(17条)条)l位操
19、作指令或布尔操作(位操作指令或布尔操作(17条)条) 共共111条指令。条指令。l传送传送-把源地址单元的内容传送到目的地把源地址单元的内容传送到目的地址单元中去址单元中去,而源地址单元的内容不变而源地址单元的内容不变;或者或者源、目的单元内容互换。源、目的单元内容互换。传送指令的助记符:传送指令的助记符:“MOV”功能:功能:将源地址单元的内容传送到目的字节,而将源地址单元的内容传送到目的字节,而 源字节的内容不变。源字节的内容不变。1. 1. 以累加器以累加器A A为目的操作数的指令为目的操作数的指令 汇编指令格式汇编指令格式 操作操作 MOV A, data ; data A。 2字节指
20、令字节指令 机器码:机器码:74H dataH MOV A, Rn ; n=07, (Rn) A。 1字节指令字节指令 MOV A, Ri ; i=0,1 , (Ri) A。 1字节指令字节指令 MOV A, direct ; (direct) A ,direct为内部为内部RAM或或SFR地址。地址。 2字节指令字节指令上述操作会影响上述操作会影响PSW的内容(即影响的内容(即影响P标志位)。标志位)。例:执行下列指令后,(例:执行下列指令后,(A)=?MOV R0, #30HMOV 30H, #60HMOV A, R0(A)=?MOV Rn, A ; (A) Rn , n=07。 1字节指
21、令字节指令MOV Rn , direct ; (direct) Rn。 2字节指令字节指令MOV Rn ,data ; data Rn。 2字节指令字节指令例(A)=78H,(R5)=47H,(70H)=0F2H。写出执行下列指令的注释。MOV R5,A ;(A) R5,(R5)=78HMOV R5,70H ;(70H) R5,(R5)=0F2HMOV R5,#0A3H ;0A3H R5,(R5)=0A3H注意:指令注意:指令“ MOV Rn,Rn”是非法指令!是非法指令!MOV direct, A ; (A) direct。 2字节指令字节指令MOV direct, Rn ; (Rn) di
22、rec t , n=07。 2字节指令字节指令MOV direct, Ri ; ( Ri ) ) direct , i=0,1。 2字节指令字节指令MOV direct1, direct 2 ; (direct2) direct1。 3字节指令字节指令MOV direct, #data ; data direct。 3字节指令字节指令例例1 1:MOV 20H,AMOV 20H,R1MOV 20H,30HMOV 20H,R1MOV 0A0H,#34HMOV P2,#34H例例2 2:MOV 78H,#80H机器码:75 78 80H例3: MOV 78H,80H机器码:85 80 78H注意注
23、意例例2 2、例例3 3的区的区别。别。MOV Ri, A ; (A) (Ri) ) ,i=0,1。 1字节指令字节指令MOV Ri , direct ; (direct) (Ri) )。 2字节指令字节指令MOV Ri ,data ; data (Ri) )。 2字节指令字节指令功能:把源操作数指定的内容送入以R0或R1为地址指 针的片内存储单元中。例:例:MOV R0MOV R0,A AMOV R1MOV R1,20H20HMOV R0MOV R0,#34H#34H使用使用Ri时,时,R0或或R1要先赋值。要先赋值。如:如:MOV R0,#46HMOV R0,AMOV DPTR, #dat
24、a16 ; dataHDPH, dataLDPL ; 3字节指令字节指令DPTR-数据指针,为SFR中(DPH)、(DPL)例:例:MOV DPTRMOV DPTR,#1234H#1234H结果:结果:(DPHDPH)= =1212H H,(,(DPLDPL)= =3434H H。 例如:例如: MOV DPLMOV DPL,#12H #12H MOV DPH MOV DPH,#35H#35H 则就相当于执行:?则就相当于执行:?l例题例题1:l例题例题2:请判断下列的请判断下列的MCS-51单片机指令的书写格式是否单片机指令的书写格式是否有错,若有,请说明错误原因。有错,若有,请说明错误原因
25、。 MOV 50H,R3 MOVC A,R0+DPTR答案:答案: 间址寄存器不能使用间址寄存器不能使用R2R7。 MOVC A,R0+DPTR 。变址寻址方式中的间址。变址寻址方式中的间址 寄存器不可使用寄存器不可使用R0,只可使用,只可使用AMOVC A, A+DPTR ;先(先(PC)+ 1 PC,(A)+(DPTR) A MOVC A, A+PC ; 先(先(PC)+ 1 PC,后后(A)+(PC) A上面两条指令均为:上面两条指令均为: 1字节指令字节指令例例: (DPTR)=0300H, (A)02H ROM中中 (0302H)=55H执行:执行: MOVC A, A+DPTR结果
26、:结果:(A)=55H使用使用“MOVC A,A+DPTR”指令时,指令时, DPTR要先赋值。这个数值一般称为表的首地址。要先赋值。这个数值一般称为表的首地址。lP61.例:例:在在ROM中,数据表格为:中,数据表格为:执行程序:执行程序:1000H:MOV A,#0DH ;0DHA,查表的偏移量,查表的偏移量1002H:MOVC A,A+PC ;(;(0DH+1003H)A1003H:MOV R0,A ;(;(A)R0执行完上述指令后的结果为:执行完上述指令后的结果为:(A)=02H,(,(R0)=02H,(,(PC)=1004H。数据表格数据表格lP62.例:例:在在ROM中,数据表格为
27、:中,数据表格为:执行程序:执行程序:1000H:MOV A,#10H ;10HA,查表的偏移量,查表的偏移量1002H:PUSH DPH ;保护现场;保护现场1004H:PUSH DPL1006H:MOV DPTR,#7000H ;表首地址;表首地址DPTR1009H:MOVC A,A+DPTR ;(;(10H+7000H)=(7010H)=02HA100AH:POP DPL ;恢复现场;恢复现场100CH:POP DPH执行后结果为:(执行后结果为:(A)=02H,(,(PC)=100EH,(DPTR)=原值。原值。 地址地址 机器码机器码 源程序源程序 ORG 0050H0050 740
28、3 MOV A, #03H0052 83 MOVC A, A+PC0053 00 DB 00H0054 01 DB 01H0055 04 DB 04H0056 09 DB 09H0057 10 DB 10H0058 19 DB 19H0059 24 DB 24H 005A 31 DB 31H005B 40 DB 40H005C 51 DB 51H END“ORG”、“DB”为为伪指令。伪指令。P108执行该程序段后:执行该程序段后:(A)=09H。源程序源程序 ORG 0050H MOV A, #03H MOV DPTR,#TLV ;表首地址表首地址DPTR MOVC A, A+DPTR ;查
29、表查表 MOV R6,A SJMP $TLV:DB 00H, 01H, 04H, 09H, 10H DB 19H, 24H, 31H, 40H, 51H END表首地址表首地址MOVX A, DPTR ; (DPTR) A,地址范围地址范围64K MOVX A, Ri ; (Ri) A,地址范围地址范围0255上面两条指令为上面两条指令为”读读”。硬件自动使。硬件自动使RD引脚产生低电平,引脚产生低电平,WR引脚为高电平。引脚为高电平。 MOVX DPTR, A ; (A) (DPTR) MOVX Ri , A ; (A) (Ri) 上面两条指令为上面两条指令为”写写”。硬件自动使。硬件自动使
30、WR引脚产生低电平,引脚产生低电平,RD引脚下为高电平。引脚下为高电平。 以上四条指令均为以上四条指令均为:1字节指令字节指令 使用使用“MOVX A,DPTR”和和“MOVX DPTR ,A”指令时,指令时, DPTR要先赋值。这个数值一般称为源首地址或目的首地址。要先赋值。这个数值一般称为源首地址或目的首地址。说明:说明: 1.在MCS-51中,与外部存储器RAMRAM打交道的只可以是累加器A A 。所有需要送入外部RAMRAM的数据必需要通过A A送去,而所有要读入的外部RAMRAM中的数据也必需通过A A读入。内部RAM间可以直接进行数据的传递,而外部则不行。2.2.要要“读读”或或“
31、写写”外部的外部的RAMRAM,当然也必须要知道当然也必须要知道RAMRAM的地址,对的地址,对“MOVX AMOVX A,DPTRDPTR”和和“MOVX MOVX DPTRDPTR,A A”两条指令中,地址是被直接放在两条指令中,地址是被直接放在DPTRDPTR中中的。的。 而而“MOVX AMOVX A,RiRi”和和“MOVX Ri,AMOVX Ri,A”两条指两条指令,由于令,由于RiRi(即即R0R0或或R1R1)只是只是8 8位的寄存器,所以位的寄存器,所以只提供低只提供低8 8位地址。高位地址。高8 8位地址由位地址由P2P2口来提供。口来提供。3.3.使用时应先将要使用时应先
32、将要“读读”或或“写写”的地址送入的地址送入DPTRDPTR或或RiRi中,然后再用中,然后再用“读读/ /写写”命令。命令。 请同学阅读请同学阅读“上机实验指导书上机实验指导书”实验一的程序!实验一的程序!例题例题2 2:将片外RAMRAM中某一单元(设为0100H单元)的数据 送入片内RAMRAM的60H单元中,试编写程序。例题例题3 3:将片内RAMRAM中50H单元的数据送到片外RAMRAM的1060H单元 中,试编写程序。例题例题1 1:将外部RAMRAM中某一单元(设为0100H单元)的数据 送入外部RAMRAM的另一个单元(设为0200H单元)中,试编 写程序。 入栈指令入栈指令
33、 PUSH directPUSH direct ;先(先(SPSP)+1+1SPSP,后后( (direct) direct) (SP)(SP) 出栈指令出栈指令 POP direct POP direct ;先先 ((SP)(SP)) ( (direct) direct) , ,后(后(SPSP)-1 -1 ( SP SP)这两条指令均为:这两条指令均为:2 2字节指令。字节指令。第一条为第一条为压入压入指令,就是将指令,就是将directdirect中的内容送入中的内容送入堆栈堆栈中,第二中,第二条为条为弹出弹出指令,就是将指令,就是将堆栈堆栈中的内容送回到中的内容送回到directdir
34、ect中中例:例: MOV SPMOV SP,#5FH#5FH MOV A MOV A,#100#100 MOV B MOV B,#20#20 PUSH ACC PUSH ACC PUSH BPUSH B将将SPSP中的值加中的值加1 1,即变为,即变为6060H H,然后然后将将A A中的值送到中的值送到6060H H单元中,因此执单元中,因此执行完本条指令后,(行完本条指令后,(6060H H)=100=100,同,同样,执行样,执行PUSH BPUSH B时,是将时,是将SP+1SP+1,即即变为变为6161H H,然后将然后将B B中的值送入到中的值送入到6161H H单元中,即执行完
35、本条指令后,单元中,即执行完本条指令后,(6161H H)=20=20。堆栈的操作原则:先进后出堆栈的操作原则:先进后出字节交换指令字节交换指令XCH A , Rn ; (A) (Rn)。 1字节指令字节指令XCH A , direct ; (A) (direct)。 2字节指令字节指令XCH A , Ri ; (A) (Ri)。 1字节指令字节指令例: (A)=80H, (R7)=97H执行:XCH A , R7结果:(A)=97H, (R7)=80H半半字节交换指令字节交换指令XCHD A, Ri ;(A)0-3 (Ri ) 0-3 )。 1字节指令字节指令例:(R0)=60H, (60H
36、)=3EH, (A)=59H执行: XCHD A, R0结果:(A) 5E H (60H)39 H主要对主要对8 8位无符号数;位无符号数;也可用于带符号数运算。也可用于带符号数运算。 包括:加、减、乘、除、加包括:加、减、乘、除、加1 1、减、减1 1运算指令运算指令 影响影响PSWPSW有关位。有关位。复习复习-PSW寄存器寄存器Cy:进位标志位AC:辅助进位标志位F0: 供用户使用的标志位OV:溢出标志位P:奇偶标志位 A中数据的奇偶性。当1的个数为奇数,P=1,否则P=0。RS1 RS0 0 0 区0(地址:00H07H) 0 1 区1(地址:08H0FH) 1 0 区2(地址:10H
37、17H) 1 1 区3(地址:18H1FH)1.1.不带进位位的加法指令不带进位位的加法指令 ADD AADD A,#data #data ; (A) (A)dataAdataA。2 2字节指令字节指令ADD AADD A,direct direct ; (A) (A)(direct )A(direct )A。 2 2字节指令字节指令ADD AADD A,Rn Rn ; (A) (A)(Rn)A(Rn)A。 1 1字节指令字节指令ADD AADD A,Ri Ri ; (A)(A)(Ri)A(Ri)A。 1 1字节指令字节指令用途:将A中的值与源操作数所指内容相加,最终结 果存在A中。lP65.
38、例3-1 设(设(A A)=0C3H=0C3H,(,(R0R0)=0AAH=0AAH。执行指令:执行指令:ADD AADD A,R0R0问:执行指令后,问:执行指令后,A A、R0R0、CYCY、ACAC和和OVOV的内容是什么?的内容是什么?问题:问题:OVOV溢溢出是什么意出是什么意思?思?若认为是补码运算,则运算结果若认为是补码运算,则运算结果为为-61+(-86)=-147-61+(-86)=-147超出了补码的超出了补码的表示范围表示范围(-128(-128+127)+127)。负溢出。负溢出。也可以这样理解:两个负数相加,也可以这样理解:两个负数相加,而结果为正,出错。而结果为正,
39、出错。例:例:单片机上电复位后,单片机上电复位后,执行下面的指令:执行下面的指令: MOV AMOV A,#78H#78H MOV R0 MOV R0,#64H#64H ADD AADD A,RORO问:执行该指令后:(问:执行该指令后:(A A)= =?,(?,(R0R0)= =?,(?,(PSWPSW)= =?问题:问题:OVOV溢溢出是什么意出是什么意思?思?若认为是补码运算,则若认为是补码运算,则运算结果为运算结果为+120+64=+220+120+64=+220超出了补超出了补码的表示范围码的表示范围(-128(-128+127)+127)。正溢出。正溢出。也可以这样理解:两个也可以
40、这样理解:两个正数相加,而结果为负,正数相加,而结果为负,出错。出错。l例如例如: 若若A=1101 0011B, (R1)=1110 1000B, 执行指令执行指令“ADD A, R1”时时, 其算式表达为其算式表达为:相加后相加后(A)=1011 1011B(A)=1011 1011B。 若认为是若认为是无符号无符号相加相加, , 则则A A的值代的值代表十进制数表十进制数187187; 若认为是若认为是有符号数有符号数(补码)相加(补码)相加, , 则则A A的的值为十进制值为十进制-69-69。l在确定相加后进位标志在确定相加后进位标志CY的值时的值时, 总是把两个操作数作为总是把两个
41、操作数作为无符号数无符号数直接相加而得出进位直接相加而得出进位CY值。值。 如上例中如上例中, 相加后相加后CY=1。 若为无符号数相加若为无符号数相加CY代表十进制数代表十进制数256, 但若是两但若是两个有符号数相加个有符号数相加, CY的值没有意义。的值没有意义。l在确定相加后溢出标志在确定相加后溢出标志OV的值时的值时, 计算机总是把操作数计算机总是把操作数当当作带符号数来对待作带符号数来对待。 在作加法运算时在作加法运算时, 一个正数和一个负数一个正数和一个负数相加是不可能产生溢出的相加是不可能产生溢出的, 只有两个同符号数相加才有可能只有两个同符号数相加才有可能产生溢出产生溢出,
42、表示运算结果出错。表示运算结果出错。l溢出标志位溢出标志位OV只有带符号运算时才有用。只有带符号运算时才有用。ADDC AADDC A,RnRn;(A)(A)(Rn)(Rn)CYACYA。 1 1字节指令字节指令ADDC AADDC A,directdirect ;(A)(A)(direct )(direct )CYACYA。 2 2字节指令字节指令ADDC AADDC A,RiRi;(A)(A)(Ri)(Ri)CYACYA。 1 1字节指令字节指令ADDC AADDC A,#data#data;(A)(A)#data#dataCYACYA。 2 2字节指令字节指令对标志位的影响与对标志位的影
43、响与ADD相同相同说明:说明:由于由于5151单片机是一种单片机是一种8 8位机,所以只能做位机,所以只能做8 8位的位的数学运算,但数学运算,但8 8位运算的范围只有位运算的范围只有0255,这在实际工,这在实际工作中是不够的,因此就要进行扩展,一般是将作中是不够的,因此就要进行扩展,一般是将2 2个个8 8位位( (两字节两字节) )的数学运算合起来,成为一个的数学运算合起来,成为一个1616位的运算,位的运算,这样,可以表达的数的范围就可以达到这样,可以表达的数的范围就可以达到065535。3. 3. 带借位的减法指令带借位的减法指令SUBB ASUBB A,RnRn ;(A)(A)(R
44、n)(Rn)CYACYA。 1 1字节指令字节指令SUBB ASUBB A,direct direct ;(A)(A)(direct )(direct )CYACYA。 2 2字节指令字节指令SUBB ASUBB A,RiRi ;( (A)A)(Ri)(Ri)CYACYA。 1 1字节指令字节指令SUBB ASUBB A,#data #data ;(A)(A)#data#dataCYACYA。 2 2字节指令字节指令若在使用若在使用“SUBB”指令前不知道指令前不知道“CY”值,则应先将值,则应先将“CY”清清“0”。lP66.例:例:3-3设累加器设累加器A的内容为的内容为0C9H,寄存器,
45、寄存器R2的内容为的内容为54H,进位标,进位标志志CY=1。执行指令。执行指令“SUBB A,R2”的结果为(的结果为(A)=74H,CY=0,AC=0,OV=1。补码,其真值为补码,其真值为-55补码,其真值为补码,其真值为-56补码,其真值为补码,其真值为84补码,其真值为补码,其真值为116补码时:补码时:-55-1-(+84)=-140,超过了补码表示的范围,超过了补码表示的范围4.4.乘法指令乘法指令 MUL AB MUL AB ;(A)(A)(B)B(B)B15158 A A7 70 。 1字节指令字节指令 功能:功能:把累加器把累加器A A和寄存器和寄存器B B中的两个中的两个
46、8 8位无符号数相位无符号数相乘,所得乘,所得 16 16位积的低位积的低8 8位存放在位存放在A A中,积的高中,积的高8 8位存放在位存放在B B中。若中。若 乘积乘积00FFH(255)FFH(255),则则“OV”OV”置置1 1;否则清;否则清0 0(即(即B B的内容的内容 为为0 0)。)。CYCY总是被清总是被清0 0。P66. 例例3-4(A)=4EH, (B)=5DH。执行指令:。执行指令:MUL AB 后,其结果是什后,其结果是什么?么?5.5.除法指令除法指令 DIV ABDIV AB ;A AB B的商的商A A,余数余数B B。 1字节指令字节指令 A A、B B的
47、内容均为的内容均为8 8位无符号整数。位无符号整数。CYCY和和OVOV均被清均被清0 0。若原(若原(B B)=00H=00H,则结果是无法确定的,用则结果是无法确定的,用OV=1OV=1表示,而表示,而CYCY仍仍为为0 0。P67. 例例3-5若(若(A)=0BFH,(,(B)=32H。执行:。执行:DIV AB 指令后,其指令后,其结果是什么?结果是什么?6.6.加加1 1指令指令 INC AINC A;(A)+1A(A)+1A,影响影响P P标志。标志。 1字节指令字节指令 INC Rn INC Rn;(Rn)+1Rn(Rn)+1Rn。 1字节指令字节指令 INC direct IN
48、C direct;(direct)+1(direct)(direct)+1(direct)。 2 2字节指令字节指令 INC Ri INC Ri;(Ri)+1(Ri)(Ri)+1(Ri)。 1字节指令字节指令 INC DPTR INC DPTR;(DPTR)+1DPTR(DPTR)+1DPTR。 1字节指令字节指令 若原单元的内容为若原单元的内容为FFHFFH,加加1 1后溢出为后溢出为0000H H。例:例:A=12HA=12H,R0=33HR0=33H,(21H)=32H(21H)=32H, (34H)=22H (34H)=22H,DPTR=1234HDPTR=1234H。连续执行下面的指
49、令:连续执行下面的指令: INC AINC A INC R0 INC R0 INC 21H INC 21H INC R0 INC R0 INC DPTR INC DPTR; A=13HA=13H; R0=34H R0=34H;(;(21H21H)=33H=33H;(;(34H34H)=23H=23H; DPTR=1235H DPTR=1235H7.7.减减1 1指令指令DEC ADEC A ;(;(A A)-1A,-1A,影响影响P P标志。标志。 1字节指令字节指令 DEC RnDEC Rn ;(;(RnRn)-1Rn-1Rn。 1字节指令字节指令 DEC directDEC direct
50、;(direct)-1direct(direct)-1direct。 2字节指令字节指令 DEC RiDEC Ri ;(;((Ri)(Ri))-1(Ri)-1(Ri)。 1字节指令字节指令 若原单元的内容为若原单元的内容为0000H H,减减1 1后溢出为后溢出为FFHFFH。8.8.十进制调整指令十进制调整指令 DA A DA A ;该指令的功能是对该指令的功能是对BCD码的加法结果进行调整,码的加法结果进行调整, 1字节指令字节指令 ;调整后的结果储存在;调整后的结果储存在A中中 该指令必须跟在该指令必须跟在ADDADD和和ADDCADDC指令之后,而且只能用于压缩指令之后,而且只能用于压
51、缩BCDBCD数数相加结果的调整(相加结果的调整(自动修正)自动修正)。 两两BCDBCD数相加后,经本指令调整才能得到压缩数相加后,经本指令调整才能得到压缩BCDBCD数的和的正确数的和的正确值。值。十进制调整的修正方法为:十进制调整的修正方法为:l 当累加器低四位大于当累加器低四位大于9或半进位标志或半进位标志AC=1时,则进行低四时,则进行低四位加位加6修正修正(A03)6(A03) 即即(A)=(A) 06l 当累加器高四位大于当累加器高四位大于9或进位标志或进位标志CY1时时, 进行高四位加进行高四位加6修正修正(A47)6(A47) 即即(A) (A) 60H l例:例:设设A的内
52、容为的内容为0101 0110B(即为(即为56的的BCD数),数),R3的内容为的内容为0001 0111B(27的的BCD数),数),CY的内容为的内容为1。执行下列指令:执行下列指令:ADDC A,R3DA A执行执行“DA A”注意:使用注意:使用“DA A”DA A”指令时:指令时:只能紧跟在加法指令之后进行,不能紧跟在减法、乘法、除只能紧跟在加法指令之后进行,不能紧跟在减法、乘法、除法和法和INC指令之后;指令之后;两个加数必须已经是两个加数必须已经是BCD码;码;只能对累加器中的结果(只能对累加器中的结果(BCD码)进行调整。码)进行调整。 l两个一字节无符号数相加,将结果用十进
53、制在两个一字节无符号数相加,将结果用十进制在7段数码管上显示出来。段数码管上显示出来。ORG 0000H AJMP MAIN ORG 0050HMAIN:MOV SP,#50H MOV A,#34 ADD A,#44 MOV R7,A ;结果存入结果存入R7中中,R7中存放的是中存放的是16进制数进制数 ;以下为以下为16进制数转换成进制数转换成BCD码十进制数码十进制数BCDT: MOV R5,#8 ;设置计数值设置计数值 CLR A MOV R3,A ;存放结果寄存器清存放结果寄存器清0 ,R7中的中的16进制数转换成进制数转换成 ;BCD码十进制数,转换结果存入码十进制数,转换结果存入R
54、3R4 MOV R4,A LOOP:CLR C MOV A,R7 ;取被转换二进制数乘取被转换二进制数乘2 RLC A MOV R7,A MOV A,R4 ;乘乘2加加b后经十进制调整后转换成后经十进制调整后转换成BCD码存入码存入 ;R3R4 ADDC A,R4 DA A MOV R4,A MOV A,R3 ADDC A,R3 DA A MOV R3,A DJNZ R5,LOOP MOV 20H,R4;以下为拆字以下为拆字 MOV R0,#21H MOV A,20H ANL A,#0FH MOV R0,A ;低低4位存入位存入21H单元中单元中 INC R0 MOV A,20H SWAP A
55、 ANL A,#0FH MOV R0,A ;高高4位存入位存入22H单元中单元中;以下为显示程序以下为显示程序 MOV DPTR,#TAB MOV A,22H MOVC A,A+DPTR MOV P2,A ;显示十位显示十位 SETB P1.6 MOV A,21H MOVC A,A+DPTR MOV P3,A ;显示个位显示个位 SETB P1.7 MOV P3,A ;显示个位显示个位 SETB P1.7 MOV A,R3 ;显示百位显示百位 CJNE A,#0,L1 ;若百为不若百为不0,则转,则转L2显示百位数显示百位数 CLR P1.5 ;若百位为若百位为0,则不显示百位数,则不显示百位
56、数 AJMP L2 L1:MOVC A,A+DPTR MOV P0,A SETB P1.5 L2:SJMP $ TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;共阳共阳 DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH, 0BFH,0FFH END主要用于对主要用于对2 2个操作数按个操作数按位进行逻辑位进行逻辑操作,结果送到操作,结果送到A A或直接寻址单元。或直接寻址单元。v 主要操作主要操作 与、或、异或、移位、取反、清零等。与、或、异或、移位、取反、清零等。v 对标志位的影响对标志位的影响 除了目的操作数为除了目的操作数
57、为ACCACC的指令影响奇偶标志的指令影响奇偶标志P P外,一般不影响标志位。外,一般不影响标志位。 1.简单操作指令简单操作指令CLR A ; “0” A。 1字节指令字节指令 2.累加器累加器A取反取反CPL A ; (A) A。 1字节指令字节指令 对累加器对累加器A中的内容中的内容逐位取反逐位取反。例: 设 (A)=3AH, CPL A; 0011 1010B 1100 0101B,即(A)=0C5H 2.移位指令移位指令累加器累加器A循环左移指令循环左移指令 RL A ; 1字节指令字节指令 例例 :设:设(A A)6CH = 0110 1100B6CH = 0110 1100B 执
58、行指令:执行指令:RL ARL A (A)=1101 1000B=0D8H (A)=1101 1000B=0D8H带进位循环左移指令带进位循环左移指令 RLC A RLC A ; 1字节指令字节指令 例:设例:设(A A)6CH = 0110 1100B6CH = 0110 1100B, (CY) =1 (CY) =1 执行指令:执行指令:RLC ARLC A (A)=1101 1001B=0D9H (A)=1101 1001B=0D9H 对对RLRL指令,指令, “RL” RL” 相当于乘以相当于乘以2 2 对对RLCRLC指令,在指令,在CY=0CY=0时时“RLC” RLC” 相当于乘以相当于乘以2 2累加器累加器A循环右移指令循环右移指令 RR A ; 1字节指令字节指令 例:设(A)6CH = 0110 1100B 执行指令: RR A (A)=0011 0110B=36H带进位循环右移指令带进位循环右移指令 RRC A RRC A ; 1字节指令字节指令 例:设例:设(A A)6CH = 0110 1100B6CH = 0110 1100B, (CY) =1 (CY) =1 执行指令:执行指令:RRC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《康复护理普及课程》课件
- 线组长管理心得报告
- 《气象信息分析》课件
- 《急性扁桃体炎》课件
- 《脑出血教学查房》课件
- 通苏嘉甬铁路嘉兴经开段管线迁改工程-500千伏汾翔5829线-汾云5830线迁改工程报告书
- 安全红绿灯系统设计与应用
- 《航天炉工艺介绍》课件
- 员工岗位体系管理办法
- 企业社保管理体系构建与实施
- GB/T 24218.1-2009纺织品非织造布试验方法第1部分:单位面积质量的测定
- GB/T 11032-2020交流无间隙金属氧化物避雷器
- 液化石油气安全标签
- T-CEEMA 004-2022 煤电机组辅机及系统节能、供热和灵活性改造技术导则
- 水车租赁合同范本(3篇)
- 医学康复治疗技术作业治疗课件
- 空港新城特勤消防站施工组织设计
- 餐具消毒记录表
- 2022山东历史高考答题卡word版
- 空军发展历程课件
- 试生产安全条件检查
评论
0/150
提交评论