MCS51单片机指令系统及汇编语言程序设计.ppt

上传人:wuy****n92 文档编号:54701317 上传时间:2022-10-29 格式:PPT 页数:103 大小:1.10MB
返回 下载 相关 举报
MCS51单片机指令系统及汇编语言程序设计.ppt_第1页
第1页 / 共103页
MCS51单片机指令系统及汇编语言程序设计.ppt_第2页
第2页 / 共103页
点击查看更多>>
资源描述

《MCS51单片机指令系统及汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《MCS51单片机指令系统及汇编语言程序设计.ppt(103页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第三章第三章 MCS-51MCS-51单片机指令系单片机指令系 统及汇编语言程序设计统及汇编语言程序设计内容提要:3-1汇编语言与指令系统简介汇编语言与指令系统简介3-2数据传送类指令数据传送类指令3-3算术运算类指令算术运算类指令3-4逻辑运算类指令逻辑运算类指令3-5控制转移类指令控制转移类指令3-6位操作类指令位操作类指令3-7汇编语言的汇编过程汇编语言的汇编过程3-8汇编语言的程序设计及应用汇编语言的程序设计及应用高级语言高级语言:3-1 3-1 汇编语言与指令系统简介汇编语言与指令系统简介 一、汇编语言程序设计的意义一、汇编语言程序设计的意义什么是程序?什么是程序?完成某项特定任务的

2、指令的集合。完成某项特定任务的指令的集合。计算机按程序一条一条地依次执行指令,从而完成指定任务。计算机按程序一条一条地依次执行指令,从而完成指定任务。要让计算机完成各项任务,就应设计各种程序。要让计算机完成各项任务,就应设计各种程序。汇编语言汇编语言:机器语言机器语言:程序设计语言:程序设计语言:用二进制代码表示指令和数据。用二进制代码表示指令和数据。用助记符表示指令操作功能,用标号表示操作对象。用助记符表示指令操作功能,用标号表示操作对象。独立于机器独立于机器,面向过程面向过程,接近自然语言和数学表达式接近自然语言和数学表达式.汇编语言程序的每一条语句都与计算机的某一条指令对应,所汇编语言程

3、序的每一条语句都与计算机的某一条指令对应,所以必需熟悉指令系统。以必需熟悉指令系统。指令指令=操作码操作码+操作数操作数操作码操作码表示了该指令所能执行的操作功能表示了该指令所能执行的操作功能。操作数操作数表示参加操作的数的本身或操作数所在的地址。表示参加操作的数的本身或操作数所在的地址。MCS-51指令格式:指令格式:标号:标号:操作码助记符操作码助记符 第一操作数第一操作数,第二操作数,第二操作数;注释;注释二、二、MCS-51MCS-51系列单片机的指令系统系列单片机的指令系统111111条条指令,共分指令,共分五大类五大类:数据传送类;(数据传送类;(29条)条)算术运算类;(算术运算

4、类;(24条)条)逻辑运算类;(逻辑运算类;(24条)条)控制转移类;(控制转移类;(17条)条)位操作类。(位操作类。(17条)条)指令中操作数的描述符号指令中操作数的描述符号:Rn工作寄存器工作寄存器R0R7Ri间接寻址寄存器间接寻址寄存器R0、R1Direct直接地址,包括内部直接地址,包括内部128BRAM单元地址、单元地址、26个个SFR地址。地址。#data8位常数位常数#data1616位常数位常数addr1616位目的地址位目的地址addr1111位目的地址位目的地址rel8位带符号的偏移地址位带符号的偏移地址DPTR16位外部数据指针寄存器位外部数据指针寄存器bit可直接位寻

5、址的位可直接位寻址的位A累加器累加器B寄存器寄存器BC进、借位标志位,或位累加器进、借位标志位,或位累加器间接寄存器或基址寄存器的前缀间接寄存器或基址寄存器的前缀/指定位求反指定位求反(x)x中的内容中的内容(x)x中的地址中的内容中的地址中的内容当前指令存放的地址当前指令存放的地址三、寻址方式三、寻址方式寻找操作数存放单元的地址的方式,寻找操作数存放单元的地址的方式,共共6种方式。种方式。1、立即数寻址、立即数寻址所要找的操作数是一二进制数或十进制数,出现在指令中,所要找的操作数是一二进制数或十进制数,出现在指令中,用用“#”作前缀作前缀MOVA,#20H2、寄存器寻址寄存器寻址操作数存放在

6、工作寄存器操作数存放在工作寄存器R0R7中,或寄存器中,或寄存器B中。中。MOVA,R23、直接寻址直接寻址指令中直接给出操作数的地址。指令中直接给出操作数的地址。MOVA,30HMOV30H,DPH;书书放在放在甲甲抽屉中抽屉中;甲甲抽屉的钥匙放在抽屉的钥匙放在乙乙抽屉中抽屉中;取取书书,A中中 20HMOV30H,#20HMOVR0,#30HMOVA,R0此例中,此例中,20H就当成是那本就当成是那本书书;30H就当成是就当成是甲甲抽屉;抽屉;R0就当成是就当成是乙乙抽屉,执行的结果就是将抽屉,执行的结果就是将20H这个立即数装入这个立即数装入A中。中。期间也经历了两次寻址,即间接寻址。期

7、间也经历了两次寻址,即间接寻址。4、寄存器间接寻址、寄存器间接寻址指令中寄存器的内容作为操作数存放的地址,在工作上间接寻指令中寄存器的内容作为操作数存放的地址,在工作上间接寻址寄存器前用址寄存器前用“”表示前缀。表示前缀。例如例如:“一本一本书书放在放在甲甲抽屉中,上了锁;其开锁的钥匙放在抽屉中,上了锁;其开锁的钥匙放在乙乙抽屉中,抽屉中,乙乙抽屉也上了锁。问如何才能取到哪本抽屉也上了锁。问如何才能取到哪本书书?”这就是一个间接寻址的问题,要经过两次寻址才能找到哪本这就是一个间接寻址的问题,要经过两次寻址才能找到哪本书书。而寄存器间接寻址也是同样。而寄存器间接寻址也是同样。例如例如:5、变址寻

8、址、变址寻址操作数地址操作数地址=变地址变地址+基地址基地址基地址寄存器基地址寄存器DPTR或或PC变址寄存器变址寄存器A该寻址方式常用于访问程序存储器,查表。该寻址方式常用于访问程序存储器,查表。如如MOVCA,A+DPTR6、相对寻址相对寻址把指令中给定的地址偏移量与本指令所在单元地址(把指令中给定的地址偏移量与本指令所在单元地址(PC内容)内容)相加得到真正有效的操作数所存放的地址。相加得到真正有效的操作数所存放的地址。例如例如“李同学李同学20岁,张同学比李同学大岁,张同学比李同学大3岁,问张同学多少岁?岁,问张同学多少岁?”这就是一个相对寻年龄的问题,而相对寻址与此类似。这就是一个相

9、对寻年龄的问题,而相对寻址与此类似。如如JC60H;设(设(PC)=2000H为基址,相对偏移量为为基址,相对偏移量为60H;则当则当C=1时,时,转移的目的地址转移的目的地址=20002000H H+2+60H巩固新课:巩固新课:1、汇编语言有何种特点?指令格式?、汇编语言有何种特点?指令格式?2、MCS51系列机共有多少条指令?分几类?系列机共有多少条指令?分几类?3、MCS51系列汇编语言指令有几种寻址方式?系列汇编语言指令有几种寻址方式?3-2 3-2 数据传送类指令数据传送类指令一、内部一、内部RAM数据传送类数据传送类1、一般数据传送指令片外片外程序程序存储器存储器ROMEPROM

10、特殊功能特殊功能寄存器寄存器SFR片内片内RAM128字节字节片外片外数据数据存储器存储器RAMMOVCMOVXMOVPUSHPOPXCHXCHD回忆前述操作数描述符:回忆前述操作数描述符:A,direct,Rn,Ri,#data,DPTR等。等。经排列组合可写出下列指令:经排列组合可写出下列指令:MOVA,Rn;(;(A)(Rn)以下类似。以下类似。MOVA,directMOVA,RiMOVA,#dataMOVRn,AMOVRn,directMOVRn,#dataMOVdirect,RnMOVdirect,directMOVdirect,RiMOVdirect,#dataMOVRi,AMOV

11、Ri,directMOVRi,#dataMOVDPTR,#data16;唯一的唯一的16位数据传送指令。位数据传送指令。上述指令不影响任何标志位,但上述指令不影响任何标志位,但PSW的的P位除外。位除外。(direct)(A)MOVdirect,A;上述指令不影响任何标志位,但上述指令不影响任何标志位,但PSW的的P位除外。位除外。注意:注意:MOVRn,RnMOVRi,RiMOVRn,RiMOV#data,A等等等指令是非法指令。等指令是非法指令。哇!好容易出错啊!(2)(direct)2、栈操作指令、栈操作指令PUSHdirectPOPdirect不影响任何标志位。不影响任何标志位。PUS

12、Hdirect指令执行中,机器自动进行两步操作:指令执行中,机器自动进行两步操作:(1)(SP)+1例例1、设(、设(SP)=09H,(,(DPTR)=0123H,分析:分析:执行执行PUSHDPLPUSHDPH后,各单元中的内容。后,各单元中的内容。(SP)(SP)POPdirect指令执行中,机器也自动进行两步操作:指令执行中,机器也自动进行两步操作:(1)()(direct)(SP)(2)()(SP)(SP)1例例2、设(、设(SP)=0BH,(,(0BH)=01H,(,(0AH)=23H执行执行POPDPHPOPDPL后,各单元中的内容。后,各单元中的内容。结论:结论:1)PUSH与与

13、POP操作过程刚好相反;操作过程刚好相反;2)进、出栈规则:进、出栈规则:先进后出,后进先出。应注意指令书写先后顺序;先进后出,后进先出。应注意指令书写先后顺序;3)可用于可用于“保护现场,恢复现场保护现场,恢复现场”。3 3、字节交换指令、字节交换指令XCHA,RnXCHA,direct整字节交换整字节交换XCHA,RiXCHDA,RiSWAPA半字节交换半字节交换不影响任何标志位。不影响任何标志位。二、二、外部外部RAMRAM数据传送数据传送MOVXA,RiMOVXA,DPTRMOVXRi,AMOVXDPTR,A执行过程中会使执行过程中会使/WR、/RD有效。有效。例例3、试编写一程序段,

14、实现将外试编写一程序段,实现将外RAM0FAH单元中的单元中的内容传送到外内容传送到外RAM04FFH单元中。单元中。解:解:MOVDPTR,#04FFHMOVR0,#0FAHMOVXA,R0MOVXDPTR,A三、三、查表指令查表指令与与ROM之间的数据传送。之间的数据传送。MOVCA,A+DPTRMOVCA,A+PC执行后会使执行后会使/PSEN有效。有效。MOVC含义是传送常数。含义是传送常数。以以DPTR为基地址的指令,可在为基地址的指令,可在ROM的的64KB范围内查表;范围内查表;而以而以PC为基地址的指令只能在(为基地址的指令只能在(PC)+1为中心上、下为中心上、下256B范范

15、围内查表。围内查表。例例4 4、设(、设(A A)=一个一个BCDBCD码常数,试用查表法获得其相应的码常数,试用查表法获得其相应的ASCIIASCII码。码。解法II:MOVCA,A+PCTAB:DB30H,31H,32H,33HDB34H,35H,36H,37H解法解法I:MOVDPTR,#TABMOVCA,.A+DPTRTAB:DB30HDB31HDB32H,33H,34H,35H小结:小结:数据传送类指令有几种类型?数据传送类指令有几种类型?是否影响标志位?是否影响标志位?3-3 3-3 算术运算类指令算术运算类指令包括:加、包括:加、减、乘、除;加一、减一。减、乘、除;加一、减一。一

16、、加法指令一、加法指令ADDA,Rn;(;(A)(A)+(Rn)以下类同。以下类同。ADDA,directADDA,RiADDA,#data无符号数相加时:若无符号数相加时:若C=1,说明有溢出(其值说明有溢出(其值 255 255)。)。带符号数相加时:若带符号数相加时:若OV=D7cD6c=1OV=D7cD6c=1,说明有溢出。说明有溢出。ADDC AADDC A,Rn Rn ;(;(A A)(A A)+(RnRn)+(C)C);以下类同。以下类同。ADDC AADDC A,directdirectADDC AADDC A,RiRiADDC A,#dataADDC A,#data 上述四条

17、指令多用于多字节数相加。上述四条指令多用于多字节数相加。INC A INC A ;(;(A A)(A A)+1 +1 ,以下类同。以下类同。INC RnINC RnINC directINC directINC RiINC Ri INC DPTR INC DPTRINC A INC A ;(;(A A)(A A)+1+1 ;以下类同。以下类同。INC RnINC RnINC directINC directINC RiINC RiINC DPTRINC DPTR例例1 1、设(、设(R0R0)=7FH=7FH;(7EH7EH)=40H=40H 执行:执行:INC R0INC R0 INC R0

18、 INC R0 INC R0 INC R0 后后,(R0)=7FH;R0)=7FH;(7EH)=(7EH)=00H;00H;(7FH)=41H(7FH)=41HDAA;二二十进制调整指令。十进制调整指令。执行过程中,执行过程中,CPU能根据加法运算后,累加器中的值和能根据加法运算后,累加器中的值和PSW中的中的AC及及C标志位的状况自动选择一个修正值(标志位的状况自动选择一个修正值(00H、06H、60H、66H)与原运算结果相加,进行二与原运算结果相加,进行二十进制调整。十进制调整。(A30)9 9时或(时或(ACAC)=1=1时,时,(A30)(A30)+6(A74)9 9或(或(C C)

19、=1=1时,时,(A74)(A74)+6选择修正值的规则:选择修正值的规则:例例2、设(、设(A)=56H为为56的压缩的的压缩的BCD码数,(码数,(R3)=67H,(CY)=1执行执行ADDCA,R3DAA结果为:结果为:124注意:注意:1)DA指令只能跟在加法指令后面使用;指令只能跟在加法指令后面使用;2)调整前参与运算的两数是)调整前参与运算的两数是BCD码数;码数;3)DA指令不能与减法指令配对使用,但可以实现对指令不能与减法指令配对使用,但可以实现对A中中压缩压缩BCD数进行减一操作。数进行减一操作。例例3、设(、设(A)=30H(压缩压缩BCD码数),执行:码数),执行:ADD

20、A,#99HDAA后,便实现了后,便实现了301=29的操作。的操作。例例4、两个、两个4位位BCD码相加,一个存放在(码相加,一个存放在(31H)()(30H););另一个存放在(另一个存放在(33H)()(32H););和数拟回存在和数拟回存在(31H)()(30H)中,试编程实现之。中,试编程实现之。解:解:MOVR0,#30HMOVR1,#32HMOVA,R0ADDA,R1DAAMOVR0,AINCR1MOVA,R0ADDCA,R1DAAMOVR0,AINCR0二、减法指令二、减法指令SUBBA,Rn;(;(A)(A)()(Rn)()(C),),以下类同。以下类同。SUBBA,dire

21、ctSUBBA,RiSUBBA,#data注意:减法之前先清零注意:减法之前先清零C。DECA;(;(A)(A)1,以下类同。以下类同。DECRnDECRiDECdirect例例5、设(、设(R0)=7FH,在内在内RAM中,(中,(7EH)=00H,(7FH)=40H执行执行:DECR0DECR0DECR0结果为结果为:(R0)=7EH,(,(7EH)=0FFH,(,(7FH)=3FH。三、乘法和除法指令三、乘法和除法指令乘法:乘法:MULAB;(;(A)(B),),积的低积的低8位在位在A中,积的中,积的;高高8位在位在B中;中;C总为总为0。除法:除法:DIVAB;(;(A)(B),),

22、商在商在A中,余数在中,余数在B中。中。;若(若(B)=0,则结果不定,(则结果不定,(OV)=1,;(;(C)=0。例例6、试将、试将A中的二进制数转换为中的二进制数转换为3位位BCD码,其中,百位数存放码,其中,百位数存放于于31H单元,十位数和个位数压缩后存于单元,十位数和个位数压缩后存于30H单元中。单元中。解:解:MOVB,#100DIVABMOV31H,AMOVA,#10XCHA,BDIVABSWAPAADDA,BMOV30H,A小结:算术运算类指令都有哪些类型?小结:算术运算类指令都有哪些类型?3-4逻辑运算类指令逻辑运算类指令共分两大类:单字节逻辑操作,双字节逻辑操作,共共分两

23、大类:单字节逻辑操作,双字节逻辑操作,共24条。条。一、单字节逻辑操作指令一、单字节逻辑操作指令CLRA;(;(A)0CPLAA中中8位按位求反。位按位求反。循环左移、右移指令:循环左移、右移指令:RLARLCARRARRCA注:左移一位相当于乘注:左移一位相当于乘2;右移一位相当于除;右移一位相当于除2。二、双字节逻辑操作指令二、双字节逻辑操作指令“与操作与操作”:ANLA,Rn;(A)(A)(Rn),),以下类同。以下类同。ANLA,directANLA,RiANLA,#dataANLdirect,AANLdirect,#data例例1、(、(P1)=35H,使其高使其高4位输出位输出0,

24、低,低4位不变。位不变。解;解;ANLP1,#0FH此做法称为此做法称为“屏蔽屏蔽”位。位。“或操作或操作”:ORLA,Rn;(A)(A)(Rn),),以下类同。以下类同。ORLA,directORLA,RiORLA,#dataORLdirect,AORLdirect,#data例例2、将、将A中的低中的低3位送入位送入P1中,并且保持中,并且保持P1中高中高5位不变。位不变。ANLA,#07HANLP1,#0F8HORLP1,A;(;(P1)=P17P16P15P14P13A2A1A0这称为这称为“数位组合数位组合”。“异或操作异或操作”:XRLA,Rn;(A)(A)(Rn),),以下类同。

25、以下类同。XRLA,directXRLA,RiXRLA,#dataXRLdirect,AXRLdirect,#data例例3、设(、设(P1)=0B4H=10110100B,执行:执行:XRLP1,#00110001B结果按结果按#00110001取反,即:取反,即:(P1)=10000101B=85H这称为这称为“指定位取反指定位取反”。在上述在上述ANL、ORL、XRL操作中,用于端口操作时,无论操作中,用于端口操作时,无论P0P3是第一,还是第二操作数,都遵循是第一,还是第二操作数,都遵循“读读修改修改写写”端口锁存器的操作。端口锁存器的操作。小结:小结:1、逻辑操作分为哪两类操作?、逻

26、辑操作分为哪两类操作?2、循环移位指令每执行一次,移几位?、循环移位指令每执行一次,移几位?3、ANL、ORL、XRL指令有哪些使用技巧?指令有哪些使用技巧?3-5控制转移类指令控制转移类指令作用:改变程序计数器作用:改变程序计数器PC的值,从而改变程序执行方向。的值,从而改变程序执行方向。分为四大类:分为四大类:无条件转移指令;无条件转移指令;条件转移指令;条件转移指令;调用指令;调用指令;返回指令。返回指令。一、无条件转移指令一、无条件转移指令LJMPaddr16AJMPaddr11SJMPrelJMPA+DPTRLJMPaddr16;长跳转指令长跳转指令转移目的地址转移目的地址addr1

27、6(PC),0000HFFFFH,64KBAJMPaddr11;绝对转移绝对转移转移目的地址的形成:先(转移目的地址的形成:先(PC)(PC)+2;然后然后PC1511不变,不变,PC100addr10064KB=216=25211=322KB转移目的地址与(转移目的地址与(PC)+2在同一个在同一个2KB范围内。范围内。SJMPrel;短转移,相对寻址。短转移,相对寻址。转移目的地址转移目的地址=(PC)+2+rel,所以所以rel=转移目的地址(转移目的地址(PC)2但,实际使用中常写成但,实际使用中常写成SJMPaddr16,汇编时会自动转汇编时会自动转换成换成rel。JMPA+DPTR

28、;间接转移,散转移指令。间接转移,散转移指令。转移目的地址转移目的地址=(A)+(DPTR)本指令不影响标志位,不改变本指令不影响标志位,不改变A及及DPTR中的内容。常中的内容。常用于多分支程序结构中,可在程序运行过程中动态地决定用于多分支程序结构中,可在程序运行过程中动态地决定程序分支走向。程序分支走向。例例1、设、设A中为键值,试编写按键值处理相应事件的程序段。中为键值,试编写按键值处理相应事件的程序段。解:解:MOVDPTR,#KYEGMOVB,#03HMULABJMPA+DPTRKYEG:LJMPKYEG0LJMPKYEG比较比较LJMP、AJMP、SJMP、JMP转移的起点和范围转

29、移的起点和范围:LJMPLJMPPC64KAJMPAJMPPC+2SJMPSJMPPC+2-128+127JMPJMPA+DPTRPCPC+2DPTR256LCALLaddr16;长调用长调用ACALLaddr11;绝对调用绝对调用LCALLaddr16;转移范围转移范围64KB,不影响标志位。执行中不影响标志位。执行中自动完成如下过程:自动完成如下过程:(PC)(PC)+3(SP)(SP)+1(SP)(PC70),),保护断点地址低字节;保护断点地址低字节;(SP)(SP)+2(SP)(PC158),),保存断点地址高字节;保存断点地址高字节;(PC)addr16,目的地址送目的地址送PC,

30、转子程序。转子程序。二、调用指令二、调用指令LCALL34H56HMOV执行结果:(执行结果:(SP)=09H,(,(09H)=21H,(,(08H)=03H,(PC)=3456HSP07HSPSP08H09H2100H3456H外ROM内RAMPC+3PC2103HPC03H21H例例2、设(、设(SP)=07H,(,(PC)=2100H,子程序首地址为子程序首地址为3456H,执行:执行:LCALL3456HMOVA,20H转移范围与(转移范围与(PC)+2在同一个在同一个2KB内。不影响任何标志内。不影响任何标志位,执行中机器自动完成下列过程:位,执行中机器自动完成下列过程:(PC)(P

31、C)+2(SP)(SP)+1(SP)(PC70)(SP)(SP)+2(SP)(PC158)(PC100)addr100ACALLaddr11:三、返回指令三、返回指令从子程序返回主程序。从子程序返回主程序。RET;调用子程序返回;调用子程序返回;RETI;中断子程序返回。中断子程序返回。(PC158)(SP)(SP)1(PC70)(SP)(SP)(SP)2其机器自动操作过程如下:其机器自动操作过程如下:比较两种返回指令含义上的异同点比较两种返回指令含义上的异同点结论:结论:RET返回地址事先已知,而返回地址事先已知,而RETI的返回地址在程序执的返回地址在程序执行中产生的,不固定。不影响标志位

32、,但行中产生的,不固定。不影响标志位,但PSW不能恢复到中不能恢复到中断前的状态。断前的状态。(SP)例例3、设(、设(SP)=0BH,(,(0AH)=23H,(,(0BH)=01H执行:执行:RETMOV (PC)=0123H(返回主程序)返回主程序)结果结果:(SP)=09H,01 23HSP0BHSPSP0AH09H3456H外ROM内RAMPCPC23H01H23H01H(PC)=空操作指令空操作指令NOP;空操作空操作不执行任何操作,仅仅使(不执行任何操作,仅仅使(PC)+1,继续执行下条指令,继续执行下条指令,不影响标志位,不影响标志位,在在ROM中占一个字节。用于延时调整。中占一

33、个字节。用于延时调整。小结:小结:1、长转移与长调用指令有何区别?、长转移与长调用指令有何区别?2、长转移、短转移及相对转移的跳转范围有、长转移、短转移及相对转移的跳转范围有 什么不同?什么不同?二、条件转移指令二、条件转移指令实现按照一定条件决定转移的方向实现按照一定条件决定转移的方向,分三类分三类:判零转移指令判零转移指令 比较转移指令比较转移指令 循环转移指令循环转移指令JZrel:若(若(A)=0,则转移,否则顺序执行。则转移,否则顺序执行。JNZrel:若(若(A)0,则转移,否则顺序执行。则转移,否则顺序执行。转移目的地址转移目的地址=(PC)+2+rel 不影响任何标志位。不影响

34、任何标志位。1、判零转移、判零转移JZrelJNZrel例例1、将外、将外RAM的一个数据块(首地址为的一个数据块(首地址为DATA1)传送到内部传送到内部数据数据RAM(首地址为首地址为DATA2),),遇到传送的数据为零时停止遇到传送的数据为零时停止传送,试编程。传送,试编程。解:解:MOVR0,#DATA2MOVDPTR,#DATA1LOOP1:MOVXA,DPTRJZLOOP2MOVR0,AINCR0INCDPTRSJMPLOOP1LOOP2:SJMPLOOP22、比较转移指令、比较转移指令功能:比较二个字节中的值,若不等,则转移。功能:比较二个字节中的值,若不等,则转移。CINEA,

35、#data,relCJNEA,direct,relCJNERi,#data,relCJNERn,#data,rel该类指令具有比较和判断双重功能,比较的本质是做减法运算,该类指令具有比较和判断双重功能,比较的本质是做减法运算,用第一操作数内容减去第二操作数内容,但差值不回存。用第一操作数内容减去第二操作数内容,但差值不回存。转移目的地址转移目的地址=(PC)+3+rel若第一操作数内容小于第二操作数内容,则(若第一操作数内容小于第二操作数内容,则(C)=1,否则否则(C)=0。该类指令可产生三分支程序:该类指令可产生三分支程序:即,相等分支;大于分支;小于分支。即,相等分支;大于分支;小于分支

36、。A=B吗?出口YNAB吗?入口YN123例例2、设、设P1口的为准备就绪信号输入端,当该四位为全口的为准备就绪信号输入端,当该四位为全1时,说时,说明各项工作已准备好,单片机可顺序执行,否则,循环等待。明各项工作已准备好,单片机可顺序执行,否则,循环等待。解:解:MOVA,P1ANLA,#0FH不为全不为全1时,返时,返;回回WAITMOVA,R2 3、循环转移指令、循环转移指令DJNZRn,rel;(;(二字节指令)二字节指令)DINZdirect,rel;(;(三字节指令)三字节指令)本指令也为双功能指令,即减本指令也为双功能指令,即减1操作和判断转移操作。操作和判断转移操作。第一操作数

37、内容减第一操作数内容减1后,若差值不为零,则转移;否则顺序执行。后,若差值不为零,则转移;否则顺序执行。转移目的地址转移目的地址=(PC)+2或或3+rel例例3、将、将8031内部内部RAM的的40H4FH单元置初值单元置初值#A0H#AFH。解:解:MOVR0,#40HMOVR2,#10HMOVA,#0A0HLOOP:MOVR0,AINCR0INCADJNZR2,LOOP 小结小结:1、无条件转移指令共有几条、无条件转移指令共有几条?2、CJNE指令与指令与DJNZ指令有何区别?指令有何区别?3-6 3-6 位操作类指令位操作类指令包括:位传送指令、条件转移指令、位运算指令。包括:位传送指

38、令、条件转移指令、位运算指令。位操作由单片机内布尔处理器来完成。位操作由单片机内布尔处理器来完成。位地址的四种表示:位地址的四种表示:1)使用直接位地址表示;如使用直接位地址表示;如20H、30H、33H等;等;2)使用位寄存器名来表示;如使用位寄存器名来表示;如C、OV、F0等;等;3)用字节寄存器名后加位数来表示;用字节寄存器名后加位数来表示;如等;如等;4)字节地址加位数来表示;如、等。字节地址加位数来表示;如、等。一、位传送指令一、位传送指令MOVC,bitMOVbit,C 功能:(功能:(C)(bit););或(或(bitbit)(C C)二、位状态控制指令二、位状态控制指令CLRb

39、it;(;(bit)0SETBbit;(;(bit)1CPLbit;(;(bit)(/bit)例例1、编程通过、编程通过P10线连续输出线连续输出256个宽度为个宽度为5个机器周期长的个机器周期长的方波。方波。解:解:MOVR0,#00HCLRP10LOOP:CPLP10NOPNOPDJNZR0,LOOPANLC,bit;(;(C)(C)(bit)ANLC,/bit;(;(C)(C)(/bit/bit)ORL C ORL C,bit bit ;(;(C C)(C C)(bitbit)ORL C ORL C,/bit /bit ;(;(C C)(C C)(/bit/bit)三、位逻辑操作指令三、

40、位逻辑操作指令例例2 2、用软件实现下图所示的、用软件实现下图所示的P10 P10 P13 P13间的逻辑运算。间的逻辑运算。解解:MOV P13,C MOV P13,C&四、布尔条件转移指令四、布尔条件转移指令有有5 5条,分别对条,分别对C C和直接位地址进行测试,和直接位地址进行测试,并根据其状态执行转移。并根据其状态执行转移。1 1、判布尔累加器转移、判布尔累加器转移JC rel JC rel ;(;(C C)=1=1,转移,否则顺序执行。转移,否则顺序执行。JNC rel JNC rel ;(;(C C)=0=0,转移,否则顺序执行。转移,否则顺序执行。不影响标志。转移地址不影响标志

41、。转移地址 :(:(PCPC)(PCPC)+rel+rel 解:解:MOV AMOV A,30H30H CJNE A CJNE A,40H40H,LOOPLOOP SETB 7FH SETB 7FH SJMP$SJMP$LOOP1 LOOP1:JC LOOP2 JC LOOP2 MOV 20H MOV 20H,A A MOV 21H MOV 21H,40H40H SJMP$SJMP$LOOP2 LOOP2:MOV 20H MOV 20H,40H40H MOV 21H MOV 21H,A ASJMP$SJMP$例例3 3、比较内部、比较内部RAMRAM的的3030H H和和4040H H单元中的

42、二个无符号数的大小,将单元中的二个无符号数的大小,将大数存入大数存入2020H H单元,小数存入单元,小数存入2121H H单元,若二数相等,则使内单元,若二数相等,则使内RAMRAM的的第第127127位置位置1 1。2 2、判位变量转移、判位变量转移JB bitJB bit,rel rel ;(;(bitbit)=1=1,则转移,否则顺序执行。则转移,否则顺序执行。JBC bitJBC bit,rel rel ;(;(bitbit)=1=1,则转移,否则顺序执行,则转移,否则顺序执行,;且无论(且无论(bitbit)是否等于是否等于1 1,均使该位清零。,均使该位清零。JNB bitJNB

43、 bit,rel rel ;(;(bitbit)=0=0,则转移,否则顺序执行。则转移,否则顺序执行。;不影响标志。不影响标志。例例4 4、试判断、试判断A A中的正负,若为正数,存入中的正负,若为正数,存入2020H H单元;若为负单元;若为负数则存入数则存入2121H H单元。单元。解:解:JB ACC7JB ACC7,LOOPLOOP MOV 20H MOV 20H,A A SJMP$SJMP$LOOP LOOP:MOV 21HMOV 21H,A A SJMP$SJMP$小结:小结:1 1、位操作指令分为几类?、位操作指令分为几类?2 2、位累加器、位累加器C C与字节累加器与字节累加器

44、A A有何区别?有何区别?3-7 3-7 汇编语言及汇编过程汇编语言及汇编过程一、汇编程序功能一、汇编程序功能 源程序源程序 (汇编指令程序)(汇编指令程序)汇编汇编 目标程序目标程序(机器码指令程序)(机器码指令程序)汇编指令与机器码指令有一一对应的关系。汇编指令与机器码指令有一一对应的关系。汇编程序是一种翻译程序,将源程序翻译成目标程序。汇编程序是一种翻译程序,将源程序翻译成目标程序。二、汇编程序的汇编过程二、汇编程序的汇编过程 汇编有两种方法:手工汇编、机器汇编。汇编有两种方法:手工汇编、机器汇编。1 1、手工汇编:、手工汇编:第一次汇编:确定地址,翻译成各条机器码,字符标号第一次汇编:

45、确定地址,翻译成各条机器码,字符标号原样写出;原样写出;第二次汇编:标号代真,将字符标号用所计算出的具体第二次汇编:标号代真,将字符标号用所计算出的具体地址值或偏移地址值或偏移量代换。量代换。源程序源程序目标程序目标程序地址地址 ORG 1000HORG 1000H START START:MOV R0MOV R0,2FH 2FH MOV R2 MOV R2,#00H#00H MOV A MOV A,R0 R0 MOV R3 MOV R3,A A INC R3 INC R3 SJMP SJMP NEXT NEXT LOOP LOOP:INC R0 INC R0 CJNE R0 CJNE R0,

46、#44H#44H,NEXTNEXT INC R2 INC R2 NEXT NEXT:DJNZ R3DJNZ R3,LOOPLOOP MOV MOV 2AH2AH,R2 R2 SJMP$SJMP$END END第一次汇编第一次汇编第二次汇编第二次汇编1000A82F10027A001004E61005FB10060B100780NEXT100908100AB644NEXT100D0A100EDBLOOP10108A2A101280FEA82F7A00E6FB0B800508B644010ADBF98A2A80FE2 2、机器汇编、机器汇编两次扫描过程。两次扫描过程。第一次扫描:第一次扫描:检查语

47、法错误,确定符号名字;检查语法错误,确定符号名字;建立使用的全部符号名字表;建立使用的全部符号名字表;每一符号名字后跟一对应值(地址或数)。每一符号名字后跟一对应值(地址或数)。第二次扫描:第二次扫描:是在第一次扫描基础上,将符号地址转换成是在第一次扫描基础上,将符号地址转换成 地址(代真);地址(代真);利用操作码表将助记符转换成相应的目标码。利用操作码表将助记符转换成相应的目标码。三、伪指令三、伪指令 伪指令是告诉汇编程序,如何汇编源程序的指令。伪指令是告诉汇编程序,如何汇编源程序的指令。伪指令既不控制机器的操作,也不能被汇编成机器代码,伪指令既不控制机器的操作,也不能被汇编成机器代码,故

48、称为伪指令。故称为伪指令。1 1、起始地址伪指令、起始地址伪指令 ORGORGORG addr16ORG addr16 用于规定目标程序段或数据块的起始地址,用于规定目标程序段或数据块的起始地址,设置在程序开始处。设置在程序开始处。2 2、汇编结束伪指令、汇编结束伪指令 ENDEND 告诉汇编程序,对源程序的汇编到此结束。告诉汇编程序,对源程序的汇编到此结束。一个程序中只出现一一个程序中只出现一 次,在末尾。次,在末尾。3 3、赋值伪指令、赋值伪指令 EQUEQU 告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。格式:格式:标号名称标号名

49、称 EQU EQU 数值或汇编符号数值或汇编符号 “标号名称标号名称”在源程序中可以作数值使用,也可以作数据地址、在源程序中可以作数值使用,也可以作数据地址、位地址使用。位地址使用。先定义后使用,放在程序开头。先定义后使用,放在程序开头。4 4、定义字节伪指令、定义字节伪指令 DBDB 告诉汇编程序从指定的地址单元开始,定义若干字节存储单告诉汇编程序从指定的地址单元开始,定义若干字节存储单 元并赋初值。元并赋初值。格式:格式:标号:标号:DB DB 字节数据或字节数据表字节数据或字节数据表5 5、定义字伪指令、定义字伪指令 DWDW 从指定地址开始,定义若干个从指定地址开始,定义若干个1616

50、个位数据,高八位存入低地址;个位数据,高八位存入低地址;低八位存入高地址。低八位存入高地址。例、例、ORG 1000HORG 1000H PIOI PIOI:DW 7654HDW 7654H,40H40H、1212、ABAB6 6、数据地址赋值伪指令、数据地址赋值伪指令 DATADATA 将表达式指定的数据地址赋予规定的字符名称将表达式指定的数据地址赋予规定的字符名称 格式:格式:字符名称字符名称 DATA DATA 表达式表达式注:该指令与注:该指令与EQUEQU指令相似,只是,可先使用后定义,指令相似,只是,可先使用后定义,放于程序开头、结尾均可。放于程序开头、结尾均可。7 7、定义空间伪

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com