第3章指令系统与汇编语言程序设计.ppt

上传人:文库蛋蛋多 文档编号:2312877 上传时间:2023-02-11 格式:PPT 页数:52 大小:3.39MB
返回 下载 相关 举报
第3章指令系统与汇编语言程序设计.ppt_第1页
第1页 / 共52页
第3章指令系统与汇编语言程序设计.ppt_第2页
第2页 / 共52页
第3章指令系统与汇编语言程序设计.ppt_第3页
第3页 / 共52页
第3章指令系统与汇编语言程序设计.ppt_第4页
第4页 / 共52页
第3章指令系统与汇编语言程序设计.ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《第3章指令系统与汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《第3章指令系统与汇编语言程序设计.ppt(52页珍藏版)》请在三一办公上搜索。

1、3.1 寻址方式 3.2 指令系统 3.3 汇编语言程序的汇编与调试 3.4 汇编语言程序设计举例 3.5 计算机中的数据编码,第3章 指令系统与汇编语言程序设计,3.1 寻址方式,寻址方式是指在指令执行过程中,如何找到操作数有效地址的方法。绝大多数指令执行时都需要使用操作数,而操作数可以指一个直接参与指令运行的数据,也可以指一个寄存器,还可以指一个存储器单元。MCS-51单片机指令系统提供了7种不同的寻址方式。,一、寻址方式见动画五寻址方式。,立即寻址方式 直接寻址方式 寄存器寻址方式 寄存器间接寻址方式 相对寻址方式 变址寻址方式 位寻址方式,3.1 寻址方式,寻址方式,3.2 指令系统,

2、数据传送指令(29)算术运算指令(24)指令系统 逻辑运算指令(24)程序控制指令(22)位操作指令(12),描述指令的一些符号的意义:,数据传送指令实现计算机内不同存储区域之间的信息传递。MCS-51指令系统中共有29条数据传送指令,不同存储单元之间的数据传递如图所示。,3.2 指令系统,1.内部RAM、特殊功能寄存器之间的数据传送(使用“MOV”作为操作码助记符,共有16条)2累加器与外部RAM之间的数据传送(这类指令的操作码助记符为“MOVX”,对外部RAM单元只能使用间接寻址方式,即可以使用DPTR和Ri作间址寄存器。)3程序存储器中的数据传送到累加器A的指令(这类指令的数据传送是单向

3、的,只能从程序存储器向累加器传送数据。指令助记符为“MOVC”,共两条指令。)4内部RAM单元与累加器A之间数据交换指令(包括三种指令:字节交换指令、半字节交换指令、累加器A的高4位与低4位交换指令。)5堆栈操作指令(包括进栈、出栈指令),3.2 指令系统,例1 分析下列指令的寻址方式以及指令执行后存储单元和寄存 器的内容。MOV A,#20H;目的操作数采用寄存器寻址,A=20H MOV 32H,#23H;目的操作数采用直接寻址,(32H)=23H MOV R4,#2FH;目的操作数采用寄存器寻址,R4=2FH MOV R0,#5AH;目的操作数采用寄存器间接寻址,(R0)=5AH MOV

4、DPTR,#203FH;目的操作数采用寄存器寻址,DPTR=203FH,(1)立即数传送指令。MOV A,#data;Adata MOV direct,#data;(direct)data MOV Rn,#data;Rn data MOV Ri,#data;(Ri)data MOV DPTR,#data16;DPH data 高8位,DPLdata 低8位,3.2 指令系统,例2 分析指令的寻址方式和执行结果 MOV P2,R2;目的操作数采用直接寻址,源操作数为寄存器寻址;P2=R2,该指令等价于MOV 0A0H,R2 MOV 2FH,30H;两个操作数均采用直接寻址,(2FH)=(30H)

