第三章计算机指令系统ppt课件_第1页
第三章计算机指令系统ppt课件_第2页
第三章计算机指令系统ppt课件_第3页
第三章计算机指令系统ppt课件_第4页
第三章计算机指令系统ppt课件_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.1.标号:指令的符号地址标号:指令的符号地址2.2.操作码:指明指令功能。操作码:指明指令功能。3.3.操作数:指令操作对象操作数:指令操作对象数据、地址、存放器名及商定符号。数据、地址、存放器名及商定符号。4.4.注释行:阐明指令在程序中的作用。注释行:阐明指令在程序中的作用。 操作码和操作数是指令主体。操作码和操作数是指令主体。MOV_move传送传送XCH_exchange交换交换ANL_and logic与逻辑运算与逻辑运算XRL_exclusive or异或运算异或运算MUL_Multiply乘法乘法RR_rotate right右循环右循环SJMP_short jump短跳转短

2、跳转RET_return 子程序前往子程序前往操作码操作码 操作数操作数1 1 操作数操作数22有单字节、双字节和三字节指令。有单字节、双字节和三字节指令。汇编言语指令中操作码和操作数是指令主体,称为汇编言语指令中操作码和操作数是指令主体,称为指令可执行部分,指令表中可查出对应指令代码。指令可执行部分,指令表中可查出对应指令代码。举例:举例:汇编言语:汇编言语:机器言语:机器言语:MOV AMOV A,R0R0E8HE8HMOV R6MOV R6,#32H#32H7E 32H7E 32HMOV 40HMOV 40H,#100H#100H75 40 64H75 40 64H11101000011

3、1111000110010011101010100000001100100例:设存储器两个单元的内容如下图,例:设存储器两个单元的内容如下图,执行指令执行指令 MOV A MOV A,40H40H后后 A = A = ?二二. .直接寻址方式直接寻址方式指令操作数是存储器单元地址,数据在存储器单元中。指令操作数是存储器单元地址,数据在存储器单元中。 MOV A MOV A,40H40H;A(40H)A(40H)直接寻址方式对数据操作时,地址是固定直接寻址方式对数据操作时,地址是固定值,而地址所指定的单元内容为变量方式。值,而地址所指定的单元内容为变量方式。41H 78H40H 56H56H 思

4、索题:直接寻址方式指令和立刻寻址方式指令的方思索题:直接寻址方式指令和立刻寻址方式指令的方式有什么不同?式有什么不同?三三. .存放器寻址方式存放器寻址方式指令操作数为存放器名,数据在存放器中。指令操作数为存放器名,数据在存放器中。例例: :MOV AMOV A,R0R0;AR0AR0设指令执行前设指令执行前 A=20H A=20H,R0=40HR0=40H,执行指令后,执行指令后,A= A= ?,?,R0= R0= ?四四. .存放器间接寻址方式存放器间接寻址方式 指令的操作数为存放器名,存放器中为数据地址。指令的操作数为存放器名,存放器中为数据地址。 存放地址的存放器称为间址存放器或数据指

5、针。存放地址的存放器称为间址存放器或数据指针。例例: :MOV AMOV A,R0R0 ;A(R0)A(R0) 设指令执行前设指令执行前 A=20H A=20H,R0=40HR0=40H,地址为,地址为40H40H存储器存储器单元内容如下图。执行指令后,单元内容如下图。执行指令后,A= A= ? ,R0 = ,R0 = ? , (40H)= , (40H)= ? 41H 67H 40H 34H34H40H34H40H40H0100 0000A0010 0000R00100 0000R0五五. .变址间接寻址方式变址间接寻址方式 数据在存储器中,指令给出的存放器中为数据数据在存储器中,指令给出的

6、存放器中为数据的基地址和偏移量。的基地址和偏移量。数据地址数据地址 = = 基地址基地址 + + 偏移量。偏移量。例:例: MOVC AMOVC A,A+DPTRA+DPTR ;A(A+DPTR)A(A+DPTR) 设指令执行前设指令执行前 A=09H A=09H,DPTR=2000HDPTR=2000H,存储器单元内容,存储器单元内容如下图。执行指令后,如下图。执行指令后,A= A= ? DPTR= DPTR= ? 12H2000H六六. .位寻址方式位寻址方式 指令给出位地址。一位数据在存储器位寻址区。指令给出位地址。一位数据在存储器位寻址区。例:例: MOV C MOV C,40H40H

7、;Cy(Cy(位地址位地址40H)40H) 设指令执行前设指令执行前 Cy=1 Cy=1,位地址,位地址40H40H存储器单元如图,存储器单元如图,执行指令后,执行指令后,Cy= Cy= ?28H 0110001029H 11010111位寻址区02019H 89H2021H 12H指令功能分类:指令功能分类:数据传送、数据操作、布尔处置、程序控制。数据传送、数据操作、布尔处置、程序控制。3-3-1 3-3-1 数据传送指令数据传送指令实现存放器、存储器之间的数据传送。实现存放器、存储器之间的数据传送。一一. . 内部传送指令:内部传送指令: 片内数据存储器数据传送。片内数据存储器数据传送。

