第3章 AT89C51单片机指令系统.ppt_第1页
第3章 AT89C51单片机指令系统.ppt_第2页
第3章 AT89C51单片机指令系统.ppt_第3页
第3章 AT89C51单片机指令系统.ppt_第4页
第3章 AT89C51单片机指令系统.ppt_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

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

文档简介

1、,第3章 AT89C51单片机指令系统,教学目标 3.1 指令格式及常用符号 3.2 AT89C51的寻址方式 3.3 AT89C51指令系统 3.4 常用伪指令 3.5 实训指导 本章小结 思考题与习题,教学目标,通过本章教学,要求达到以下目标: 1. 理解AT89C51指令的基本格式和各组成部 分的功能。 2. 了解AT89C51指令分类情况。 3. 熟悉和理解指令系统中常用符号的书写形 式及含义。 4. 了解AT89C51的7种寻址方式的形式、寻址 范围和特点。 6. 熟悉和掌握AT89C51的基本汇编指令的 形式、功能和简单应用。,3.1 指令格式及常用符号,3.1.1 机器指令的编码

2、格式,1. 单字节指令,(1) 8位编码仅为操作码:,指令 INC A,编码为04H。A隐含在操作码中。,注意:指令中“A”表示累加器,而“ACC”表示 累加器对应的地址(E0H)。,0000 0100,例: INC A,高5位为操作码,低3位为存放操作数的寄存器编码。如:MOV A,R0,(2) 8位编码含有操作码和寄存器编码,编码为1010 1000B,可表示为A8H(低3位000为寄存器R0的编码)。,1010 1000,MOV A,R0,寄存器号,2. 双字节指令,第一字节表示操作码,第二个字节表示参与操作的数据或数据存放的地址。 如:MOV A,#60H,编码为0111 0100B,

3、0110 0000B。其十六进制表示为74H,60H。,操作数,0110 0000,MOV A,#60H,操作码,0111 0100,3. 三字节指令,指令的第一字节表示该指令的操作码,后两个 字节表示参与操作的数据或数据存放的地址。 如:MOV 60H,#70H,编码为0111 0101B,0110 0000B,0111 0000B。 可表示为75H,60H,70H。,操作数,0110 0000,MOV 60H,#70H,操作码,0111 0101,0111 0000,3.1.2 符号指令的格式,一般格式: 操作助记符 目的操作数,源操作数;注释,注:在两个操作数的指令中,通常目的操 作数写

4、在左边,源操作数写在右边。,操作数个数,无操作数,单操作数,两操作数,三操作数,如:ANL A,40H ANL为“与”操作的助记符,立即数“40H”为 源操作数,累加器A为目的操作数。,注:在指令中,多数情况下累加器用“A”表示,仅 在直接寻址方式中,用“ACC”表示。累加器在SFR 区的具体地址E0H。,MOV A,30H ;30HA MOV ACC,30H ;机器码为75H、E0H、30H,3.1.3 符号指令及其注释中常用的符号,Rn(n=07)当前工作寄存器组中的寄存器 之一; Ri(i=0,1)当前工作寄存器组中的R0或R1; 间址寄存器前缀; #data 8位立即数; #data1

5、6 16位立即数; Direct 片内低128个RAM单元地址及SFR地址 (可用符号名称表示);,Addr11 11位目的地址; Addr16 16位目的地址; Rel 补码形式表示的8位地址偏移量, 值在128127范围内; Bit 片内RAM位地址、SFR的位地址 (可用符号名称表示); / 位操作数的取反操作前缀; () 表示 地址单元或寄存器中的 内容; 箭头右边的内容送入箭头左边的单元中。,3.2 AT89C51的寻址方式,1. 寻址方式 寻找操作数或指令的地址的方式。,2. 寻址方式的种类 共有7种,即:寄存器寻址、直接寻址、 寄存器间接寻址、立即寻址、 变址寻址、 相对寻址和位