5、MOV 20H,R1;目的操作数为直接寻址,源操作数为寄存器间接寻址,执行 结果:(20H)=(R1),(2)内部RAM 单元之间的数据传送指令。MOV direct1,direct2;(direct1)(direct2)MOV direct,Rn;(direct)Rn MOV Rn,direct;Rn(direct)MOV direct,Ri;(direct)(Ri)MOV Ri,direct;(Ri)(direct),3.2 指令系统,例3 分析下列指令的寻址方式和执行结果 MOV A,R5;两操作数均采用寄存器寻址,A=R5 MOV A,0F0H;原操作数为直接寻址,A=(0F0H)MO

6、V A,R1;源操作数为寄存器间接寻址,A=(R1),(3)与累加器有关的数据传送指令 MOV A,Rn;ARn MOV Rn,A;RnA MOV A,direct;A(direct)MOV direct,A;(direct)A MOV A,Ri;A(Ri)MOV Ri,A;(Ri)A,3.2 指令系统,这类指令的操作码助记符为“MOVX”,对外部RAM单元只能使用间接寻址方式,即可以使用DPTR和Ri作间址寄存器。MOVX A,DPTR;A(DPTR)MOVX DPTR,A;(DPTR)A MOVX A,Ri;A(Ri)MOVX Ri,A;(Ri)A例3.4 已知DPTR=2000H,片外R

7、AM(2000H)=05H,R1=0F0H,片外RAM(0F0H)=0A0H。MOVX A,DPTR;指令执行后,A=05H MOVX R1,A;指令执行后,片外RAM(0F0H)=05H,3.2 指令系统,这类指令助记符为“MOVC”,共两条指令。MOVC A,A+DPTR;A(ADPTR)MOVC A,A+PC;A(APC)例3.5 把累加器A中的十六进制数字00H0FH转换成ASCII码。INC A;调整偏移量(数据表的首地址与MOVC指令间隔1个单元)MOVC A,A+PC;查表取数RET;子程序返回DB 30H,31H,32H,33H,34H;在程序存储器中顺序存放DB 35H,36

8、H,37H,38H,39H;0F的ASCII码DB 41H,42H,43H,44H,45H,46H如果累加器A=0FH,则执行INC A 后,A=10H,程序存储器取出MOVC指令后,PC=2001H,则A+PC=2011H,于是执行 MOVC 指令后A=(2011H)=46H,即将累加器A中十六进制数字F 转换成相应的ASCII 码46H。,3.2 指令系统,(1)字节交换指令,XCH A,Rn;A Rn XCH A,direct;A(direct)XCH A,Ri;A(Ri)(2)半字节交换指令 XCHD A,Ri;A(D3 D0)(Ri)(D3 D0),即累加器A的低4位与Ri间址的内部

9、RAM单元的低4位交换。(3)累加器A的高4位与低4位交换指令SWAP A;A(D3 D0)A(D7 D4),3.2 指令系统,(1)进栈指令PUSH direct;SPSP+1,(SP)(direct)(2)出栈指令POP direct;(direct)(SP),SPSP 1例3.8 已知SP=3AH,DPTR=1234H,则 PUSH DPL;SPSP+1=3BH,(3BH)=34H POP DPH;SPSP+1=3CH,(3CH)=12H 执行指令后,SP=3CH,(3CH)=12H,(3BH)=34H,3.2 指令系统,加减运算指令 算术运算指令 乘除法指令 十进制调整指令,3.2 指

10、令系统,(1)加法指令ADD(Addition),指令格式:ADD A,source指令功能:将累加器和源操作数相加,结果送累加器A,源操作数不变。源操作数有4种寻址方式,所以ADD指令有4种形式:ADD A,Rn;A+RnA ADD A,direct;A+(direct)A ADD A,Ri;A+(Ri)A ADD A,#data;A+dataA例如,A=0C0H,R1=0AFH,执行ADD A,R1 指令。11000000+1010111101101111ADD指令影响程序状态字PSW的CY、AC、OV位。,3.2 指令系统,(2)带进位加法指令ADDC(Addition with Car