8、二二. . 外部传送指令:外部传送指令: 片外数据存储器数据传送。片外数据存储器数据传送。三三. . 交换指令:交换指令: 片内数据存储器数据传送。片内数据存储器数据传送。 四四. . 堆栈操作指令:堆栈操作指令: 片内数据存储器数据传送。片内数据存储器数据传送。 五五. . 查表指令:查表指令: 程序存储器数据传送。程序存储器数据传送。一、内部传送指令:一、内部传送指令:实现片内数据存储器中数据传送。实现片内数据存储器中数据传送。指令格式:指令格式: MOV MOV 目的操作数,源操作数目的操作数,源操作数 寻址方式:立刻寻址、直接寻址、存放器寻址、寻址方式:立刻寻址、直接寻址、存放器寻址、

9、存放器间址。存放器间址。MOV AMOV A,Rn Rn ;ARnARn,Rn=R0Rn=R0R7 R7 MOV AMOV A,direct direct ;A(direct)A(direct),MOV A, Ri MOV A, Ri ;A (Ri) A (Ri) ,Ri=R0Ri=R0、R1R1MOV A, #data MOV A, #data ; A d A d,第一条指令中,Rn代表的是R0-R7。第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚刚讲过的。第四条指令是将立刻数data送到A中 下面我们经过一些例子加以阐明:MOV A,R1 ;将任务存放器R1中的值送

10、入A,R1中的值坚持不变。MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值坚持不变。MOV A,R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入 A中。如执行命令前R1中的值为20H,那么是将20H单元中的值送入A中。MOV A,#34H ;将立刻数34H送入A中,执行完本条指令后,A中的值是34H。1 1 以累加器为目的操作数的指令以累加器为目的操作数的指令 MOV RnMOV Rn, direct direct ;Rn (n)Rn (n)MOV RnMOV Rn, #data #data ; Rn data Rn data MOV RnMOV R

11、n, A A ; Rn Rn A A 2 2以存放器以存放器RnRn为目的操作的指令为目的操作的指令 这组指令功能是把源地址单元中的内容送入任务存放器,源操作数不变。 MOV direct,Rn ;directRnMOV direct,Rn ;directRnMOV directMOV direct, A ; A ; MOV directMOV direct, Ri ; Ri ;MOV directMOV direct, #data ; #data ;MOV directMOV direct, direct2 ; direct2 ;例:例:MOV 20H,R1 MOV 20H,R1 MOV 2

12、0H,AMOV 20H,AMOV 20H,30HMOV 20H,30HMOV 20H,R1MOV 20H,R1MOV 20H,#34HMOV 20H,#34H3 3以直接地址为目的操作数的指令以直接地址为目的操作数的指令 MOV RiMOV Ri, A A; (RiRi)(A A),), 将将A A值送入值送入RiRi指示的地址单元中。指示的地址单元中。MOV RiMOV Ri,directdirect; (RiRi)(directdirect) , 将将directdirect值送入值送入RiRi指示的地址单元中。指示的地址单元中。MOV RiMOV Ri, #data#data; (RiR

13、i)data data , 将常数将常数#data#data直接送入直接送入RiRi指示的地址单元中。指示的地址单元中。例:例: MOV R0,AMOV R0,AMOV R1,20HMOV R1,20HMOV R0,#34HMOV R0,#34H4 4以间接地址为目的操作数的指令以间接地址为目的操作数的指令 8051是一种8位机,这是独一的一条16位立刻数传送指令,其功能是将一个16位的立刻数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。例:MOV DPTR,#1234H,那么执行完了之后DPH中的值为12H,DPL中的值为34H。反之,假设我们分别向DPH,DPL送数,那么结果也

14、一样。如有下面两条指令:MOV DPH,#35H,MOV DPL,#12H。那么就相当于执行了MOV DPTR,#3512H。5 5十六位数的传送指令十六位数的传送指令 MOV DPTR,#data16 例例3-2-13-2-1:顺序执行以下指令序列,求每一步执行结果。:顺序执行以下指令序列,求每一步执行结果。MOV AMOV A,#30H#30HMOV 4FHMOV 4FH,A AMOV R0MOV R0,#20H#20HMOV R0MOV R0,4FH4FHMOV 21HMOV 21H,20H20H地址内容60H32H32H58H习题习题1 1:用两种寻址方式实现,将片内:用两种寻址方式实

15、现,将片内RAM 60HRAM 60H单元的数单元的数据传送给累加器据传送给累加器A A。解:解: MOV A,#60H MOV A,#60HMOV R0MOV R0,#60H #60H MOV AMOV A,R0R0;A= 30HA= 30H;(4FH)= 30H(4FH)= 30H;R0= 20HR0= 20H;(20H)= 30H(20H)= 30H;(21H)= 30H(21H)= 30HMOV R0MOV R0,60H 60H MOV AMOV A,R0R0解:解: MOV A,60H MOV A,60HA=60HA=60HA=32HA=32HA=58HA=58HA=32HA=32H