6、寻址,如表3.1所示。,若不特别声明,我们后面提到的寻址方式 均指源操作数的寻址方式。,表3.1 寻址方式及对应的存储器空间,1. 操作数在寄存器中,指令中直接给出该寄存器名称。具有较高的传送和运算速度。,3.2.1 寄存器寻址,例3.1 MOV A,R0 ; A (R0),2. 寻址空间,R0R7,A,B(AB),DPTR,例3.2 MOV A,R0 ;设(R0)=30H,0工作寄存器组,00H R0,7FH,30H,30H,80H,FFH,A,E8H,FFFFH,MOV A,R0,0000H,ROM,SFR,RAM,结果:(A)=30H,1. 操作码后的字节是操作数的地址,操作 数本身放在

7、该地址指示的存储单元中。,3.2.2 直接寻址,2. 寻址空间,片内RAM( 128字节),SFR(常采用符号形式),如:MOV A,50H,例3.3 MOV A,60H ;设(60H)=2EH,60H,7FH,2EH,2EH,80H,FFH,A,FFFFH,MOV A,60H,0000H,ROM,SFR,RAM,结果:(A)= 2EH,1.寄存器中内容为地址,从该地址取操作数。,3.2.3 寄存器间接寻址,2.寻址空间,片内RAM,片外RAM,3.间址寄存器,R0或R1,DPTR,片内RAM,片外RAM(256字节) P2口线,页面方式,MOV,MOVX,例3.4 MOV A, R0 ; A

8、 (50H) 设(R0)=50H, (50H)= 6EH,E6H,FFFFH,MOV A, R0,0000H,ROM,结果:(A)=6EH,50H,7FH,6EH,6EH,80H,FFH,A,SFR,RAM,50H,R0,1. 编码中直接给出操作数。操作码之后的 操作数称为立即数。,3.2.4 立即寻址,3. 寻址空间:ROM,2. 立即数 单字节、双字节 标识: 源操作数,例3.5 MOV A, #70H ;,7FH,70H,80H,FFH,A,FFFFH,MOV A,#70H,0000H,ROM,SFR,RAM,结果:(A)= 70H,以一个基地址加上一个偏移量地址形成 操作数地址。,3.

9、2.5 变址寻址,3. 寻址空间:ROM,基址寄存器:,DPTR,PC,偏移量寄存器:A,2. 操作数地址:,例3.6 MOVC A, A+DPTR ;,7FH,0FH,80H,FFH,A,FFFFH,MOVC A, A+DPTR,0000H,ROM,SFR,RAM,结果:(A)=88H,93H,88H,00H,24H,2400H+0FH= 240FH,240FH,DPL,DPH,88H,1. 以PC当前值为基准,加上指令中相对偏移量 rel 形成目标地址。,3.2.6 相对寻址,PC,2. 目标地址:,+,rel,3. PC的当前值:读出该2字节或3字节的 跳转指令后,PC指向的下条指令的地

10、址。,4. rel 取值范围是:128127。(补码),例3.7 JC rel ;设 rel75H,PSW.7为 “1”,7FH,1000 0000,80H,FFH,PSW,1002H,JC rel,1000H,ROM,SFR,RAM,结果: 程序转向1077H单元,1001H,1077H,1000H+02H= 1002H,PC值,字节数,1002H+75H= 1077H,当前PC值,新PC值,1. 对位地址中内容进行操作。操作的是8位 二进制数中的某一位。,3.2.7 位寻址,SFR的寻址位常用符号位地址表示,如: CLR ACC.0 MOV 30H,C,2. 寻址空间,片内RAM中位寻址区

11、,SFR中的可寻址位,3.3.1 数据传送类指令(29条),一般不影响PSW状态,传送类指令分成两大类,1. MOV,一般传送 2. 非MOV,特殊传送, 如:MOVC、MOVX、PUSH、POP、 XCH、XCHD及SWAP。,3.3 AT89C51指令系统,3.3.1 数据传送类指令,图 3.1 AT89C51传送指令示意图,(1) 16位传送指令,将源操作数data16(通常是地址常数) 送入目的操作数DPTR中。,例3.8 MOV DPTR,#5678H,1. 一般传送指令,结果为: (DPH)= 56H,(DPL)= 78H。,MOV DPTR,# data16,(2) 8位传送指令