11、ry),指令格式与加法指令相同,指令功能是将累加器A、不同寻址方式的源操作数以及进位标志CY相加,运算结果送累加器A。带进位加法指令共4条:ADDC A,Rn;A+Rn+CYA ADDC A,direct;A+(direct)+CYA ADDC A,Ri;A+(Ri)+CYA ADDC A,#data;A+data+CYA ADDC指令对状态标志位的影响同ADD指令。,3.2 指令系统,(3)带借位减法指令SUBB(Subtraction with Borrow),与加法指令相似,目的操作数为累加器A,源操作数有4种寻址方式。所以带借位减法指令有4种形式:SUBB A,Rn;A-Rn-CYA

12、SUBB A,direct;A-(direct)-CYA SUBB A,Ri;A-(Ri)-CYA SUBB A,#data;A-data-CYA 例如,若A=0C0H,R0=7AH,CY=1,执行指令:SUBB A,R0 执行结果为:A=45H,CY=0,AC=1,OV=1。若进行不减借位的减法运算,只需将借(进)位标志CY清零,例如CLR C。带借位减法指令对状态标志位的影响与加法指令相同。,3.2 指令系统,(4)加1指令INC(INCrement destination by one),指令格式:INC dest执行操作是把dest的内容加1,结果送回原单元。加1指令共有以下5种形式:

13、INC A;A+1A INC Rn;Rn+1RnINC direct;(direct)+1(direct)INC Ri;(Ri)+1(Ri)INC DPTR;DPTR+1DPTR 加1指令主要用于修改地址指针和计数次数,它对CY、AC、OV 没有影响。,3.2 指令系统,(5)减1指令DEC(Decrement),减1指令与加1指令格式相似,只有一个操作数,该指令共有4种形式:DEC A;A-1A DEC Rn;Rn1Rn DEC direct;(direct)-1(direct)DEC Ri;(Ri)-1(Ri)这类指令不影响CY、AC、OV。,3.2 指令系统,(6)乘法指令MUL,(7)

14、除法指令DIV 指令格式:DIV AB 指令功能是用A中8位无符号数除以B中8位无符号数,所得商 存入A中,余数存入B中,并将CY和OV置0。只有当除数B=0 时,OV置1,表示除法的结果无意义。例如 A=0F4H,B=0AH,执行指令DIV AB 执行结果为A=18H,B=04H,OV=0,CY=0,3.2 指令系统,指令格式:MUL AB指令功能:把累加器A和寄存器B中的无符号数相乘,所得16位乘积的低位字节存入A中,高位字节存入B中。例如 A=1AH,B=20H,执行指令MUL AB执行结果为A=40H,B=03H,OV=1,CY=0乘法运算影响PSW的状态,进位标志位CY总是清0。,(

15、8).十进制调整指令,功能:把A中的数作为两个BCD数相加之和进行调整,得到 两位正确的BCD数。形式:DA A例如:73-54=19 先执行9AH-54H,得到补熟46H,再执行73H+46H=0B9H,最 后执行调整指令将0B9H加上60H得到19H,即得到正确的 BCD数。,3.2 指令系统,逻辑与运算指令(6条)逻辑或运算指令(6条)逻辑运算指令 逻辑异或运算指令(6条)累加器清0和取反指令(2条)循环移位指令(4条),3.2 指令系统,这类指令的助记符为ANL,ANL A,Rn;ARnA ANL A,direct;A(direct)A ANL A,Ri;A(Ri)A ANL A,#d

16、ata;AdataA ANL direct,A;(direct)A(direct)ANL direct,#data;(direct)data(direct)例如:若A=0A6H,R1=0A4H,执行ANL A,R1 后,A=0A4H逻辑与运算常用作字节清零或位清零。,3.2 指令系统,这类指令的助记符为ORL,ORL A,Rn;ARnA ORL A,direct;A(direct)A ORL A,Ri;A(Ri)A ORL A,#data;AdataA ORL direct,A;(direct)A(direct)ORL direct,#data;(direct)data(direct)例如 把