16、习题习题2 2:综合练习:综合练习: 给出每条指令执行后的结果 阐明:用括号括起来代表内容,如23H那么代表内部RAM23H单元中的值,A那么代表累加器A单元中的值。 MOV 23H,#30HMOV 12H,#34HMOV R0,#23HMOV R7,#22HMOV R1,12HMOV A,R0MOV 34H,R1MOV 45H,34HMOV DPTR,#6712HMOV 12H,DPHMOV R0,DPLMOV A,R0(23h)=30h(12h)=34h(R0)=23H(R7)=22H(R1)=12H(A)=30H(34H)=34H(45H)=34H(DPTR)=6712H(12H)=67

17、H(R0)=12H(A)=67H阐明:阐明: 只需指令表中的指令才有对应指令代码,计算机才只需指令表中的指令才有对应指令代码,计算机才干执行。编程时,不能随意发明发明指令。干执行。编程时,不能随意发明发明指令。1. 一条指令中不能同时出现两个任务存放器:一条指令中不能同时出现两个任务存放器:非法指令:非法指令:MOV R1,R2MOV R2,R02. 间址存放器只能运用间址存放器只能运用 R0、R1。 非法指令:非法指令:MOV A,R23. SFR区只能直接寻址,不能用存放器间接寻址。区只能直接寻址,不能用存放器间接寻址。非法指令:非法指令:MOV R0,#80HMOV A,R04. 指令表

18、:指令表:(指令字节数,机器周期数指令字节数,机器周期数)思索:找出配对指令,实现反向传送。思索:找出配对指令,实现反向传送。二、二、 外部传送指令外部传送指令实现片外数据存储器和实现片外数据存储器和A A累加器之间的数据累加器之间的数据传送。传送。 指令格式:指令格式:MOVX MOVX 目的操作数,源操作数目的操作数,源操作数寻址方式:片外数据存储器用存放器间址方式。寻址方式:片外数据存储器用存放器间址方式。1. DPTR1. DPTR作作1616位数据指针,寻址位数据指针,寻址64KB64KB片外片外RAMRAM空间空间MOVX AMOVX A,DPTRDPTR;A(DPTR) A(DP

19、TR) 读数据读数据MOVX DPTRMOVX DPTR,A A;(DPTR)A (DPTR)A 写数据写数据2. Ri2. Ri作作8 8位数据指针,寻址位数据指针,寻址256B256B片外片外RAMRAM空间空间MOVXMOVX A A,RiRi;A(Ri) A(Ri) 读数据读数据MOVXMOVX RiRi,A A ;(Ri)A(Ri)A写数据写数据3 3、运用时该当首先将要读或写的地址送入、运用时该当首先将要读或写的地址送入DPTRDPTR或或RiRi中,然后再用中,然后再用读写命令。读写命令。小结:小结:1 1、在、在5151中,与外部存储器中,与外部存储器RAMRAM打交道的只可以

20、是打交道的只可以是A A累加器累加器。一切需求送入外部。一切需求送入外部RAMRAM的数据必需求经过的数据必需求经过A A送去,而一切送去,而一切要读入的外部要读入的外部RAMRAM中的数据也必需经过中的数据也必需经过A A读入。读入。在此我们可以看出内外部在此我们可以看出内外部RAMRAM的区别了,内部的区别了,内部RAMRAM间可以直间可以直接进展数据的传送,而外部那么不行,比如,要将外部接进展数据的传送,而外部那么不行,比如,要将外部RAMRAM中某一单元设为中某一单元设为0100H0100H单元的数据送入另一个单元单元的数据送入另一个单元设为设为0200H0200H单元,也必需先将单元

21、,也必需先将0100H0100H单元中的内容读入单元中的内容读入A A,然后再送到,然后再送到0200H0200H单元中去。单元中去。2 2、要读或写外部的、要读或写外部的RAMRAM,当然也必需求知道,当然也必需求知道RAMRAM的地址,在后两条的地址,在后两条指令中,地址是被直接放在指令中,地址是被直接放在DPTRDPTR中的。而前两条指令,由于中的。而前两条指令,由于RiRi即即R0R0或或R1R1只是一个只是一个8 8位的存放器,所以只提供低位的存放器,所以只提供低8 8位地址。由于有时位地址。由于有时扩展的外部扩展的外部RAMRAM的数量比较少,少于或等于的数量比较少,少于或等于25

22、6256个,就只需求提供个,就只需求提供8 8位地址就够了。位地址就够了。例例3-2-23-2-2:实现片外数据存储器数据传:实现片外数据存储器数据传(2000H)(2100H)(2000H)(2100H)。假设假设(2000H)=X(2000H)=XMOV DPTRMOV DPTR,#2000H#2000HMOVX AMOVX A,DPTRDPTRMOV DPTRMOV DPTR,#2100H#2100HMOVX DPTRMOVX DPTR,A A片外RAM地址内容2000HXDPTR2100H片外RAM地址内容2000HXDPTR2100HX; DPTR= 2000H DPTR= 2000