12、,注: (1) data(立即数)不能用作目的操作数; 2) 源操作数与目的操作数不能相同(除 direct外); 3) 寄存器寻址与寄存器及其间址间不能相互传送。,传送关系,目的操作数,源操作数,A,A,Rn,Rn,direct1,direct2,Ri,Ri,#data,1) 以A为目的操作数的指令,例:若(R1)= 30H,(30H)= 68H 执行 MOV A,R1,MOV A,,Rn,direct,Ri,#data,结果:(A)= 68H。,2) 以Rn 为目的操作数的指令,例:若(60H)= 30H 执行 MOV R6,60H,MOV Rn,,A,direct,#data,结果:(R

13、6)= 30H。,3) 以direct 为目的操作数的指令,例:若(R0)=30H,(30H)=25H 执行MOV 30H,R0 指令,结果:(30H)=25H。,MOV direct,,Rn,direct1,Ri,#data,A,4) 以Ri为目的操作数的指令,例3.9 若(R1)=56H,(A)=35H 执行 MOV R1,A 指令,结果:(56H)=35H,MOV Ri,,A,direct,#data,(1) ROM查表指令,2) MOVC A,A+PC 以PC的当前值与偏移量之和作为程序存储 器地址,将该地址单元的内容传送到A。 指令执行后PC的内容不变。,2. 特殊传送指令,1) M

14、OVC A,A+DPTR 以DPTR与偏移量之和作为程序存储器地 址,将该地址单元的内容传送到A。指令 执行后DPTR的内容不变。,(2) 读、写片外RAM 指令,1) 读片外RAM MOVX A,DPTR MOVX A,Ri,2) 写片外RAM MOVX DPTR,A MOVX Ri,A,(3) 堆栈操作指令,3) 操作指令 PUSH direct POP direct,1) 原则:向地址高端生长,后进先出,2) SP :指向栈顶(活动端),复位值07H,例3.10 若(SP)=07H,(40H)=88H 执行 PUSH 40H 指令,结果:(SP)=08H,(08H)=88H。,(4) 数

15、据交换指令,例3.11 若(R0)=67H,(A)=45H。 执行 XCH A,R0 指令,交换类指令, 传送是双向的,1) 字节交换指令,XCH A,,Rn,direct,Ri,结果:(A)=67H,(R0)=45H。,2) 半字节交换指令,例:若(R0)30H,(30H)67H, (A)20H。 执行 XCHD A,R0 后, (A)27H,(30H)60H。,XCHD A,Ri SWAP A,例3.12 若(A)30H,执行SWAP A 后, (A)03H。,课堂师生互动,试按下列要求传送数据 1. 将R5中的数据传送到50H。 2.将R7中的数据传送到R6。 3.将立即数40H传送到以

16、R0中内 容为地址的存储单元中。 4.将片外RAM50H中的数据传 送到片内RAM40H单元中。 5.将R1中的数据传送到以R0中 内容为地址的存储单元中。,MOV 50H, R5,MOV A, R7 MOV R6, A,MOV A, #40H MOV R0, A,MOVX A, 50H MOV 40H, A,MOV A, R1 MOV R0, A,表 3.2 数据传送类指令一览表,表 3.2 数据传送类指令一览表(续),3.3.2 算术运算类指令(24条),1. 加、减、乘、除及加1和减1等 2. 多数以A为源操作数,同时又使A为目的 操作数。 3. PSW中的OV、CY、AC, Z,CY,

17、无符号整数多字节加、减法、移位等 OV,可方便的控制补码运算 AC,用于BCD码运算。,1. 加法指令,(1) 不带进位的加法指令,ADD A,,Rn,direct,Ri,#data,注:D7、D6位只有一个有进位时,(OV)=1。如:两个正数相加结果为负数或两个负数相加结果为正数时属于错误结果,此时(OV)=1。,例3.13 若(A)=84H,(30H)=8DH, 执行指令 ADD A,30H 之后,由于:,结果:(A)=11H,(CY)=1,(AC)=1,(OV)=1 (D7有进位,D6无进位),(P)=0。,CY,AC,(2) 带进位加法指令,源操作数与A的内容相加再与CY相加, 结果送

18、入目的操作数A中。,ADDC A,,Rn,direct,Ri,#data,CY是在该指令执行之前已存在的值。,A-A+Rn+CY 影响:CY、AC、OV和P,( 3) 加1指令,源操作数的内容加 1 ,结果再送回原单元。 这些指令中仅 INC A 影响P标志。,INC,Rn,direct,Ri,DPTR,A,(4) 十进制调整指令,对A中刚进行的2个BCD码加法的结果调整。,DA A,1) 当A中低4位数出现了非BCD码或低4位 产生进位(AC=1),则在低4位加6。,2) 当A中高4位数出现了非BCD码或高4位 产生进位(CY=1),则在高4位加6。,调整后,CY表示结果的百位值。,例3.1