17、累加器A的低4位传送到P0口的低4位,但P0口的高4位保持不变。PUSH ACC;累加器内容 ANL A,#0FH;屏蔽A 的高4 位 ANL P0,#0F0H;屏蔽P0 口的低4 位 ORL P0,A;传送A 的低4 位 POP ACC;恢复累加器内容逻辑或运算可以实现对某个单元的某些位置1,其余位不变。,3.2 指令系统,XRL A,Rn;ARnA XRL A,direct;A(direct)A XRL A,Ri;A(Ri)AXRL A,#data;AdataA XRL direct,A;(direct)A(direct)XRL direct,#data;(direct)data(dire

18、ct)例如:若A=7FH,R1=0A5H,则执行指令 XRL A,R1后,A=0DAH。逻辑异或运算可以用来比较两个数据是否相等。当两个数据异或结果为0,则表示相等,否则表示不相等。,3.2 指令系统,累加器清0指令:CLR A;0A累加器按位取反指令:CPL A;A 例如:若 A=55H,则执行指令:CPL A;执行结果A=0AAH CLR A;执行结果A=00H,3.2 指令系统,(1)循环右移指令:RR A,功能:将累加器A的内容逐位循环右移一位。如图所示:,例如,若A=6AH=01101010B,执行RR A 指令后,A=35H。,(2)循环左移指令:RL A,功能:将累加器A的内容逐

19、位左移一位,如图所示:,例如,若A=0A3H=10100011B,执行 RL A 指令后,A=47B。,3.2 指令系统,(3)带进位循环右移指令:RRC A,功能:将累加器A的内容和进位位一起逐位循环右移一位,如图所示:例如,若A=4BH=01001011B,CY=1,执行 RRL A 指令后,A=0A5H,CY=1。(4)带进位循环左移指令:RLC A功能:将累加器A的内容和进位位一起逐位循环左移一位,如图所示:此两操作影响CY位。,3.2 指令系统,无条件转移指令 条件转移指令 程序控制指令 调用和返回指令 空操作指令,NOP;PC+1PC操作:该指令不执行任何操作,常用于程序的等待或时

20、间的延迟。,3.2 指令系统,相对转移指令:SJMP rel 绝对转移指令:AJMP addr11无条件转移指令 长转移指令:LJMP addr16;addr16PC 间接转移指令:JMP A+DPTR;A+DPTRPC,操作:PC+2PC,addr11PC(D10D0)例如,若转移指令首地址2456H,即PC=2456H,执行指令AJMP 26AH 后,PC=226AH,程序转向226AH单元执行。,该指令把16位地址addr16装入程序计数器PC,转移范围可达64 KB。LJMP与AJMP指令都是直接寻址方式。,该指令采用基址变址寻址方式,转移地址由数据指针DPTR和累加器A的内容相加形成

