第7章:指令系统_第1页
第7章:指令系统_第2页
第7章:指令系统_第3页
第7章:指令系统_第4页
第7章:指令系统_第5页
已阅读5页,还剩225页未读 继续免费阅读

下载本文档

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

文档简介

1、 第7章:MCS-51系列单片机指令系统 一、本章主要内容: 单片机指令系统、伪指令、汇编语言程序编制。 二、本章重点: 各种指令的理解和应用、汇编程序的编制。 三、本章难点: 汇编指令与机器指令的关系;指令与进位标识的关系;指令的正确使用。 四、教学内容如下几种语言以及它们之间的关系几种语言以及它们之间的关系 汇编汇编 编译编译机器指令对应的助记符即汇编指令,机器指令对应的助记符即汇编指令,例如:例如:MOV A,20H01110100 00100000 (74 20)指令的安放以及指令的地址(以上一指令为例)指令的安放以及指令的地址(以上一指令为例) 汇编语言程序高级语言程序 机器语言程序

2、(可执行) 7.1.1 指令格式指令格式LOOP:MOV A,2AH ;A(2AH) 标号标号:是指令的符号地址,代表指令机器码存放地的首地是指令的符号地址,代表指令机器码存放地的首地址;址; 操作码项规定了指令的操作功能,常用助记符表示。操作码项规定了指令的操作功能,常用助记符表示。 操作数是指令的操作对象。操作数分为目标操作数(上操作数是指令的操作对象。操作数分为目标操作数(上例中的累加器例中的累加器A)和源操作数(上例中的)和源操作数(上例中的2AH)。)。 上例的机器码上例的机器码200AH:742A 注释项是对指令功能作的说明。便于阅读和维护。注释项是对指令功能作的说明。便于阅读和维

3、护。 7.1. 2指令的描述约定指令的描述约定 1、Rn(n=07) 表示工作寄存器表示工作寄存器R0R7 2、Ri(i=0,1) 存放地址指针的间址寄存器存放地址指针的间址寄存器R0,R1 3、#data 8位立即数位立即数 4、#data16 16位立即数位立即数 如:MOV DPTR,#data16 5、direct 8位片内RAM单元(包括SFR)的直接地址直接地址 如:MOV direct,#data ;#datadirect 6、addr11 11位目的地址位目的地址,用于ACALL和AJMP指令中 7、 addr16 16位目的地址位目的地址,用于LCALL和LJMP指令中 8、

4、rel :补码形式的:补码形式的8位地址偏移量位地址偏移量 9、bit :片内:片内RAM或或SFR的直接寻址的位地址的直接寻址的位地址 10、 :间接地址方式中,表示间址寄存器的符号:间接地址方式中,表示间址寄存器的符号 11、/ :表示:表示“位位”取反,但不影响该位的原值。取反,但不影响该位的原值。 ANL C,/P1.2 12、(、():指):指中的内容中的内容,是地址。是地址。 13、(、( ):指):指()中的内容,中的内容,()是地址。是地址。 14、 :示将箭尾的内容传送到箭头所指的单元:示将箭尾的内容传送到箭头所指的单元 如:已知如:已知58H单元的数据是单元的数据是36H,

5、R0的内容是的内容是58H INC 58H ;(58H)+158H DEC R0 ;(R0)1 (R0) 执行两条指令后,执行两条指令后,58H单元中数据不变。单元中数据不变。 7.1.3 寻址方式寻址方式所谓寻址方式,通常是指用什么方式通过源操作数找到指令操作的数据。MCS51单片机有七种寻找方式。 1立即寻址立即寻址 指令中直接给出一个8位或16位的二进制常数(立即数)。立即数前必须加“#”号表示。 一般用#data抽象地表示立即数。 MOV A,#data 例如:将立即数60H送入累加器A中汇编指令:MOV A ,#60H ;A#60H机器指令:74 60 ;双字节指令 例如:将数据指针

6、寄存器DPTR指向1808H MOV DPTR, #1808H ;DPTR #1808H 90 18 08;三字节指令 2直接寻址直接寻址 在指令中源操作数是一个直接地址,该地址指出了指令操作的数据所在的字节地址。 一般用direct表示抽象直接地址。 MOV A,direct ;direct只能是内部RAM地址。 MOV A,40H ;A(40H) MOV A,55H ; A(50H)MOV A,#55H ; A55H MOV DPTR,#1234H ; DPTR1234H MOV DPTR,1234H ;非法指令 MOV A,5500H ;非法指令 3寄存器寻址寄存器寻址 指令中给出一个寄