23、H; A= X A= X; DPTR= 2100H DPTR= 2100H;(2100H)= X(2100H)= X片外数据存储器不能直接片外数据存储器不能直接寻址。以下为非法指令:寻址。以下为非法指令: MOVX A MOVX A,2000H 2000H MOVX 2100H MOVX 2100H,2000H2000H思索题:为什么对思索题:为什么对DPTRDPTR的数据传送运用内部传送指令?的数据传送运用内部传送指令?MOV DPTRMOV DPTR,#0100H#0100HMOVX AMOVX A,DPTRDPTRMOV DPTR,#0200HMOV DPTR,#0200HMOVX DP

24、TR,AMOVX DPTR,A习题习题4 4:将外部:将外部RAMRAM中中100H100H单元中的内容送入外部单元中的内容送入外部RAMRAM中中200H200H单元中。单元中。习题习题3 3:将片外:将片外RAM 0000HRAM 0000H单元的数据传送到片内单元的数据传送到片内RAMRAM的的 60H 60H单元。单元。MOV DPTRMOV DPTR,#0000H#0000HMOVX AMOVX A,DPTRDPTRMOV 60H,AMOV 60H,A三、三、 交换指令交换指令 实现片内实现片内RAMRAM区的数据双向传送。区的数据双向传送。1. 1. 字节交换指令字节交换指令XCH

25、 AXCH A,Rn Rn ;A RnA RnXCH AXCH A,RiRi; A (Ri) A (Ri) XCH AXCH A,direct direct ;A (n)A (n)片内 RAM地址内容2BH35H2AH38H20H习题习题4 4:将片内:将片内RAM60HRAM60H单元与单元与61H61H单元的数据交换。单元的数据交换。例:设例:设A= 29HA= 29H,执行指令,执行指令 XCH A XCH A,2AH2AH后,后,A= A= ?(2AH)= (2AH)= ?38H29HXCH 60HXCH 60H,61H 61H 对吗?对吗?29 H2. 2. 半字节交换指令半字节交换

26、指令XCHD AXCHD A,Ri Ri ;A0A03 (Ri)03 (Ri)03 3SWAP ASWAP A ;A4A47 A07 A03 3是将A中的值的高、低4位进展交换。 例:例:A A=39H=39H,那么执行,那么执行SWAP ASWAP A之后,之后,A A中的值就是中的值就是93H93H。怎样正好是这么前后交换呢?由于这是一个。怎样正好是这么前后交换呢?由于这是一个1616进制数,进制数,每每1 1个个1616进位数字代表进位数字代表4 4个二进位。个二进位。留意,假设是这样的:留意,假设是这样的:A A=39=39,后面没,后面没H H,执行,执行SWAP ASWAP A之后

27、,可不是之后,可不是A A=93=93。要将它化成二进制再算:。要将它化成二进制再算:3939化为化为二进制是二进制是1011110111,也就是,也就是00010001,01110111高高4 4位是位是00010001,低,低4 4位位是是01110111,交换后是,交换后是0111000101110001,也就是,也就是71H71H,即,即113 113 例例3 37 7知知A A56H56H,R0R020H20H,20H20H78H78H,10H10H18H18H,R4R48AH8AH;单独执行指令:单独执行指令: XCH A XCH A, 10H 10H XCH A XCH A, R

28、4 R4 XCH A XCH A, R0 R0指令执行后:指令执行后: A A=18H=18H, 10H10H=56H=56H; A A=8AH=8AH, R4R4=56H=56H; A A=78H=78H, R0R0=20H=20H,R0R0= =20H20H=56H=56H。书上例题书上例题例例3 38 8知知(A)(A)7AH7AH,R1R148H48H,48H48H0DH0DH;执行指令执行指令: : XCHD XCHDA A, R1R1指令执行后:指令执行后:A A7DH7DH,R1R148H48H,(R1)(R1)48H48H0AH0AH。片内RAM地址内容2BH35H2AH38H

29、20H压压缩缩式式 BCD 码码千位 百位十位 个位单单字字节节 BCD0000 千位0000 百位0000 十位0000 个位习题:交换片内习题:交换片内RAM 40HRAM 40H单元和单元和 41H 41H单元的低半字节。单元的低半字节。例例3-4-33-4-3:将片内:将片内RAM 2AHRAM 2AH和和2BH2BH单元中的单元中的ASCIIASCII码转换成紧缩式码转换成紧缩式BCDBCD码存入码存入20H20H单元。单元。A0000000000H00001000100000001000010108H80H85HMOV A,#0MOV R0,#2AHMOV R1,#2BHXCHD

30、A,R0SWAP AXCHD A,R1XCH A,20H0000000000H0000000000H85HR1R0四、堆栈操作指令四、堆栈操作指令 入栈指令:入栈指令:PUSH n ;SPSP+1,(SP)(n) 出栈指令:出栈指令:POP n ;(n)(SP),SPSP-1堆栈操作堆栈操作PUSH directPUSH directPOP directPOP direct第一条指令称之为推入,就是将第一条指令称之为推入,就是将directdirect中的内容送入堆中的内容送入堆栈中,第二条指令称之为弹出,就是将堆栈中的内容送栈中,第二条指令称之为弹出,就是将堆栈中的内容送回到回到direct