19、4 若(CY)0,A和R2内容见下式。 执行指令: ADD A,R2 DA A,结果:1 23( BCD数),2. 减法指令,(1) 带借位减法指令,SUBB A,,Rn,direct,Ri,#data,影响:CY、AC、OV和P,注:D7、D6位只有一个有借位时,(OV)=1。如要用此组指令完成不带借位减法,只需先 清CY为 0 。,例3.15 若(A)=C9H,(R2)=54H,(CY)=1, 执行指令 SUBB A,R2 之后,由于:,即:(A)=74H,(CY)=0,(AC)=1, (OV)=1 (位6有借位,位7无借位), (P)=0。,(2) 减1指令,操作数内容减 1 ,结果再送

20、回原单元。 仅 DEC A 影响P标志。其余指令都不 影响标志位的状态。,DEC,Rn,direct,Ri,A,3. 乘法指令,MUL AB,例3.16 若(A)=50H,(B)=A0H,执行指令 MUL AB 之后,(A)=00H,(B)=32H, (OV)=1,(CY)=0。,当乘积大于FFH时,溢出标志位(OV)=1。标志CY总是被清0。,A,B,A,B,乘数,被乘数,积,4. 除法指令,例3.17 若(A) = FBH (251),(B) = 12H (18), 执行指令 DIV AB 之后,(A) = 0DH, (B) = 11H,(OV) = 0,(CY) = 0。,DIV AB,

21、除数为0,商的A和B内容不确定,且(OV)=1 。 标志CY总是被清0。,A,B,A,B,除数,被除数,整数部分,商,余数部分,表 3.3 算术运算类指令一览表,表 3.3 算术运算类指令一览表(续),3.3.3 逻辑运算与循环类指令(24条),1. 逻辑运算:与、或、异或、清0和取反,5. A清0操作对P标志有影响。,2. 对A循环移位,3. 方向:左、右,4. CY:带、不带,1. 逻辑与指令,(1) 源操作数与直接地址单元内容相与,例3.18 若(A)=C3H,(R0)=AAH,执行指令 ANL A,R0 之后,(A)=82H。,ANL direct,,A,#data,ANL A,,Rn

22、,direct,Ri,#data,(2) 源操作数与累加器A的内容相与,2. 逻辑或,例3.19 若(A)=C3H,(R0)=55H,执行指令 ORL A,R0 之后,(A)=D7H。,(1) 源操作数与直接地址单元内容相或,ORL direct,,A,#data,ORL A,,Rn,direct,Ri,#data,(2) 源操作数与累加器A的内容相或,3. 逻辑异或,例3.20 若(A)=C3H,(R0)=AAH,执行 指令XRL A,R0 之后,(A)=69H。,(1) 源操作数与直接地址单元内容相异或,XRL direct,,A,#data,XRL A,,Rn,direct,Ri,#da

23、ta,(2) 源操作数与累加器A的内容相异或,4. 累加器清0和取反,(2) 把A的内容取反,结果仍在A中。,CPL A,CLR A,例3.21 若(A)=A5H,执行指令 CLR A 之后,(A)=00H。,(1) 把A的内容清 0 ,结果仍在A中。,5. 累加器循环移位指令,(1) A的内容循环右移1位。 RR A (2) A的内容连同CY位循环右移1位。 RRC A (3) A的内容循环左移1位。 RL A (4) A的内容连同CY位循环左移1位。 RLC A,“累加器A内容乘2”的任务可以利用指令 RLC A方便地完成。,例3.22 若(A)= BDH = 1011 1101B, (C

24、Y)0。 执行指令 RLC A,结果为:17AH(378)2BDH(189)。,A,PSW,0,1,0,1,1,1,1,0,1,表3.4 逻辑运算与循环类指令一览表,3.3.4 控制转移类指令(17条),(1) 程序执行是顺序的,改变程序执行 顺序,称作程序转移。,(2) 控制程序转移采用转移指令,1)无条件转移 2)条件转移 3)子程序调用与返回,(1) 短跳转指令,1. 无条件转移指令,AJMP addr11 PC先指向AJMP的下一条指令,再把11 位地址码传送到PC100,PC1511不变。,当前PC值(下条指令地址)高5位,可确定32个2KB段之一。因此,AJMP转移范围为包含AJM