7、存器Rn , Rn中存放着操作数。 INC R2 ;R2(R2)+1 4寄存器间接寻址寄存器间接寻址 指令中的寄存器写成Ri或DPTR的形式。寄存器内容不是操作数,而是操作数的地址。MOV A,R0 ;A(R0)MOV A,R2 ;非法指令,i只能为 0,1 5变址寻址(基址寄存器)变址寻址(基址寄存器)+(变址寄存器间接寻址)(变址寄存器间接寻址) 地址(基址寄存器)地址(基址寄存器)+(变址寄存器间接寻址)中是操作(变址寄存器间接寻址)中是操作数。数。 基地址寄存器:PC或DPTR 变址寄存器:累加器AMOVC A,A+PC ;A(A)+(PC)MOVC A,A+DPTR ;A(A)+(D

8、PTR)JMP A+DPTR ;PC(A)+(DPTR)设程序存储器(1065H)=74H,(A)=05H,(DPTR)=1060H。. 执行指令:MOVC A,A+DPTR;A(05H1060H)后,(A)74H。 6相对寻址相对寻址 常用于转移指令中。指令中给出相对当前地址的偏移量rel当前地址为(PC),rel为8为带符号2进制数。SJMP rel JZ relSJMP 00110000BJZ 10011101B 真正的转移目标地址是(PC)rel。 7位寻址位寻址 指令中给出的操作数是位地址,真正参与操作的数据是位地址中的内容。 一般用 bit抽象表示位地址。SETB TR0 ;TR0

9、1CLR 00H ;(00H)0MOV C,57H ;将57H位地址的内容传送到 ;位累加器C中 ANL C,5FH ;将5FH位状态与进位位C相与, ;结果在C中 判断下列指令中源操作数的寻址方式:判断下列指令中源操作数的寻址方式:MOV A, #67H; 立即寻址立即寻址MOV R1, 67H; 直接寻址直接寻址 MOV 30H,R2; 寄存器寻址寄存器寻址MOV C, 20H ; 位寻址位寻址MOV 60H, R1; 寄存器间址寄存器间址MOV A,A+DPTR; 变址寻址变址寻址 SJMP 11111110B; 相对寻址相对寻址 SJMP $; 相对寻址相对寻址 7.2 指令系统 MC

10、S-51指令系统有42种助记符,代表了33种功能,指令助记符与各种可能的寻址方式相结合,共构成111条指令。 按指令的功能,MCS-51指令系统可分为下列5类: (1)数据传送类指令(29条)(2)算术运算类指令(24条)(3)逻辑运算及移位类指令(24条)(4)位操作类指令(17条)(5)控制转移类指令(17条) 7.2.1数据传送类指令数据传送类指令 MCS-51 单片机指令系统中,数据传送指令类共单片机指令系统中,数据传送指令类共28条:条:内部数据传送指令,助记符:内部数据传送指令,助记符: MOV。堆栈指令,助记符:堆栈指令,助记符: PUSH,POP。数据交换指令,数据交换指令,

11、助记符:助记符:XCH,XCHD,SWAP。 外部数据传送指令,助记符:外部数据传送指令,助记符: MOVX。读程序存储器指令,助记符:读程序存储器指令,助记符: MOVC。 只要目标操作数不是A,数据传送指令一般不影响标识(寄存器PSW的相关位)。 1内部数据传送指令内部数据传送指令 内部数据传送是指数据在内部内部数据传送是指数据在内部RAM和和SFR中进行的传送。中进行的传送。指令格式:指令格式:MOV 目标操作数目标操作数,源操作数源操作数指令功能:将源操作数指定的内容传送到目标操作数中,源指令功能:将源操作数指定的内容传送到目标操作数中,源操作数不变。操作数不变。 (1)以)以A作目标

12、操作数的传送指令MOV A,#24H ;A #24H7424 MOV A,35H ;A (35H) E535MOV A,R5;A (R5)11101101,即EDMOV A,R0 ;A (R0)11100110,即E6指令类型指令格式操作说明机器码A作目标操作数MOV A,#dataA #data74dataMOV A,directA (direct) E5directMOV A,RnA (Rn)11101rrr*MOV A,RiA (Ri)1110011i (2)以)以Rn作目标操作数的传送指令MOV R3,#22H;R3 22H 01111011 00100010 MOV R4, A ;R

13、4 (A) 11111100MOV R2, 23H ;R2 (23H) 10101010 00100011指令类型指令格式操作说明机器码寄存器Rn作目标操作数MOV Rn,#dataRn #data01111rrrDataMOV Rn, ARn (A)11111rrrMOV Rn, directRn (direct) 10101rrrdirect (3)以)以立即地址作目标操作数的传送指令指令类型指令格式操作说明机器码direct作目标操作数MOV direct, #datadirect#data 75directdataMOV direct,ADirect (A)F5directMOV di

14、rect1,direct2direct1 (direct2) 85direct2direct1MOV direct,Rndirect (Rn)10001rrrdirectMOV direct,Ridirect (Ri)1000011idirect (4)以)以间接地址作目标操作数的传送指令MOV R0, #7DH ;(R0) #7DH,01110110 01111101 MOV R1, 7AH ;(R1) (7AH),10100111 01111010MOV R0 ,A ;(R0) (A), 11110110指令类型指令格式操作说明机器码以Ri作目标操作数MOV Ri, #data(Ri) #