31、direct中。中。推入指令的执行过程是,首先将推入指令的执行过程是,首先将SPSP中的值加中的值加1 1,然后把,然后把SPSP中的值当作地址,将中的值当作地址,将directdirect中的值送进以中的值送进以SPSP中的值为中的值为地址的地址的RAMRAM单元中。单元中。例例3 35 5知当前知当前SPSP38H38H,10H10H70H70H;执行指令:执行指令:PUSHPUSH10H10H指令执行后;指令执行后;SPSP39H39H,10H10H70H70H,39H39H70H70H。该指令的执行过程如图39所示:指令的执行过程如图310所示:例:例:SPSP=40H=40H,40H

32、40H=68H=68H,A A=20H=20HPOPPOPACCACC指令执行后;指令执行后;SPSP3FH3FH,40H40H68H68H,A A68H68H例:例:MOV SPMOV SP,#5FH#5FHMOV AMOV A,#100#100MOV BMOV B,#20#20PUSH ACCPUSH ACCPUSH BPUSH BPOP BPOP BPOP ACCPOP ACC1、执行第一条PUSH ACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后, 内存60H单元的值就是100,同样,执行PUSH B时,是将SP+1,即变为61H

33、,然后将B中的值送入到61H单元中,即执行完本条指令后,61H单元中的值变为20。2、执行过程是:将SP中的值如今是61H作为地址,取61H单元中的数值如今是20,送到B中,所以执行完本条指令后B中的值是20,然后将SP减1,因此本条指令执行完后,SP的值变为60H,然后执行POP ACC,将SP中的值60H作为地址,从该地址中取数如今是100,并送到ACC中,所以执行完本条指令后,ACC中的值是100。这有什么意义呢?这有什么意义呢?ACCACC中的值本来就是中的值本来就是100100,B B中的值本来就是中的值本来就是2020,是的,在,是的,在本例中,确实没有意义,但在实践任务中,那么在

34、本例中,确实没有意义,但在实践任务中,那么在PUSH BPUSH B后往往要执行其他指令,而且这些指令会把后往往要执行其他指令,而且这些指令会把A A中的值,中的值,B B中中的值改掉,所以在程序的终了,假设我们要把的值改掉,所以在程序的终了,假设我们要把A A和和B B中的值中的值恢复原值,那么这些指令就有意义了。恢复原值,那么这些指令就有意义了。 还有一个问题,还有一个问题,假设不用堆栈,比如说在假设不用堆栈,比如说在PUSH ACCPUSH ACC指令处用指令处用MOV 60HMOV 60H,A A,在,在PUSH BPUSH B处用指令处用指令MOV 61HMOV 61H,B B,然后

35、用然后用MOV AMOV A,60H60H,MOV BMOV B,61H61H来替代两条来替代两条POPPOP指令,不是也一样吗?是的,从结果上看指令,不是也一样吗?是的,从结果上看是一样的,但是从过程看是不一样的,是一样的,但是从过程看是不一样的,PUSHPUSH和和POPPOP指令都是单字节,单周期指令,而指令都是单字节,单周期指令,而MOVMOV指令指令那么是双字节,双周期指令。更何况,堆栈的那么是双字节,双周期指令。更何况,堆栈的作用不止于此,所以普通的计算机上都设有堆作用不止于此,所以普通的计算机上都设有堆栈,而我们在编写子程序,需求保管数据时,栈,而我们在编写子程序,需求保管数据时

36、,通常也不采用后面的方法,而是用堆栈的方法通常也不采用后面的方法,而是用堆栈的方法来实现。来实现。例:写出以下程序的运转结果例:写出以下程序的运转结果MOV 30HMOV 30H,#12#12MOV 31HMOV 31H,#23#23PUSH 30HPUSH 30HPUSH 31HPUSH 31HPOP 30HPOP 30HPOP 31HPOP 31H结果是30H中的值变为23,而31H中的值那么变为12。也就两者进展了数据交换。从这个例子可以看出:运用堆栈时,入栈的书写顺序和出栈的书写顺序必需相反,才干保证数据被送回原位,否那么就要出错了。 例:设例:设 A=02 A=02,B=56HB=5

37、6H,执行以下指令后,执行以下指令后,SP= SP= ?,?,A= A= ? ,B= ?B= ?片内 RAM34H33H32H31H30H SP SP SP SP 0202 SP 56H 02 56H 56H 02H02HSPSP SP 56H 02 SP 56H 02 56H 56H SP SP 02 02 02HA00H02H00H02H02HSBRSBR: MOV SP MOV SP,#30H #30H ;设栈底;设栈底 PUSH A PUSH A PUSH B PUSH B MOV A MOV A,#0#0 MOV MOV B B,#01#01 POP POP B B POP A PO

38、P A五、五、 查表指令查表指令 实现从程序存储器读取数据到实现从程序存储器读取数据到A A累加器,只能累加器,只能运用变址间接寻址方式。运用变址间接寻址方式。 多用于查常数表程序,可直接求取常数表中的多用于查常数表程序,可直接求取常数表中的函数值。函数值。1 1DPTRDPTR为基址存放器为基址存放器MOVCMOVC A A,A+DPTR A+DPTR ;A(A+DPTR) A(A+DPTR) 查表范围为查表范围为 64KB 64KB 程序存储器恣意空间,称为远程程序存储器恣意空间,称为远程查表指令查表指令 。2 2PCPC为基址存放器为基址存放器MOVCMOVC A A,A+PCA+PC;