25、P下条指令在内的2KB区间。,(2) 长跳转指令,LJMP addr16 指令第二、三字节地址码分别装入PC的高8位和低8位中。,可转到64KB ROM空间的任何单元。,例3.23 若“NEWADD”表示转移目标地址1234H。 执行 LJMP NEWADD 时,目标地址将装入PC 中,程序转向地址 1234H 处运行。,(3) 相对转移指令,SJMP rel 第二字节为 rel,(补码),00H7FH为正向转移,80HFFH(1281)反向转移。,rel 是目标地址的标号,由汇编程序自动计算,并填入指令代码中。,例3.24 若“NEWADD”表示地址0123H,PC当前值为0100H。执行

26、SJMP NEWADD 后,程序转向 0123H 执行此时rel = 0123H(01002) = 21H。,(4) 散转移指令,JMP A+DPTR 转移地址由DPTR和A相加形成。例:,MOV DPTR,#TABLE JMP A+DPTR TABLE:AJMP ROUT0 ;(A)= 00H 时 AJMP ROUT1 ;(A)= 02H 时 AJMP ROUT2 ;(A)= 04H 时 AJMP ROUT3 ;(A)= 06H 时,2. 条件转移指令,(1) 累加器判0转移,例3.25 若A原来为00H,则: JNZ L1 ;程序往下执行 INC A ; JNZ L2 ;程序转向L2 处执

27、行,JZ rel,1) A的内容为0转移,JNZ rel,2) A的内容不为 0转移,(2) 比较不相等转移指令,1)对目的字节与源字节比较,不等则转移; 2)比较时影响进位标志; 3)若目的字节等于源字节,程序将继续往下执行。,CJNE A,direct,rel,CJNE,A,Rn,Ri,,data,rel,(3) 减1不为0转移指令,每执行一次,循环控制单元减1,并判其是否为 0。 1) 不为0,则转移到目标地址继续循环; 2)为0,则结束循环,程序往下执行。,DJNZ Rn,rel,DJNZ direct ,rel,例 3.26 有一段程序如下: MOV 23H,#0AH CLR A L

28、OOP: ADD A,23H DJNZ 23H,LOOP SJMP $ 结果: (A)=10+9+8+7+6+5+4+3+2+1=37H,3. 调用与返回,1) 子程序的短调用和长调用; 2)目标地址形成方式与AJMP和LJMP相似; 3)不影响任何标志 。,(1) 调用指令,ACALL addr11,LCALL addr16,4)对于ACALL,子程序首址在包含当前指令 (即调用指令的下一条指令)的第一个字节在 内的2K字节范围内。,5)对于LCALL,子程序的首址可在64K字节范 围内的任何位置。,例3.27 若(SP)=07H,标号“XADD”表示的实际 地址为0345H,PC的当前值为

29、0123H。执行指令 ACALL XADD 后,(PC)+2=0125H,其低8位 的25H压入堆栈的08H单元,其高8位的01H压入堆 栈的09H单元。(PC)=0345H,程序转向目标地址 0345H 处执行。,RET从堆栈中弹出压入堆栈保护的断点地址,并送入指令计数器PC,返回到断点处继续执行。,(2) 返回指令,RETI专用于中断服务程序返回,除返回中断断点处执行主程序以外,并有清除内部相应的中断状态寄存器(以保证正确的中断逻辑)的功能。,RET,RETI,4. 空操作指令,NOP,不产生任何控制操作,但是: (1) PC的内容加1 ; (2) 消耗1个机器周期 ; (3) 空间上占用