15、data0111011idataMOV Ri, direct(Ri) (direct)1010011idirectMOV Ri ,A(Ri) (A)1111011i 例:已知(例:已知(R0)=30H。指出下列程序段的执行结果。指出下列程序段的执行结果。MOV 30H , #88H ;30H 88H,(,(30H)=88HMOV 40H, #11H ;40H 11H,(,(40H)=11HMOV A, R0 ;A (R0), (A)=88HMOV R0, 40H ;(R0) (40H),(,(30H)=11HMOV 40H, A ;40H (A), (40H)=88H 例:已知(例:已知(R0

16、)=30H。指出下列程序段的执行结果。指出下列程序段的执行结果。MOV 30H , #88H ;30H 88H,(,(30H)=88HMOV 40H, #11H ;40H 11H,(,(40H)=11HMOV A, R0 ;A (R0), (A)=88HMOV R0, 40H ;(R0) (40H),(,(30H)=11HMOV 40H, A ;40H (A), (40H)=88H 结果:(结果:(A)=88H,(,(30H)=11H, (40H),),=88H 例:已知(例:已知(R0)=30H。指出下列程序段的执行结果。指出下列程序段的执行结果。MOV 30H , #88H ;30H 88

17、H,(,(30H)=88HMOV 40H, #11H ;40H 11H,(,(40H)=11HMOV A, R0 ;A (R0), (A)=88HMOV R0, 40H ;(R0) (40H),(,(30H)=11HMOV 40H, A ;40H (A), (40H)=88H 结果:(结果:(A)=88H,(,(30H)=11H, (40H),),=88H 例:分析指令例:分析指令MOV 0A0H,90H的作用,查表确定其机器码的作用,查表确定其机器码 例:已知(例:已知(R0)=30H。指出下列程序段的执行结果。指出下列程序段的执行结果。MOV 30H , #88H ;30H 88H,(,(

18、30H)=88HMOV 40H, #11H ;40H 11H,(,(40H)=11HMOV A, R0 ;A (R0), (A)=88HMOV R0, 40H ;(R0) (40H),(,(30H)=11HMOV 40H, A ;40H (A), (40H)=88H 结果:(结果:(A)=88H,(,(30H)=11H, (40H),),=88H 例:分析指令例:分析指令MOV 0A0H,90H的作用,查表确定其机器码的作用,查表确定其机器码 解:该指令是属于解:该指令是属于MOV direct1,direct2;源操作数;源操作数direct2和目标操作数和目标操作数direct1都是片内存

19、储器的直接地址,即实现存储都是片内存储器的直接地址,即实现存储单元向另一存储单元传送数据。该指令的作用是把片内单元向另一存储单元传送数据。该指令的作用是把片内90H单单元中的内容传送到元中的内容传送到0A0H单元。单元。 机器码为:机器码为:85 A0 90 片内RAM及寄存器的数据传送指令MOV共15条,如图助记。 内部传递用MOV;目标在前源在后。 R不能用两次,所传数据为8位。 DPTR是例外。 传至数据16位 2堆栈操作指令堆栈操作指令 “堆栈堆栈”是一个按先进后出的原则存取数据的存储区,该是一个按先进后出的原则存取数据的存储区,该区区在内部在内部RAM中,栈顶由中,栈顶由SP指定。指

20、定。 堆栈操作即对栈顶存取数据:堆栈操作即对栈顶存取数据: 入栈:修改栈顶指针,某地址数据压入栈顶。入栈:修改栈顶指针,某地址数据压入栈顶。 出栈:栈顶数据弹出到某地址,修改栈顶指针出栈:栈顶数据弹出到某地址,修改栈顶指针 。 2堆栈操作指令堆栈操作指令 “堆栈堆栈”是一个按先进后出的原则存取数据的存储区,该区在内部是一个按先进后出的原则存取数据的存储区,该区在内部RAM中栈顶由中栈顶由SP指定。指定。 堆栈操作即对栈顶存取数据:堆栈操作即对栈顶存取数据: 入栈:修改栈顶指针,某地址数据压入栈顶。入栈:修改栈顶指针,某地址数据压入栈顶。 (1)PUSH将相应数据压入栈顶:将相应数据压入栈顶:P

21、USH direct ;栈顶指针栈顶指针+1,(,(direct)压入栈顶)压入栈顶 出栈:栈顶数据弹出到某地址,修改栈顶指针出栈:栈顶数据弹出到某地址,修改栈顶指针 。 (2)POP将栈顶数据弹致相应单元:POP direct ;栈顶数据弹出到栈顶数据弹出到direct,栈顶指针,栈顶指针-1 (1)PUSH将相应数据压入栈顶:将相应数据压入栈顶:PUSH direct ;栈顶指针栈顶指针+1,(,(direct)压入栈顶)压入栈顶 (2)POP将栈顶数据弹致相应单元:POP direct ;栈顶数据弹出到栈顶数据弹出到direct,栈顶指针,栈顶指针-1 栈顶由SP指定,是一个地址。 di