39、 PC PCPCPC+1 +1 , A(A+PC)A(A+PC)常数表只能在查表指令后常数表只能在查表指令后256B256B范围内。范围内。例:查表法求例:查表法求Y=X2Y=X2。设。设X(0X15)X(0X15)在片内在片内RAMRAM的的20H20H单单元中,要求将查表求元中,要求将查表求Y Y,存入片内,存入片内RAM21HRAM21H单元。单元。1 1ORG 1000HORG 1000HSQU:SQU: MOV DPTRMOV DPTR,#TAB#TAB ;确定表首地址基地址;确定表首地址基地址MOV AMOV A,20H20H;取;取X X偏移量偏移量MOVC AMOVC A,A+

40、DPTRA+DPTR ;查表求;查表求Y=X2Y=X2MOV 21HMOV 21H,A A;保管;保管Y YRETRET;子程序终了;子程序终了;其它程序段;其它程序段ORG 3000HORG 3000H;常数表格首地址;常数表格首地址TAB:TAB: DB 00DB 00,0101,0404,0909,225225;平方表;平方表2 2指令地址指令地址 源程序源程序 ORG 1000H ORG 1000H ;程序起始地址程序起始地址 1000H 1000H SQU: SQU: MOV A MOV A,20H20H;取;取X X 1002H 1002H ADD A ADD A,#3#3 ;修正

41、偏移量;修正偏移量 1004H 1004H MOVC A MOVC A,A+PC A+PC ;查表;查表求求Y=X2Y=X2 1005H 1005H MOV 21H MOV 21H,A A;存结;存结果果 1007H 1007H RET RET ;子程;子程序终了序终了 1008H 1008H TAB: TAB: DB 00 DB 00,0101,04 04 ;平方;平方表表 100BH 100BH DB 09 DB 09,225 225 思索题:当思索题:当0X2550X255时,如何用查表法编程求时,如何用查表法编程求Y=X2Y=X2。例:查表法求例:查表法求Y=X2Y=X2。设。设X(0

42、X15)X(0X15)在片内在片内RAMRAM的的20H20H单单元中,要求将查表求元中,要求将查表求Y Y,存入片内,存入片内RAM21HRAM21H单元。单元。习题:找出指令错误并矫正:习题:找出指令错误并矫正:1 1MOV AMOV A,#1000H#1000H;A1000HA1000H2 2MOVX AMOVX A,1000H1000H;A(1000H)A(1000H)片外片外RAMRAM3 3MOVC AMOVC A,1000H1000H;A(1000H)A(1000H)片外片外ROMROM4 4MOVX 60HMOVX 60H,A A;片外;片外RAM(60H)ARAM(60H)A

43、5 5MOV R0MOV R0,60H60H;片内;片内RAMRAM:(61H)(60H)(61H)(60H) MOV 61H MOV 61H,R0R06. XCH R16. XCH R1,R2R2;R1R2R1R27. MOVX DPTR7. MOVX DPTR,#2000H#2000H;DPTR2000HDPTR2000H8. MOVX 60H8. MOVX 60H,DPTRDPTR;片内;片内RAMRAM片外片外RAMRAM与数据传送指令不同,多数算术运算指令会影响与数据传送指令不同,多数算术运算指令会影响标志位的形状,即标志位的形状,即CPUCPU执行算术运算指令后,根据执行算术运算指

44、令后,根据数据操作情况自动设置标志位的形状。数据操作情况自动设置标志位的形状。CyACF0RS1RS0OVP1 1CyCy:进位标志位:进位标志位保管运算后最高位的进位保管运算后最高位的进位/ /借位形状,当有进位借位形状,当有进位/ /借位,借位,Cy=1Cy=1,否那么,否那么Cy=0Cy=0。2 2ACAC:辅助进位标志位:辅助进位标志位保管低半字节的进位保管低半字节的进位/ /借位形状,当借位形状,当D3D3产生进位产生进位/ /借位,借位,AC=1AC=1,否那么,否那么AC=0AC=0。用于十进制调整。用于十进制调整。3 3OVOV:溢出标志位:溢出标志位OV=Cy7Cy6OV=C

45、y7Cy6,补码运算产生溢出,补码运算产生溢出OV=1OV=1,否那么,否那么OV=0OV=0。4 4P P:奇偶标志位:奇偶标志位反映累加器反映累加器A A中数据的奇偶性。当中数据的奇偶性。当1 1的个数为奇数,的个数为奇数,P=1P=1,否那么,否那么P=0P=0。2 2用户选择位用户选择位( (编程设置形状编程设置形状) )1 1F0F0:用户自定义标志位。:用户自定义标志位。2 2RS1RS1、RS0RS0: 任务存放器区选择位。任务存放器区选择位。复位时,复位时,PSW=00HPSW=00HRS1 RS0 RS1 RS0 任务存放器任务存放器 0 0 0 0 0 0区区 0 1 1