30、一个字节。因此,常用来实现 较短时间的延时。,常用来实现较短时间的延时。,表 3.5 控制转移类指 令一览表,3.3.5 位操作类指令(17条),(1) 特点 :以位为单位进行的各种操作。,(2) 位地址形式: 1) 直接地址(如,0D5H、0E0H等) 2)位编号(如,P1.5、PSW.5等) 3)位名称(如,F0、TR0等) 4)伪指令定义(如,MYFLAG BIT F0)。,位操作指令中,位累加器要用字符“C”表示。 (注:在位操作指令中CY与具体的直接位地址D7H 对应)。,MOV bit,C MOV C ,bit 指定位地址中内容与CY的内容的相互传送。,1. 位传送指令,例3.28

31、 若(CY)=1,(P3)=1100 0101B, (P1)=00110101B。执行以下指令: MOV P1.3,C MOV C,P3.3 MOV P1.2,C 结果:(CY)=0,P3的内容未变,P1的内容 变为 00111001B。,(1) 位清0指令,2. 位状态设置,1)位累加器CY清0,例3.29 若(P1)=1001 1101B。执行指令 CLR P1.3 后,结果为:( P1 )=1001 0101B。,CLR C,CLR bit,2)位地址内容清0,(2) 位置位指令,例3.30 若(P1)=1001 1100B。执行指令 SETB P1.0 后,(P1)1001 1101B

32、。,1)位累加器CY置1,SETB C,SETB bit,2)位地址内容置1,(1) 位逻辑“与”指令,3. 位逻辑运算指令,例3.31 若(P1)=1001 1100B,(CY)1。 执行指令ANL C, P1.0 后, 结果为:P1 内容不变,而(CY)0。,2)位地址单元内容取反后的值与位累加器 内容“与”,1)位地址单元内容与位累加器内容“与”,ANL C,bit,ANL C,/bit,(2) 位逻辑“或”指令,2)位地址单元内容取反后的值与位累加器 内容“或”,1)位地址单元内容与位累加器内容“或”,ORL C,bit,ORL C,/bit,(3) 位取反指令,CPL C,CPL b

33、it,(1) 判CY转移指令,4. 位判跳(条件转移),当(CY)=1,转向PC当前值与rel之和的 目标地址执行,否则程序顺序执行。,JC rel,JNC rel,当(CY)=0,转向PC当前值与rel之和的 目标地址去执行,否则程序顺序执行。,(2) 判bit转移指令,JB bit,rel,JBC bit,rel,JNB bit,rel,当( bit )=1,转向PC当前值与rel之和的目标地址执行,否则程序顺序执行。,当( bit )=0,转向PC当前值与rel之和的目标地址执行,否则程序顺序执行。,与上面指令相同,但还有将该位清0功能。,课堂师生互动,判断下列指令是否正确,若错误请改正

34、并说明错误原因。 1. MOV #20H,A 2. CJNE R0,#20H 3. MOV DPTR, A 4. DIV A,R0 5. RRC B,错误,立即数不能作目的 操作数。可改为: MOV A,#20H。,错误,比较转换指令形式如下: CJNE (目的操作数),(源操作数),rel 可见CJNE R0,#20H指令中缺少偏移量rel。可改为:CJNE R0,#20H,rel (-128rel127)。,错误,DPTR用作设置外部RAM的间址寄存器,该指令原意是通过A写外部RAM操作。写外部RAM应用“MOVX”助记符,故正确的指令是 MOVX DPTR,A。,错误,除法操作只能在A、

35、B两个寄存器组合中进行,而不能在A、R0组合寄存器中进行。 正确的应是:DIV AB ;A(商)B(余数)(A)(B)。,错误,“RRC”是带进位循环右移一位指令的助记符,循环移位必须在A中进行。 正确的指令应为:RRC A ;A带进位循环右移一位。,表 3.6 位操作类指令一览表,3.4 常用伪指令(8条),1. 起始地址定义伪指令ORG 格式:标号: ORG 16位地址或地址符号 功能:指定汇编后的目标程序或数据块在程序 存储器中存放的起始地址。 其中的“标号”为可选项,常省略。16位地址即是指定的起始地址,也可用地址符号来代替。ORG伪指令通常用在一段程序的开头。 例如: ORG 010