21、。例如,设A=A0H,DPTR=45A0H执行指令JMP A+DPTR 后,PC=4640H。,该指令采用相对寻址方式,目的地址=PC+rel。相对转移指令的操作数有两种形式:偏移量和目标地址。如果是目标地址,则在程序汇编时由汇编程序自动计算并填入偏移量。向高地址方向转移:rel=目标地址-(首地址+2)=地址差-2 向低地址方向转移:rel=(目标地址-(首地址+2)补 例如,若转移指令的首地址为0100H,地址标号LOOP所指单元为0120H,则执行指令SJMP LOOP,偏移量为:rel=0120H-(0100H+2)=1EH 指令机器码为801E。,3.2 指令系统,累加器判零转移指令

22、 比较转移指令 条件转移指令 减1不为0转移指令 位控制转移指令,JZ rel;若A=0,则PC+2+relPC,否则PC+2PCJNZ rel;若A0,则PC+2+relPC,否则PC+2PC例如,设A=01H,执行指令:JZ TABLE1;A=0,转向TABLE1,A0,执行下一条指令DEC A;A-1AJZ TABLE2;A=0,转向TABLE2 执行,CJNE A,direct,rel;A(direct),则转移CJNE A,#data,rel;Adata,则转移CJNE Rn,#data,rel;Rndata,则转移CJNE Ri,#data,rel;(Ri)data,则转移,DJN

23、Z Rn,rel;Rn-1Rn,若Rn0,则PC+2+relPC,否则PC+2PCDJNZ direct,rel;(direct)-1(direct),若(direct)0,则PC+3+relPC,否PC+3PC,JC rel;若CY=1,则PC+2+relPC,否则PC+2PCJNC rel;若CY=0,则PC+2+relPC,否则PC+2PCJB bit,rel;若(bit)=1,则PC+3+relPC,否则PC+3PCJNB bit,rel;若(bit)=0,则PC+3+relPC,否则PC+3PCJBC bit,rel;若(bit)=1,则PC+3+relPC,且(bit)=0,否则P

24、C+3PC,绝对调用指令:ACALL addr11 调用和返回指令 长调用指令:LCALL addr16 返回指令,操作过程:PCPC+2;取出指令SPSP+1,(SP)PC(D7 D0)SPSP+1,(SP)PC(D15 D8);断点地址入栈PC(D10 D0)addr11,PC(D15 D11)不变;进入子程序,例如,若SP=60H,PC=2100H,子程序sub1首地址为23A0H。执行下面指令:2100H:ACALL sub1;指令代码是71A0H执行过程:PC=PC+2=2102H,将PC 压栈,即(61H)=02H,(62H)=21H,SP=62H;用指令提供的11 位地址0111

25、0100000B(3A0H)替换PC 的低11位,形成目的地址0010001110100000B,即进入sub1子程序。,操作过程:PCPC+3;取出指令SPSP+1,(SP)PC(D7 D0)SPSP+1,(SP)PC(D15 D8);断点地址入栈PCaddr16;进入子程序,RET;子程序返回指令RETI;中断返回指令操作过程:(SP)PC(D15D8),SP-1SP,(SP)PC(D7 D0),SP-1SP,位传送指令 位操作指令 置位/复位指令 位逻辑运算指令,MOV C,bit;(bit)CYMOV bit,C;CY(bit),例如,把20H位传送到30H位。MOV 10H,C;暂存

26、CY内容MOV C,20H;20H位送CYMOV 30H,C;CY送30H位MOV C,10H;恢复CY 内容,CLR C;0CYCLR bit;0(bit)SETB C;1CYSETB bit;1(bit),例如,P0=01011010B,CY=0,执行指令:SETB C SETB P0.0 CLR P0.3执行结果为:CY=1,P0=01010011B,ANL C,bit;CY(bit)CYANL C,/bit;CY(/bit)CYORL C,bit;CY(bit)CYORL C,/bit;CY(/bit)CYCPL C;(/CY)CYCPL bit;(/bit)(bit),例:设D、E、

27、F代表位地址,计算F=D E=(/D)E+D(/E)。MOV C,EANL C,/D;(/D)E CYMOV F,CMOV C,DANL C,/E;D(/E)CYORL C,F;D(/E)+(/D)E CYMOV F,C;D EF,3.3 汇编语言程序的汇编与调试,一、汇编语言程序的一般组成与设计方法 源程序、汇编程序和目标程序之间的关系为:,1汇编语言的语句种类和格式,3.3 汇编语言程序的汇编与调试,2汇编语言程序设计,所谓汇编语言程序设计,就是使用汇编语言指令来编写计算机程序。一个高质量的汇编语言源程序,应该具备以下几点:结构简明、清晰,便于理解。便于阅读、修改和调试,具有较好的维护性。

28、具有较高的可靠性。程序应该是高效率的。用汇编语言进行程序设计的步骤可以概括如下:分析问题,确定算法。根据算法,画出程序流程图。合理地分配存储空间和寄存器。编写程序。上机调试程序。,3.3 汇编语言程序的汇编与调试,3流程图,在下一节中会着重介绍流程图画法及意义。,3.3 汇编语言程序的汇编与调试,二、伪指令,伪指令又称伪操作,是源程序发送给汇编程序的指令。下面介绍MCS-51汇编程序中常用的伪指令。,三、汇编与调试,3.3 汇编语言程序的汇编与调试,一.汇编语言程序结构,见动画六,3.4 汇编语言程序设计举例,二.汇编语言程序举例,例1 编程实现如图所示的逻辑功能。其中20H、2FH、2AH是

29、位地址。分析:逻辑电路的功能是P1.0=程序如下:MOV C,20H;20H 位送CYANL C,2FH;CY 逻辑与2FH 位 CPL C;CY 取反 ORL C,2AH;CY 逻辑或2AH 位 MOV P1.0,C;结果送P1.0,3.4 汇编语言程序设计举例,例2 比较内部RAM 30H和31H单元中无符号数的大小,使得30H单元存放大数,31H单元存放小数。,分析:先清进位位,然后两数作带借位减法,根据借位标志判断两 数大小。程序流程图如右图所示。程序:START:CLR C MOV A,30H SUBB A,31H JNC DONE;若无借位,即(30H)(31H)时转DONE MO

30、V A,30H XCH A,31H;有借位,即(30H)(31H),交换(30H)与(31H)MOV 30H,ADONE:SJMP DONE,例3 编程统计累加器A中“1”的个数。,分析:首先判断累加器A 是否为0,若A=0,则程序结束;否则,先清CY,再将A 带进位循环左移一位,判断进位位CY 是否为1,为1 则计数,不为1 则继续循环判断A 是否为0,重复这一过程,直至A=0。程序流程图如图所示。,程序:,MOV R1,#0;计数器R1清0 PUSH ACC;保护ACC LOOP1:JZ DONE;若A=0,程序结束 CLR C;进位位清0 RLC A;累加器A带进位循环左移一位 JNC

31、LOOP1;CY=0,则继续循环 INC R1;CY=1,则计数器R1加1 SJMP LOOP1 DONE:POP ACC;恢复ACC SJMP END,任务演示,任务T3:算术、逻辑运算模拟系统软件设计。见动画十一,3.5 计算机中的数据编码,一、带符号数的编码表示 在计算机中,常常需要表示正数和负数,如何表示数据的符号位?如何表示带符号数?1.机器数的概念 为了表示带符号的数,可以把数的最高位作为符号位处理,其余各位表示数值本身。一般“1”表示负号,“0”表示正号。这种把符号数码化了的数称为机器数,而把原来符号未进行数码化的数称为机器数的真值。如:+1001110和-1001110是真值,

32、01001110和11001110是机器数。,2.补码,补码表示带符号数的规则如下:(1)最高位表示符号,“0”表示正号,“1”表示负号;其余位表示数值位。(2)正数补码的数值位与二进制真值相同。(3)负数补码的数值位是其二进制真值取反后加1。例1 用补码表示八位带符号数。X=+1010(X)补=00001010X=-1010(X)补=11110110X=+0001100(X)补=00001100X=-0001100(X)补=11110100X=+1111111(X)补=01111111X=-1111111(X)补=10000001,3.5 计算机中的数据编码,X=+1(X)补=0000000

33、1 X=-1(X)补=11111111 X=+0(X)补=00000000 X=-0(X)补=00000000 X=-10000000(X)补=28+(-10000000)=10000000,3.5 计算机中的数据编码,补码可以直接参加运算,符号位与数值位一起参加运算。例如:补码加法的公式是(X)补+(Y)补=(X+Y)补。例2 已知(X)补=00111010,(Y)补=10011101,求(X+Y)补。解:(X)补:0 0 1 1 1 0 1 0(Y)补:1 0 0 1 1 1 0 1(X)补+(Y)补:1 1 0 1 0 1 1 1 即(X+Y)补=11010111。该例表示58与99两个十进制真值相加,等于41,它的补码正好是11010111。,3.5 计算机中的数据编码,计算机中,由于机器码的位数是固定的,所以计算机中数的表示范围有限。若两数运算的结果超出了给定的取值范围,则发生运算溢出。例3(X)补=11000100,(Y)补10001000,求(X+Y)补。解:(X)补:1 1 0 0 0 1 0 0(Y)补:1 0 0 0 1 0 0 0(X)补+(Y)补:10 1 0 0 1 1 0 0 进位自动丢失,即(X+Y)补=01001100。两个负数相加,结果为正数,这显然是错误的,出错的原因是运算发生了溢出。,3.5 计算机中的数据编码,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号