46、0 1 1区区 1 0 2 1 0 2区区 1 1 3 1 1 3区区例:复位后,设置运用任务存放器例:复位后,设置运用任务存放器2 2区,其他标志位不变。区,其他标志位不变。解:解: MOV PSW MOV PSW,# #CyACF0RS1RS0OVP 18H 18H1 1不带进位加法:不带进位加法:ADD AADD A,源操作数,源操作数ADD A,#DATA ;ADD A,#DATA ;例:例:ADD AADD A,#10H#10HADD A,direct ;ADD A,direct ;例:例:ADD AADD A,10H10HADD A,Rn ;ADD A,Rn ;例:例:ADD AA

47、DD A,R7R7ADD A,Ri ;ADD A,Ri ;例:例:ADD AADD A,R0R03-3-2 3-3-2 算术运算指令算术运算指令完成片内完成片内 RAM RAM 和和 A A 中数据的加减乘中数据的加减乘除运算。除运算。一加减指令一加减指令1.1.加法指令加法指令用途:将用途:将A A中的值与其后面的值相加,最终结果否是回到中的值与其后面的值相加,最终结果否是回到A A中。中。 例:例:MOV AMOV A,#30H#30H ADD A ADD A,#10H#10H那么执行完本条指令后,那么执行完本条指令后,A A中的值为中的值为40H40H。 ADDADD影响影响CyCy、O

48、VOV、ACAC、P P 例例1 1:A=3BHA=3BH,PSW=0PSW=0,执行指令,执行指令 ADD A ADD A,#3BH#3BH求:求:A= A= ,Cy= Cy= ,OV= OV= ,AC= AC= ,P= P= ,PSW= PSW= ? 0011 1011 0011 1011 + 0011 1011 + 0011 1011 0111 0110 0111 011076H 0 0 1 176H 0 0 1 101000001= 41HCyACF0RS1RS0OVP加法指令影响加法指令影响PSWPSW中的标志位。中的标志位。两个字节数相加时:两个字节数相加时: 假设第假设第7 7位

49、有进位,那么位有进位,那么CyCy1 1,否那么,否那么CyCy0 0; 假设第假设第3 3位有进位,那么位有进位,那么ACAC1 1,否那么,否那么ACAC0 0; 假设第假设第6 6位有进位,而第位有进位,而第7 7位无进位或第位无进位或第6 6位有无进位而第位有无进位而第7 7位有进位表示有符号数相位有进位表示有符号数相加结果超出表示范围,那么加结果超出表示范围,那么OVOV0 0,否那么,否那么OVOV0 0。假设以。假设以J7J7,J6J6表示第表示第7 7,6 6位的进位,位的进位,那么那么OVOVJ7J6J7J6。相加的和存放在相加的和存放在A A中,假设结果中中,假设结果中“1

50、“1的的个数为奇数那么个数为奇数那么P P1 1,否那么,否那么P P0 0。 A A= 0 0 0 0 0 1 0 0 = 0 0 0 0 0 1 0 0 + + R1R1= 0 0 0 0 1 0 1 1 = 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 解:执行结果如下:解:执行结果如下:00001111=000001111=0,结果为偶数个,结果为偶数个1 1,P P0 0;第三位无进位,第三位无进位,ACAC0 0;J7J6J7J60 0, OV OV0 0;第第7 7位无进位,位无进位,Cy=0Cy=0。 所

51、以指令执行后,所以指令执行后,A A0FH0FH,R1R10BH0BH,ACAC0 0,P P0 0,OVOV0 0,CyCy0 0。分析:由分析:由CyCy,OVOV可知两个加数看作无符号数时和没有超出范围,看可知两个加数看作无符号数时和没有超出范围,看作有符号数时和未溢出。作有符号数时和未溢出。 知知A A=07H=07H, R1R1=0FBH=0FBH;ADD AADD A, R1 R1 ;AAA A+ +R1R1解:执行结果如下:解:执行结果如下: A A =0 0 0 0 0 1 1 1 =0 0 0 0 0 1 1 1 + +R1R1=1 1 1 1 1 0 1 1=1 1 1 1

52、 1 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1 1 1 1 100000010=100000010=1,结果为奇数个,结果为奇数个1 1,P P1 1;第第3 3位有进位,位有进位,ACAC1 1;J7J6J7J60 0,OVOV0 0; 第第7 7位有进位,位有进位, Cy=1 Cy=1。所以指令执行后,所以指令执行后,A A02H02H,R1R10FBH0FBH,ACAC1 1,P P0 0,OVOV0,C0,C1 1。分析:由分析:由CyCy,OVOV可知两个数看作无符号数时,和超出可知两个数看作无符号数时,和超出八位进制数表示范围,看作有符号数