36、0H,2. 汇编结束伪指令 END,格式:标号: END 功能:汇编语言源程序结束标志,用在程序的结尾,表示程序已经结束。汇程序程序对END后面的指令不再汇编。 一个程序只能有一个END伪指令,即使有多个,也只有第一个END指令有效,因为第一个END后面的程序都不会被汇编。,3. 赋值伪指令EQU,格式: EQU 功能:将数据或地址符号表示的地址值赋给符号。 EQU伪指令中的“符号”必须先赋值后使用,故该语句通常放在源程序的开头。“符号”通常以字母开头,且不能与特殊功能寄存器名或指令助记符同名。 例3.32 AA EQU R1 ;用符号AA表示寄存器R1 K1 EQU 10H ;用符号K1表示

37、8位数据40H DL EQU 1F00H ;用符号DL表示16位数据1F00H,4. 数据地址赋值伪指令DATA,格式: DATA 功能:与EQU类似,也是将右边“表达式”的值赋给左边的“符号”。 DATA伪指令与EQU伪指令的主要区别在于:EQU定义的“符号”必须先定义后使用,而DATA定义的“符号”没有这种限制,故使用更灵活。,5. 定义字节伪指令DB,格式:标号: DB 功能:把“字节数据列表”中的若干个8位字节数 据依次存放到指定地址的存储单元中。 例3.33 TABLE:DB 45H,73,01001001b,5 DB ,6. 定义字伪指令DW,格式:标号: DW 功能:与DB伪指令

38、类似,用来定义若干个16位的字数 据。16位数据在存储器中存放要占两个存储单元。89C51单片机系统中,高8位数据在前(低地址单元中),低8位在后(高地址单元中)。 例3.34 ORG 1000H TAB:DW 1234H,78H 汇编后,则程序存储器: (1000H)=12H (1001H)=34H (1002H)=00H (1003H)=78H,7. 位地址定义伪指令BIT,格式: BIT 功能:把“位地址”赋给“符号”。因此,经BIT语句定义过的“符号”可作为位地址来使用。其中“位地址”可采用多种表示形式。 例3.35 A10 BIT 00H FLG BIT F0 AAA BIT P1.

39、0,8. 定义存储空间伪指令DS,格式:标号: DS 功能:从指定的地址单元开始预留若干个存储 单元。预留的存储单元的数量由“表达式”的值确定。 例3.36 ORG 0100H DS 08H DB 24H 汇编程序对上述程序进行汇编时,碰到DS语句便自动从指定的地址0100H开始预留8个连续的存储空间,故字节数据24H存放在0108H单元中。,3.5 实训指导,实训3.1 熟悉并使用传送类指令 1. 实训目的 (1)了解实验设备的安装和分布。 (2)熟悉实验设备的操作和使用。 (3)掌握89C51传送类指令。 2实训器材 单片机开发设备一套。 3. 实训步骤 (1)仔细观察单片机开发实验设备,

40、认识印制线路板上的程序存储器、数据存储器、各主要接口电路及健盘、开关、数码管、显示器等输入、输出设备。,(2)根据开发机使用说明,学习开发机的基本操作:开机、复位、数据存储器和特殊功能寄存器数据的输入、修改和显示、程序的输入、调试及运行等。 (3)观察复位键的功能:按下复位键,将R0R7、A、PSW、B和SP都送入十六进制数FFH,再按下复位键后,读出上述寄存器内容,观察其结果有何变化。可反复操作两次。 (4)学习MOVX和XCH指令的功能,可参考以下步骤:, 输入下列程序。 ORG 2000H MOV A,#55H MOV DPTR,#0020H MOVX DPTR,A MOV 20H,#0

41、AAH XCH A,20H MOVX DPTR,A SJMP $, 运行程序前观察DPTR、A、内部RAM 20H单元和外部RAM 20H单元的值,然后单步运行上述程序,再重新观察上述寄存器和存储器单元内容的变化。 分析程序的运行结果,说明该程序的功能。,(5)学习堆栈指令的功能,可参考以下步骤:, 输入下列程序。 ORG 2000H MOV A,#55H MOV PSW,0CCH PUSH ACC PUSH PSW MOV A,#66H MOV PSW,#77H POP PSW POP ACC SJMP $, 按复位键,观察A、PSW、SP、07、08和09单元的内容,再单步运行上述程序,重