22、rect 栈顶 pushpop (1)PUSH将相应数据压入栈顶:将相应数据压入栈顶:PUSH direct ;栈顶指针栈顶指针+1,(,(direct)压入栈顶)压入栈顶 (2)POP将栈顶数据弹致相应单元:POP direct ;栈顶数据弹出到栈顶数据弹出到direct,栈顶指针,栈顶指针-1 栈顶由SP指定,是一个地址。例:设SP=60H,(A)=30H,(B)=70H。注意栈顶开始为60H。PUSH A ;SP60H+1(栈顶为61H) ,61H(A)。 direct 栈顶 pushpop (1)PUSH将相应数据压入栈顶:将相应数据压入栈顶:PUSH direct ;栈顶增高,(栈顶

23、增高,(direct)压入栈顶)压入栈顶 (2)POP将栈顶数据弹致相应单元:POP direct ;栈顶数据弹出到栈顶数据弹出到direct,栈顶降低,栈顶降低 栈顶由SP指定,是一个地址。例:设SP=60H,(A)=30H,(B)=70H。注意栈顶开始为60H。PUSH A ;SP60H+1(栈顶为61H) ,61H(A)。PUSH B ;SP61H+1 (栈顶为62H),62H(B) direct 栈顶 pushpop (1)PUSH将相应数据压入栈顶:将相应数据压入栈顶:PUSH direct ;栈顶增高,(栈顶增高,(direct)压入栈顶)压入栈顶 (2)POP将栈顶数据弹致相应单

24、元:POP direct ;栈顶数据弹出到栈顶数据弹出到direct,栈顶降低,栈顶降低 栈顶由SP指定,是一个地址。例:设SP=60H,(A)=30H,(B)=70H。注意栈顶开始为60H。PUSH A ;SP60H+1(栈顶为61H) ,61H(A)。PUSH B ;SP61H+1 (栈顶为62H),62H(B)POP DPL ;DPL70H,SP62H-1 (栈顶为61H) direct 栈顶 pushpop (1)PUSH将相应数据压入栈顶:将相应数据压入栈顶:PUSH direct ;栈顶增高,(栈顶增高,(direct)压入栈顶)压入栈顶 (2)POP将栈顶数据弹致相应单元:POP

25、 direct ;栈顶数据弹出到栈顶数据弹出到direct,栈顶降低,栈顶降低 栈顶由SP指定,是一个地址。例:设SP=60H,(A)=30H,(B)=70H。注意栈顶开始为60H。PUSH A ;SP60H+1(栈顶为61H) ,61H(A)。PUSH B ;SP61H+1 (栈顶为62H),62H(B)POP DPL ;DPL70H,SP62H-1 (栈顶为61H) POP DPH ;DPH30H,SP61H-1 (栈顶为60H), direct 栈顶 pushpop 3数据交换指令数据交换指令 数据交换主要是在内部数据交换主要是在内部RAM的某一单元和累加器的某一单元和累加器A之间进之间

26、进行,并且累加器行,并且累加器A总是作目标操作数。总是作目标操作数。 (1) 整字节交换指令整字节交换指令类型指令格式操作说明机器码整字节交换指令XCH A,direct(A) (direct)11000101directXCH A,Rn(A) (Rn)11001rrrXCH A,Ri(A) (Ri)1100011i ARi Rndirect xchxchxch 例:例: 已知已知(30H)=88H,(40H)=11H,(R0)=30H,(R1)=40H。编。编写实现写实现30H与与40H单元内容相互交换的程序段。单元内容相互交换的程序段。 例:例: 已知已知(30H)=88H,(40H)=1

27、1H,(R0)=30H,(R1)=40H。编。编写实现写实现30H与与40H单元内容相互交换的程序段。单元内容相互交换的程序段。XCH 30H,40H 例:例: 已知已知(30H)=88H,(40H)=11H,(R0)=30H,(R1)=40H。编。编写实现写实现30H与与40H单元内容相互交换的程序段。单元内容相互交换的程序段。XCH 30H,40H 依助记图依助记图“XCH 30H,40H” 是错误的。是错误的。 ARi Rndirect xchxchxch 例:例: 已知已知(30H)=88H,(40H)=11H,(R0)=30H,(R1)=40H。编。编写实现写实现30H与与40H单元

28、内容相互交换的程序段。单元内容相互交换的程序段。XCH 30H,40H 依助记图依助记图“XCH 30H,40H” 是错误的。是错误的。XCH A,40H ;(A)(40H) ARi Rndirect xchxchxch 例:例: 已知已知(30H)=88H,(40H)=11H,(R0)=30H,(R1)=40H。编。编写实现写实现30H与与40H单元内容相互交换的程序段。单元内容相互交换的程序段。XCH 30H,40H 依助记图依助记图“XCH 30H,40H” 是错误的。是错误的。MOV A,30H ;A(30H) XCH A,40H ;(A)(40H) ARi Rndirect xchx

29、chxch 例:例: 已知已知(30H)=88H,(40H)=11H,(R0)=30H,(R1)=40H。编。编写实现写实现30H与与40H单元内容相互交换的程序段。单元内容相互交换的程序段。XCH 30H,40H 依助记图依助记图“XCH 30H,40H” 是错误的。是错误的。MOV A,30H ;A(30H) XCH A,40H ;(A)(40H) MOV 30H,A ;30H(A) ARi Rndirect xchxchxch (2)半字节交换指令半字节交换指令类型指令格式操作说明机器码半字节交换指令XCHD A,Ri(A)30(Ri)301101011iSWAP A(A)30(A)74