53、时,和未溢出。八位进制数表示范围,看作有符号数时,和未溢出。 知知 A A=09H=09H,R1R1=7CH=7CH; ADD A ADD A, R1 R1 ;AAA A+ +R1R1解:执行结果如下;解:执行结果如下; A A=0 0 0 0 1 0 0 1 =0 0 0 0 1 0 0 1 + +R1R1=0 1 1 1 1 1 0 0 =0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 0 1 1 0 1 110000101=110000101=1, 结果为奇数个结果为奇数个1 1,P P1 1;第第3 3位有进位,位有进位, AC=1 AC

54、=1;J7J6J7J61 1, OV=1 OV=1;第第7 7位无进位,位无进位, Cy=0 Cy=0。所以指令执行结果为:所以指令执行结果为:A A=85H=85H,R1R1=7CH=7CH,AC=1AC=1,OV=1OV=1,Cy=0Cy=0,P=1P=1。分析:由分析:由CyCy,OVOV可知两个加数看作无符号数时,和未可知两个加数看作无符号数时,和未超出表示范围;看作有符号数时,和溢出。超出表示范围;看作有符号数时,和溢出。 知知A A=87H=87H,R1R1=0F5H=0F5H;ADD AADD A, R1 R1 ; A AA A+ +R1R1解:执行结果如下:解:执行结果如下:

55、A A=1 0 0 0 0 1 1 1 =1 0 0 0 0 1 1 1 + +R1R1=1 1 1 1 0 1 0 1 =1 1 1 1 0 1 0 1 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 0 0 1 0 0 01111100=101111100=1,结果为奇数个,结果为奇数个1 1,P P1 1;第第3 3位无进位,位无进位,ACAC0 0;J7J6J7J61 1,OVOV1 1;第第7 7位有进位,位有进位,Cy=1Cy=1。所以指令执行结果为:所以指令执行结果为:A A=7CH=7CH,R1R1=0F5H=0F5H,AC=0AC=0,CyCy1 1,OV

56、OV1 1,P P1 1。分析:由分析:由CyCy,OVOV可知两个加数看作为无符号数时,和超可知两个加数看作为无符号数时,和超出范围,看作为有符号数时,和溢出。出范围,看作为有符号数时,和溢出。下面的标题自行练习下面的标题自行练习MOV 34HMOV 34H,#10H#10HMOV R0MOV R0,#13H#13HMOV AMOV A,34H34HADD AADD A,R0R0MOV R1MOV R1,#34H#34HADD AADD A,R1R1A=16+19=35=23HA=16+19=35=23HA=35+16=51=33HA=35+16=51=33H 练习练习设设(A)=0C3H,

57、(R0)=0AAH,(A)=0C3H,(R0)=0AAH,执行指令执行指令ADD A,R0ADD A,R0 (A) 1100 0011 (A) 1100 0011 +(R0) 1010 1010 +(R0) 1010 1010 0110 1101 0110 1101 1 1 和为和为6DH6DHCY=CY=OV=OV=AC=AC=P=P=1 11 10 01 12 2带进位加法:带进位加法: ADDC A ADDC A,源操作数,源操作数ADDC AADDC A,RnRnADDC A,directADDC A,directADDC A,RiADDC A,RiADDC A,#dataADDC A

58、,#data用途:将用途:将A A中的值和其后面的值相中的值和其后面的值相加,并且加上进位位加,并且加上进位位C C中的值。中的值。 例例2 2:A= 9AHA= 9AH,R2= E3HR2= E3H,PSW= 0PSW= 0,执行指令,执行指令ADDC AADDC A,R2 R2 后求:后求:A= A= ,Cy= Cy= ,OV= OV= ,AC= AC= ,P= P= ,PSW= PSW= ? 1001 1010 1001 1010 1110 0011 1110 0011 + 0 + 0 1 0111 1101 1 0111 1101ADDC ADDC 影响影响CyCy、OVOV、ACAC

59、、P P7DH 1 1 0 07DH 1 1 0 010000100 = 84HCyACF0RS1RS0OVP例例3 31212设设A A=78H=78H,30H30H=0A4H=0A4H,Cy=1Cy=1;试分析指令:试分析指令:ADDC AADDC A, 30H 30H ;AAA A+ +30H30H+Cy+Cy执行情况。执行情况。 解:解: 执行结果如下:执行结果如下: A A =0 1 1 1 1 0 0 0 =0 1 1 1 1 0 0 0 30H30H=1 0 1 0 0 1 0 0 =1 0 1 0 0 1 0 0 + (Cy)= 1 + (Cy)= 1 0 0 0 1 1 1

60、0 1 0 0 0 1 1 1 0 1 1 1 0 1 1 0 00011101=000011101=0,结果为奇数个,结果为奇数个1 1,P P1 1;第第3 3位无进位,位无进位,ACAC0 0;J7J6J7J60 0,OVOV0 0;第第7 7位有进位,位有进位,CyCy1 1。所以指令执行后:所以指令执行后:A A=1DH=1DH,30H30H=0A4H=0A4H,AC=0AC=0,OV=0OV=0,Cy=1Cy=1,P=1P=1。阐明:阐明:由于由于5151单片机是一种单片机是一种8 8位机,所以只能做位机,所以只能做8 8位的数学运算,但位的数学运算,但8 8位运位运算的范围只需算

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论