42、新观察上述寄存器和堆栈区内容的变化。 5. 思考与讨论 (1)复位键的作用和功能。 (2)堆栈有什么作用? 6. 编写实训报告,实训3.2 熟悉并使用算术逻辑操作类指令,1. 实训目的 (1)熟悉算术运算类指令。 (2)熟悉逻辑运算类指令。 (3)掌握算术运算类指令对标志位的影响。 2. 实训内容 学习加法指令及查表指令的应用。 3. 实训步骤 (1)学习加法指令,可参考以下步骤: 设30H和32H开头分别存放两个16位无符号二 进制数(低8位在前,高8位在后),输入下面完成 两个数相加的程序。,ORG 2000H MOV R0,#30H MOV R1,#32H MOV A,R0 ADD A,

43、R1 MOV R0,A INC R0 INC R1 MOV A,R0 ADDC A,R1 MOV R0,A SJMP $, 阅读上述程序,分析程序执行过程。将被加数1122H和加数3344H分别送入内部RAM的相应单元,即(31H)=33H、 (30H)=44H、 (33H)=11H和 (32H)=22H。 运行程序,观察31H和30H单元中两数和以及进位CY。, 将被加数和加数分别改为8899H和 AABBH,并送入相应存储单元,然后再观察两数 和以及进位CY。 人工分别求出以上数据之和,并与程序运行 结果比较。 (2)学习MOVC查表指令,可参考以下步骤: 输入下列完成(09)平方值的程序

44、。,ORG 2000H ADD A,#02H MOVC A,A+PC SJMP $ DB 00H,01H DB 04H,09H DB 10H,19H DB 24H,31H DB 40H,51H END, 先给累加器A中送入一个数3,然后分别采用单步和连续运行方法执行上面程序,并观察累加器A中内容是否为3的平方。 给累加器A分别重新赋初值4、6、9并运行上述程序,同时检查累加器A中内容是否为初值的平方。,(3)学习移位指令,可参考以下步骤:, 以下程序是将无符号数扩大6倍程序。设扩 大6倍的值不超过255。输入下列程序: ORG 2000H CLR C MOV A,30H RL A RL A A

45、DD A,30H ADD A,30H MOV 30H,A SJMP $ END, 给30H单元送一初值,注意不要超过42。运 行程序再观察30H单元的内容。 分别重新给30H在042中赋初值,检查30H 单元的内容,分析程序执行前后的结果是否吻合。 4. 思考与讨论 (1)RL A指令的功能是什么?若将一个数除以 8,程序如何编写? (2)仿照加法指令实验程序,完成三字节数加法。 如编写程序,完成#345678H与#876543H的和。 (3)如果是BCD码作加法,加法指令实验程序 又将怎样改写? 5. 编写实训报告,实训3.3 其他指令功能 1实训目的 (1)熟悉控制转移类指令。 (2)熟悉

46、位操作指令功能。 2. 实训内容 (1)学习位运算指令的应用编程方法。 (2)学习编制数据块传送程序。 3实训步骤 (1)输入位运算源程序; (2)在程序“SJMP $”指令处设置断点,查看结果。,(3)输入数据块传送程序; (4)单步执行该程序,R0、DPTR、R7内容的 变化。 (5)连续运行程序,并检查外部RAM 1000H1009H单元的内容是否为AAH,若是,则 表示程序运行正确。 4. 参考源程序:(见后附) 5. 编写实训报告,总结学习与实践体会。,(1)位运算源程序 MOV C,00H ANL C,/01H MOV 02H,C MOV C,00H CPL C ANL C,01H

47、 ORL C,02H MOV 02H,C SJMP $,(2)数据块传送程序 ORG 0030H MOV R0,#30H MOV R7,#0AH MOV DPTR,#1000H LP:MOV A,R0 MOVX DPTR,A INC R0 INC DPTR DJNZ R7,LP SJMP $ END,本章小结,1. 程序是由指令按序组成的。指令用来指示计算机进行何种操作或运算的命令代码。AT89C51单片机指令共有7种寻址方式,分别是:立即寻址、直接寻址、寄存器寻址、寄存器间址、位寻址、变址寻址和相对寻址。,2. 一台计算机所能识别的全部指令的集合称为指令系统。AT89C51指令系统共有111条基本指令。按指令长度分有单字节、双字节和三字节指令。按指令周期分有单周期、双周期和四周期指令。按功能,可分为数据传送、算术运算、逻辑运算及移位、控制转移和位操作指令

温馨提示

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

评论

0/150

提交评论