30、11000100 ARi xchd A30A74swap (2)半字节交换指令半字节交换指令 例:已知(例:已知(R0)=20H,(,(A)=3AH,(,(20H)=85H,指出,指出执行下列指令的结果。执行下列指令的结果。XCHD A, R0 ;(;(A)=35H,(,(20H)=8AH,SWAP A ;(;(A)=53H类型指令格式操作说明机器码半字节交换指令XCHD A,Ri(A)30(Ri)301101011iSWAP A(A)30(A)7411000100 ARi xchd A30A74swap (2)半字节交换指令半字节交换指令 例:已知(例:已知(R0)=20H,(,(A)=3A

31、H,(,(20H)=85H,指出,指出执行下列指令的结果。执行下列指令的结果。XCHD A, R0 ;(;(A)=35H,(,(20H)=8AH,SWAP A ;(;(A)=53H执行结果:(执行结果:(A)=53H,(,(20H)=8AH,(,(R0)=20H类型指令格式操作说明机器码半字节交换指令XCHD A,Ri(A)30(Ri)301101011iSWAP A(A)30(A)7411000100 ARi xchd A30A74swap (2)半字节交换指令半字节交换指令XCHD A,R2 ;非法指令非法指令SWAP R0 ;非法指令非法指令类型指令格式操作说明机器码半字节交换指令XCH

32、D A,Ri(A)30(Ri)301101011iSWAP A(A)30(A)7411000100 ARi xchd A30A74swap 4外部数据传送指令MOVX 类型指令格式操作说明机器码A为目标操作数MOVX A,RiA 外(Ri)1110001iMOVX A,DPTRA(DPTR)11100000A为源操作数MOVX Ri,A外(Ri)(A)1111001iMOVX DPTR,A(DPTR)(A)11110000 4外部数据传送指令MOVX 说明1:参与数据传送的双方:内部A和外部RAM某单元。 类型指令格式操作说明机器码A为目标操作数MOVX A,RiA 外(Ri)1110001i

33、MOVX A,DPTRA(DPTR)11100000A为源操作数MOVX Ri,A外(Ri)(A)1111001iMOVX DPTR,A(DPTR)(A)11110000 4外部数据传送指令MOVX 说明1:参与数据传送的双方:A和外部RAM某单元。 说明2:外部RAM某单元一般由DPTR指定;外部RAM空间不大于256B,其单元地址可以由Ri指定。建议不要使用用到Ri的指令类型指令格式操作说明机器码A为目标操作数MOVX A,RiA 外(Ri)1110001iMOVX A,DPTRA(DPTR)11100000A为源操作数MOVX Ri,A外(Ri)(A)1111001iMOVX DPTR,

34、A(DPTR)(A)11110000 4外部数据传送指令MOVX 说明1:参与数据传送的双方:A和外部RAM某单元。 说明2:外部RAM某单元一般由DPTR指定;外部RAM空间不大于256B,其单元地址可以由Ri指定。建议不用有Ri的MOVX指令类型指令格式操作说明机器码A为目标操作数MOVX A,RiA 外(Ri)1110001iMOVX A,DPTRA(DPTR)11100000A为源操作数MOVX Ri,A外(Ri)(A)1111001iMOVX DPTR,A(DPTR)(A)11110000 ARiDPTR movxmovx编写程序实现下列要求的数据传送。片内RAM20H单元的内容送片

35、内RAM40H单元。编写程序实现下列要求的数据传送。片内RAM20H单元的内容送片内RAM40H单元。MOV 40H,20H ;片内RAM单元间的数据传送可直接完成编写程序实现下列要求的数据传送。片内RAM20H单元的内容送片内RAM40H单元。MOV 40H,20H ;片内RAM单元间的数据传送可直接完成片外RAM20H单元的内容送片内RAM40H单元。编写程序实现下列要求的数据传送。片内RAM20H单元的内容送片内RAM40H单元。MOV 40H,20H ;片内RAM单元间的数据传送可直接完成片外RAM20H单元的内容送片内RAM40H单元。MOVX A, DPTR ;片外DPTR单元的内

36、容送入累加器A编写程序实现下列要求的数据传送。片内RAM20H单元的内容送片内RAM40H单元。MOV 40H,20H ;片内RAM单元间的数据传送可直接完成片外RAM20H单元的内容送片内RAM40H单元。MOV DPTR, #0020H ;片外RAM的地址送入DPTRMOVX A, DPTR ;片外DPTR单元的内容送入累加器AMOV 40H,A ;累加器A的内容送入片内RAM 40H单元编写程序实现下列要求的数据传送。片内RAM20H单元的内容送片内RAM40H单元。MOV 40H,20H ;片内RAM单元间的数据传送可直接完成片外RAM20H单元的内容送片内RAM40H单元。MOV D

37、PTR, #0020H ;片外RAM的地址送入DPTRMOVX A, DPTR ;片外DPTR单元的内容送入累加器AMOV 40H,A ;累加器A的内容送入片内RAM 40H单元片内RAM20H单元的内容送片外RAM4000H单元。MOVX DPTR,A ;A的内容送入外部RAM4000H单元编写程序实现下列要求的数据传送。片内RAM20H单元的内容送片内RAM40H单元。MOV 40H,20H ;片内RAM单元间的数据传送可直接完成片外RAM20H单元的内容送片内RAM40H单元。MOV DPTR, #0020H ;片外RAM的地址送入DPTRMOVX A, DPTR ;片外DPTR单元的内

38、容送入累加器AMOV 40H,A ;累加器A的内容送入片内RAM 40H单元片内RAM20H单元的内容送片外RAM4000H单元。MOV DPTR,#4000H ; 片外RAM4000H的地址送入DPTRMOV A, 20H ;内部RAM20H单元的内容送入AMOVX DPTR,A ;A的内容送入外部RAM4000H单元 5读程序存储器的指令(查表指令)MOVC A,A+PC ;A程序存储器某单元数据 5读程序存储器的指令(查表指令)MOVC A,A+PC ;A程序存储器某单元数据MOVC A,A+DPTR ;A程序存储器某单元数据 5读程序存储器的指令(查表指令)MOVC A,A+PC ;A

39、程序存储器某单元数据MOVC A,A+DPTR ;A程序存储器某单元数据 其中A+PC或A+DPTR为程序存储器某单元地址。 AA+PCA+DPTR movcmovc例:程序存储器2000H单元的内容送外部RAM2040H单元。 例:程序存储器2000H单元的内容送外部RAM2040H单元。 AA+PCA+DPTR movcmovc ARiDPTR movxmovx例:程序存储器2000H单元的内容送外部RAM2040H单元。 解:MOVC A,A+DPTR ;程序存储器2000H单元内容送入AMOVX DPTR,A ;A的内容送入外部RAM2040H单元 AA+PCA+DPTR movcmo

40、vc ARiDPTR movxmovx例:程序存储器2000H单元的内容送外部RAM2040H单元。 解:MOV DPTR,#2000H ; DPTR指向2000H单元。MOV A, #00H ;A清零MOVC A,A+DPTR ;程序存储器2000H单元内容送入AMOVX DPTR,A ;A的内容送入外部RAM2040H单元 AA+PCA+DPTR movcmovc ARiDPTR movxmovx例:程序存储器2000H单元的内容送外部RAM2040H单元。 解:MOV DPTR,#2000H ; DPTR指向2000H单元。MOV A, #00H ;A清零MOVC A,A+DPTR ;程

41、序存储器2000H单元内容送入AMOV DPTR,#2040H ; DPTR指向2040H单元MOVX DPTR,A ;A的内容送入外部RAM2040H单元 AA+PCA+DPTR movcmovc ARiDPTR movxmovx 例:在程序存储器中,有如下数据表格为:例:在程序存储器中,有如下数据表格为:1020H:30H,31H,32H,33H,34H,35H,36H,37H1028H:38H,39H,41H,42H,43H,44H,45H,46H执行程序一:执行程序一:1010H:MOV A,#15H1012H:MOVC A,A+PC ;15H+1013H=1028H ,A(1028H

42、) 例:在程序存储器中,有如下数据表格为:例:在程序存储器中,有如下数据表格为:1020H:30H,31H,32H,33H,34H,35H,36H,37H1028H:38H,39H,41H,42H,43H,44H,45H,46H执行程序一:执行程序一:1010H:MOV A,#15H1012H:MOVC A,A+PC ;15H+1013H=1028H ,A(1028H)执行结果:(执行结果:(A)=38H,(,(PC)=1013H 例:在程序存储器中,有如下数据表格为:例:在程序存储器中,有如下数据表格为:1020H:30H,31H,32H,33H,34H,35H,36H,37H1028H:3

43、8H,39H,41H,42H,43H,44H,45H,46H执行程序一:执行程序一:1010H:MOV A,#15H1012H:MOVC A,A+PC ;15H+1013H=1028H ,A(1028H)执行结果:(执行结果:(A)=38H,(,(PC)=1013H执行程序二:执行程序二:1004H:MOV A,#02H1006H:MOV DPTR,#1020H1009H:MOVC A,A+DPTR ;02H+1020H=1022H,A (1022H), 例:在程序存储器中,有如下数据表格为:例:在程序存储器中,有如下数据表格为:1020H:30H,31H,32H,33H,34H,35H,36

44、H,37H1028H:38H,39H,41H,42H,43H,44H,45H,46H执行程序一:执行程序一:1010H:MOV A,#15H1012H:MOVC A,A+PC ;15H+1013H=1028H ,A(1028H)执行结果:(执行结果:(A)=38H,(,(PC)=1013H执行程序二:执行程序二:1004H:MOV A,#02H1006H:MOV DPTR,#1020H1009H:MOVC A,A+DPTR ;02H+1020H=1022H,A (1022H),执行结果:(执行结果:(A)=32H,(,(PC)=100AH 7.3.2算术运算指令算术运算指令 MCS-51单片机

45、指令系统中,算术运算指令共有24条。 该类指令按二进制运算法则影响PSW的标识位 算术运算指令只能进行单字节2进制数运算。若要进行多字节运算或BCD码运算等,用户必须采取另外的措施。 1加法指令加法指令 (1)不带进位加法指令)不带进位加法指令类型指令格式操作说明机器码不带进位的加法指令ADD A,#dataA(A)+#data24dataADD A,directA(A)+(direct) 25directADD A,RnA(A)+(Rn)00101rrrADD A,RiA(A)+(Ri)0010011i例:(A)=0C5H,R0=20H,(20H)=0AFH,执行指令: ADD A,R0例:

46、(A)=0C5H,R0=20H,(20H)=0AFH,执行指令: ADD A,R01100010110101111 01110100例:(A)=0C5H,R0=20H,(20H)=0AFH,执行指令: ADD A,R0结果:(A)=74H;Cy=1;AC=1;OV=1;P=1。 CPU只能进行无符号数的运算,并影响Cy、AC、P。但是按有符号数运算影响OV。 在进行带符号数的加法运算时,溢出标志OV是一个重要的编程标志,利用它可以判断两个带符号数相加,和数是否溢出1100010110101111 01110100 (2)带进位加法指令)带进位加法指令 说明说明1:该类指令的助记符是:该类指令的

47、助记符是ADD加上加上C,可理解为进位标,可理解为进位标志志CY参与运算。常用于多字节加法运算的高字节求和。参与运算。常用于多字节加法运算的高字节求和。 说明说明2:该类指令对:该类指令对PSW中中CY、AC、OV及及P标志产生影标志产生影响与响与ADD相同。相同。类型指令格式操作说明机器码带进位的加法指令ADDC A,#dataA(A)+#data+(c)34#dataADDC A,directA(A)+(direct)+(c)35directADDC A,RnA(A)+(Rn)+(c)00111rrrADDC A,RiA(A)+(Ri)+(c)0011011i 例:设例:设(A)=6DH,

48、(R1)=25H,(25H)=98H,(CY)=1。执行。执行指令指令:ADDC A,R1分析执行结果及对各标志位的影响?分析执行结果及对各标志位的影响? 例:设例:设(A)=6DH,(R1)=25H,(25H)=98H,(CY)=1。执行。执行指令指令:ADDC A,R1分析执行结果及对各标志位的影响?分析执行结果及对各标志位的影响? 01101101 10011000+ c 00000110 例:设例:设(A)=6DH,(R1)=25H,(25H)=98H,(CY)=1。执行。执行指令指令:ADDC A,R1分析执行结果及对各标志位的影响?分析执行结果及对各标志位的影响?解:解:结果:(结

49、果:(A)=06H,(,(CY)=1分析:分析:CY求和后重新被置求和后重新被置1,(AC)=1;(OV)=0;(P)=0。 01101101 10011000+ c 00000110 例题:有两个无符号16位二进制数分别存于30H,31H和32H,33H单元中,求两数和并将和存于32开始的单元中(高字节在高地址单元中)。MOV A,30HADD A,32HMOV 32H,A (31H)|(30H)+ (33H)|(32H)(34H)|(33H)|(32H) 例题:有两个无符号16位二进制数分别存于30H,31H和32H,33H单元中,求两数和并将和存于32开始的单元中(高字节在高地址单元中)

50、。MOV A,30HADD A,32HMOV 32H,AMOV A,31HADDC A,33HMOV 33H,A (31H)|(30H)+ (33H)|(32H)(34H)|(33H)|(32H) 例题:有两个无符号16位二进制数分别存于30H,31H和32H,33H单元中,求两数和并将和存于32开始的单元中(高字节在高地址单元中)。MOV A,30HADD A,32HMOV 32H,AMOV A,31HADDC A,33HMOV 33H,AMOV A,#00HADDC A,#00HMOV 34H,A (31H)|(30H)+ (33H)|(32H)(34H)|(33H)|(32H) (3)加

51、)加1指令指令 说明:该类指令只有说明:该类指令只有INC A对对PSW的的P标志位有影标志位有影响,其他指令对响,其他指令对PSW各标志位均无影响。各标志位均无影响。 类型指令格式操作说明机器码加1指令INC AA(A)+104INC directdirect(direct)+105directINC RnRn(Rn)+100001rrrINC Ri(Ri)(Ri)+10000011iINC DPTRDPTR(DPTR)+1A3 例例:设设(A)=7FH,(R0)=35H,(35H)=0FFH,(DPTR)=68FFH ,(36H)=9AH 。分析如下指令的执行过程和结果。分析如下指令的执行

52、过程和结果。(1) INC A ;A (A)+1 (A)=80H(2) INC R0 ;R0(R0)+1 (R0)=36H(3) INC 36H ;36H(36H)+1 (36H)=9BH(4) INC R0 ;R0(R0)+1 (35H)=00H(5) INC DPTR ;DPTR(DPTR)+1,(DPTR)=6900H (4)十进制调整指令)十进制调整指令 这条指令是在进行这条指令是在进行BCD码加法运算时,跟有码加法运算时,跟有ADD或或ADDC指令之后,用于对指令之后,用于对BCD码的加法运算结果自动进行修正,使其码的加法运算结果自动进行修正,使其仍为仍为BCD码表达形式。码表达形式

53、。 类型指令格式操作说明机器码BCD码加法的十进制调整指令DA AD4 (4)十进制调整指令)十进制调整指令 这条指令是在进行这条指令是在进行BCD码加法运算时,跟有码加法运算时,跟有ADD或或ADDC指令之后,用于对指令之后,用于对BCD码的加法运算结果自动进行修正,使其码的加法运算结果自动进行修正,使其仍为仍为BCD码表达形式。码表达形式。 BCD码是一种用码是一种用4位二进制数表示一位十进制数的编码,即位二进制数表示一位十进制数的编码,即用用0000B1001B十个二进制编码表示十个二进制编码表示09十个十进制数码。然十个十进制数码。然而计算机在进行运算时是按照二进制规则进行的,对而计算

54、机在进行运算时是按照二进制规则进行的,对4位二进制位二进制数是按逢数是按逢16进位的,不符合十进制的运算规则,当运算出现进进位的,不符合十进制的运算规则,当运算出现进位或位或4位二进制数大于位二进制数大于1001B(9)时,就会导致错误结果。)时,就会导致错误结果。 类型指令格式操作说明机器码BCD码加法的十进制调整指令DA AD4 例如,如下例如,如下BCD码运算码运算38 +79 结果为结果为B1H,对应的十进制数是,对应的十进制数是178,显示结果出错。正确,显示结果出错。正确的结果应是的结果应是117。因此。因此BCD码加法运算后必须用码加法运算后必须用DA指令进行调整指令进行调整 M

55、OV A,#38H;(A)=00111000B ADD A,#79H ;00111000B+01111001= 10110001ADA A ;调整调整(A)=00010111,(CY)=1 38+) 7910110001 00111000+)01111001 1117 (000100010111)例例3:两个两个BCD数在外部数在外部RAM的的2031H,2030H和和2041H,2040H中中, 求其和,结果放在内部求其和,结果放在内部32H31H30H中。中。 (2031H)|(2030H)+ (2041H)|(2040H) (32H)| (31H) | (30H)例例3:两个两个BCD数

56、在外部数在外部RAM的的2031H,2030H和和2041H,2040H中中, 求其和,结果放在内部求其和,结果放在内部32H31H30H中。中。 (2031H)|(2030H)R2+ (2041H)|(2040H)A (32H)| (31H) | (30H)例例3:两个两个BCD数在外部数在外部RAM的的2031H,2030H和和2041H,2040H中中, 求其和,结果放在内部求其和,结果放在内部32H31H30H中中。ADD A , R2DA AMOV 30H, A ADDC A , R2DA AMOV 31H,A MOV A,#00H ADDC A,#00H MOV 32H,A (20

57、31H)|(2030H)R2+ (2041H)|(2040H)A (32H)| (31H) | (30H)例例3:两个两个BCD数在外部数在外部RAM的的2031H,2030H和和2041H,2040H中中, 求其和,结果放在内部求其和,结果放在内部32H31H30H中。中。 MOV DPTR,#2030HMOVX A , DPTRMOV R2 , AMOV DPTR,#2040HMOVX A ,DPTRADD A , R2DA AMOV 30H, AMOV DPTR,#2031HMOVX A, DPTRMOV R2 ,AMOV DPTR,#2041HMOVX A , DPTRADDC A ,

58、 R2DA AMOV 31H,AMOV A,#00HADDC A,#00H MOV 32H,A (2031H)|(2030H)+ (2041H)|(2040H) (32H)| (31H) | (30H) 2减法指令减法指令 (1)带借位减法指令)带借位减法指令 说明:该类指令对说明:该类指令对PSW的的CY,AC,OV,P标志有影响。标志有影响。 (2)减)减1指令指令 仅仅DEC A 指令影响指令影响PSW的的P位。位。类型指令格式操作说明机器码带借位的减法指令SUBB A ,#dataA(A)-#data-(CY)94#dataSUBB A, directA(A)-(direct)-(CY

59、) 95directSUBB A,RnA(A)-(Rn)-(CY)10011rrrSUBB A,RiA(A)-(Ri)-(CY)1001011i减1指令DEC AA(A)-100010100DEC directdirect(direct)-115directDEC RnRn(Rn)-100011rrrDEC Ri(Ri)(Ri)-10001011i 例:设(例:设(A)=98H,(,(R3)=6AH,(,(CY)=1。执行指令。执行指令SUBB A,R3,分析执行结果及对各标志位的影响?,分析执行结果及对各标志位的影响? 结果:(结果:(A)=2DH 标志位:(标志位:(CY)=0, (AC)

60、=1,(,(P)=0。 看作无符号数,结果正确;看作无符号数,结果正确; 如果看作带符号数,一个负数减去一个正数,结果为正如果看作带符号数,一个负数减去一个正数,结果为正数,结果错误。数,结果错误。CPU产生溢出(产生溢出(OV)=1,指出错误。,指出错误。 (A) =1 0 0 1 1 0 0 0 (R3)=0 1 1 0 1 0 1 0 -) (CY)= 1 (A) =0 0 1 0 1 1 0 1 98H 6AH-) 1 2DH 例:有两个无符号16位二进制数分别存于30H,31H和32H,33H单元中,求两数差并将差存于32开始的单元中(高字节在高地址单元中)。 MOV A,30HCL

温馨提示

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

最新文档

评论

0/150

提交评论