汇编语言序程设计课件_第1页
汇编语言序程设计课件_第2页
汇编语言序程设计课件_第3页
汇编语言序程设计课件_第4页
汇编语言序程设计课件_第5页
已阅读5页,还剩48页未读, 继续免费阅读

下载本文档

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

文档简介

1、13. 3. 汇编语言程序设计汇编语言程序设计 3.1 3.1 汇编语言源程序设计与汇编汇编语言源程序设计与汇编 3.2 3.2 程序计数器和程序运行程序计数器和程序运行 3.3 3.3 顺序程序设计顺序程序设计 3.4 3.4 分支程序设计分支程序设计 3.5 3.5 循环程序设计循环程序设计 3.6 3.6 子程序设计子程序设计 3.7 3.7 常用程序设计常用程序设计 23. 3. 汇编语言程序设计汇编语言程序设计3.1 汇编语言源程序设计和汇编汇编语言源程序设计和汇编3.1.1 指令和助记符指令和助记符指令指令 = = 操作码操作码 + + 操作数操作数例如8051做10加20的加法,

2、在程序存储器中需要预先存储程序存储器中需要预先存储2条机器码指令条机器码指令 0111 0100 ;指令;指令1操作码,把操作码,把10送入累加器送入累加器A 0000 1010 ;指令;指令1操作数,操作数,10=00001010B=0AH0010 0100 ;指令;指令2操作码,累加器操作码,累加器A内容加内容加20,结果存于,结果存于A 0001 0100 ;指令;指令2操作数,操作数,20=00010100B=14HMOV A,0AH ;操作码助记符;操作码助记符MOV,操作数助记符累加器,操作数助记符累加器A和立即数和立即数10ADD A,14H ;操作码助记符;操作码助记符ADD,

3、操作数助记符累加器,操作数助记符累加器A和立即数和立即数20机器语言汇编语言手工汇编机器汇编33. 3. 汇编语言程序设计汇编语言程序设计1 1、指令属性、指令属性时间属性时间属性:指令周期,一条指令执行需要一定的时间。:指令周期,一条指令执行需要一定的时间。1机器周期指令、机器周期指令、2机器周期指令和机器周期指令和4机器周期指令机器周期指令空间属性空间属性:在:在ROM存放占用的单元数,即指令的字节数。存放占用的单元数,即指令的字节数。1字节指令、字节指令、2字节指令和字节指令和3字节指令字节指令功能属性功能属性:指令完成的功能。:指令完成的功能。算术运算类指令、逻辑运算类指令、移位类指令

4、等算术运算类指令、逻辑运算类指令、移位类指令等2 2、指令的字节数(空间属性)、指令的字节数(空间属性) 单字节指令单字节指令 双字节指令双字节指令 三字节指令三字节指令操作码操作码1字节,无操作数或者字节,无操作数或者操作数是寄存器寻址操作数是寄存器寻址 或或 操作码操作码1字节,操作数字节,操作数1字节。字节。操作码操作码1字节,操作数字节,操作数2字节。字节。43. 3. 汇编语言程序设计汇编语言程序设计3.1.2 伪指令伪指令 伪指令虽然具有类似指令的形式,但不是真正的指令,伪指令虽然具有类似指令的形式,但不是真正的指令,不会产生任何可供机器直接不会产生任何可供机器直接执行的机器码执行

5、的机器码。伪指令用来对汇编过程进行控制,是编程员发给汇编程序的命令,也称。伪指令用来对汇编过程进行控制,是编程员发给汇编程序的命令,也称为汇编命令或汇编程序控制命令。为汇编命令或汇编程序控制命令。 1 1、起始汇编伪指令、起始汇编伪指令ORGORG(OriginOrigin) ORG 16位地址位地址用来规定源程序或者数据块在程序存储器的起始地址。注意地址从小到大排列,不同的用来规定源程序或者数据块在程序存储器的起始地址。注意地址从小到大排列,不同的程序段不可彼此覆盖。程序段不可彼此覆盖。2 2、结束汇编伪指令、结束汇编伪指令ENDEND END 表示源程序到此结束。在一个源程序中只允许出现一

6、条表示源程序到此结束。在一个源程序中只允许出现一条END语句,而且必须安排在源程语句,而且必须安排在源程序的末尾,汇编器对序的末尾,汇编器对END语句后的所有语句都不进行汇编。语句后的所有语句都不进行汇编。3 3、赋值伪指令、赋值伪指令EQUEQU(EquateEquate) 字符名称字符名称EQU赋值项赋值项其中赋值项可以是常数、地址、标号或者是表达式,以其中赋值项可以是常数、地址、标号或者是表达式,以8位或位或16位二进制数存放。汇编位二进制数存放。汇编程序自动把程序自动把EQU右边的赋值项赋给左边的字符名称。一旦字符名称被赋值它就可以在程右边的赋值项赋给左边的字符名称。一旦字符名称被赋值

7、它就可以在程序中作为数据或地址来多次使用。必须先赋值再使用,故该语句常放在程序开头。序中作为数据或地址来多次使用。必须先赋值再使用,故该语句常放在程序开头。 53. 3. 汇编语言程序设计汇编语言程序设计3.1.2 伪指令伪指令4 4、位地址赋值伪指令、位地址赋值伪指令BITBIT 字符名称字符名称 BIT 位地址位地址把把BIT右边的位地址或位名称赋给左边的字符名称。因此右边的位地址或位名称赋给左边的字符名称。因此BIT语句定义的字符名称是此位语句定义的字符名称是此位地址的别称。地址的别称。5 5、定义空间伪指令、定义空间伪指令DSDS(Define StorageDefine Storag

8、e) 标号:标号: DS 表达式表达式DS从指定的地址单元开始,保留由表达式指定的若干字节空间作为备用空间,空间大小从指定的地址单元开始,保留由表达式指定的若干字节空间作为备用空间,空间大小由由DS语句中表达式决定。同语句中表达式决定。同DB一样,一样,DS伪指令只能用于程序存储器。伪指令只能用于程序存储器。 ORG1000HDS 08H;从;从1000H开始保留开始保留8字节的存储空间备用字节的存储空间备用DB 71H,13H,11H ;数据表从;数据表从1008H开始存放开始存放经汇编后从经汇编后从1000H单元开始保留单元开始保留8个字节的存储单元,而从个字节的存储单元,而从1008H单

9、元开始连续单元开始连续存放存放71H、13H和和11H等数据。等数据。63. 3. 汇编语言程序设计汇编语言程序设计3.1.3 汇编语句格式汇编语句格式标号标号:操作码操作码 操作数操作数1,操作数,操作数2 ,操作数,操作数3 ;注释;注释 1 1、标号、标号标号是标号是语句地址语句地址的标志符号,它由的标志符号,它由18个个ASCII字符组成,可以是字母、数字和一些特字符组成,可以是字母、数字和一些特定字符,定字符,英文字母开头,冒号结束英文字母开头,冒号结束。为了避免把标号中字符当作指令来汇编,用户在编。为了避免把标号中字符当作指令来汇编,用户在编写自己的程序时绝对不应采用指令、寄存器名

10、以及伪指令等作为语句的标号,而且同一写自己的程序时绝对不应采用指令、寄存器名以及伪指令等作为语句的标号,而且同一标号在一个程序中只能定义一次。对每一条语句而言,标号不是必选的,标号的有无取标号在一个程序中只能定义一次。对每一条语句而言,标号不是必选的,标号的有无取决于程序中有无其它语句访问该语句,一般用于转移程序的首地址。决于程序中有无其它语句访问该语句,一般用于转移程序的首地址。2 2、操作码、操作码操作码是汇编指令格式中唯一不能空缺的部分,可分为指令性语句和指示性语句两类。操作码是汇编指令格式中唯一不能空缺的部分,可分为指令性语句和指示性语句两类。(1)指令性语句)指令性语句指令性语句是指

11、采用指令助记符构成的汇编语言语句,指令性语句是指采用指令助记符构成的汇编语言语句,8051单片机中的指令性语句是指单片机中的指令性语句是指111条指令的助记符语句。因此,指令性语句是汇编语言语句的主体。每条指令性语句都条指令的助记符语句。因此,指令性语句是汇编语言语句的主体。每条指令性语句都有与之对应的机器码供有与之对应的机器码供CPU识别和执行。如前述及的识别和执行。如前述及的MOV、ADD、SETB、CLR等。等。(2)指示性语句)指示性语句指示性语句又称为伪指令语句,不会产生任何可供指示性语句又称为伪指令语句,不会产生任何可供CPU识别和执行的机器码,只是用来识别和执行的机器码,只是用来

12、对汇编过程进行某种控制。对汇编过程进行某种控制。73. 3. 汇编语言程序设计汇编语言程序设计3.1.3 汇编语句格式汇编语句格式标号:操作码标号:操作码 操作数操作数1,操作数,操作数2 ,操作数,操作数3 ;注释;注释 3 3、操作数、操作数 指令执行时涉及到的数据或者数据的地址。它与操作码以空格分界,两操作数或三指令执行时涉及到的数据或者数据的地址。它与操作码以空格分界,两操作数或三操作数时以逗号分开,可以是十进制数、二进制数(操作数时以逗号分开,可以是十进制数、二进制数(B)、十六制数()、十六制数(H)、)、ASCII码码( )、寄存器名、存储器地址、位地址以及变量标识符等。)、寄存

13、器名、存储器地址、位地址以及变量标识符等。16位地址位地址ROM: A+DPTR,A+PC 16位地址片外位地址片外RAM: DPTR8位地址片内位地址片内RAM: direct(8位字节地址),位字节地址), Ri寄存器寄存器(8位位):A, Rn, AB数值:数值:#data, #data16 只能作为源操作数只能作为源操作数寄存器寄存器(16位位): DPTR位操作位操作(1位位): C(寄存器寻址寄存器寻址),bit(8位位地址)位位地址)其他:其他:addr16 , addr11, rel(地址相对偏移量)(地址相对偏移量)4 4、注释、注释 对语句在程序中完成的功能加以解释,对语句

14、在程序中完成的功能加以解释, “;”分号开头,不会被汇编程序理解为指令分号开头,不会被汇编程序理解为指令83. 3. 汇编语言程序设计汇编语言程序设计数据传送类数据传送类片内RAM与寄存器传送操作特点:数据的特点:数据的复制复制操作,操作,目的与源看齐且等宽目的与源看齐且等宽。MOV 目的操作数目的操作数,源操作数源操作数大部分指令操作数在大部分指令操作数在片内片内RAM和寄存器和寄存器,字节字节操作。操作。访问片内访问片内RAM:directRi寄存器:寄存器:ARn立即数:立即数: #dataARndirectRiARndirectRi#data1、立即寻址不能做目的操作数、立即寻址不能做

15、目的操作数2、工作寄存器不能在两边同时出现、工作寄存器不能在两边同时出现93. 3. 汇编语言程序设计汇编语言程序设计算术运算类算术运算类算术运算指令按照算术运算指令按照8 8位位2 2进制运算法则运算,程序员负责按照程序的要求负责解释。进制运算法则运算,程序员负责按照程序的要求负责解释。注意:注意:运算对状态标志位的影响。运算对状态标志位的影响。PSWPSW的的CYCY(C C)、)、ACAC、OVOV单字节加法单字节加法 ADD A ,多字节加法(多字节加法(ADD with Carry) ADDC A ,RndirectRi#data多字节减法(多字节减法( Subtraction wi

16、th Borrow 带借位减法带借位减法 ) SUBB A ,BCD码加法码加法 ( Decimal Adjust 十进制调整指令)十进制调整指令)DA A;硬件对BCD码加法结果修正,过9补6注意:此指令使用时紧跟在ADD和ADDC指令后,对BCD码加法结果进行自动修正自动修正CLR CSUBB A ,单字节减法单字节减法103. 3. 汇编语言程序设计汇编语言程序设计自增自减自增自减自增自增 Increment with constant 1 实现操作数自身内容的加实现操作数自身内容的加1或减或减1操作,操作,不影响标志位状态。不影响标志位状态。自减自减 Decrement with co

17、nstant 1 INC A RndirectRiDPTRDEC A RndirectRi注意:自增自减操作常用于地址变量(指针)内容的更新,数据指针只有自增操作。注意:自增自减操作常用于地址变量(指针)内容的更新,数据指针只有自增操作。例例3-4 多字节加法程序。设被加数存放在:多字节加法程序。设被加数存放在:40H(高字节),(高字节),41H,42H(低字节)。加(低字节)。加数存放在:数存放在:43H(高字节),(高字节),44H,45H(低字节)。运算结果仍存在被加数单元中(低字节)。运算结果仍存在被加数单元中片内RAM双指针R0,R1片外RAM单指针DPTR变址A113. 3. 汇

18、编语言程序设计汇编语言程序设计例例3-4 多字节加法程序。设被加数存放在:多字节加法程序。设被加数存放在:40H(高字节),(高字节),41H,42H(低字节)。加(低字节)。加数存放在:数存放在:43H(高字节),(高字节),44H,45H(低字节)。运算结果仍存在被加数单元(低字节)。运算结果仍存在被加数单元 ORG 0030HMOVR0,#42H;地址指针;地址指针0指向被加数指向被加数MOVR1,#45H;地址指针;地址指针1指向加数指向加数MOVA,R0;取被加数低字节;取被加数低字节ADDA,R1;与加数低字节相加;与加数低字节相加MOVR0,A;结果回存入被加数单元;结果回存入被

19、加数单元DECR0 ;地址指针;地址指针0指向被加数中字节指向被加数中字节DECR1;地址指针;地址指针1指向加数中字节指向加数中字节MOVA,R0;取被加数中字节;取被加数中字节ADDCA,R1;与加数中字节及进位位相加;与加数中字节及进位位相加MOVR0,A;结果回存入被加数单元;结果回存入被加数单元DECR0;地址指针;地址指针0指向被加数高字节指向被加数高字节DECR1;地址指针;地址指针1指向加数高字节指向加数高字节MOVA,R0;取被加数高字节;取被加数高字节ADDCA,R1;与加数高字节及进位位相加;与加数高字节及进位位相加MOVR0,A;结果回存入被加数单元;结果回存入被加数单

20、元 END 123. 3. 汇编语言程序设计汇编语言程序设计累加器累加器A清零清零 Clear accumulatorCLR A累加器累加器A按位求反按位求反 Complement accumulatorCPL A例例3-2 、设有、设有16位二进制数存放在位二进制数存放在R0、R1中,其中中,其中R0存放高存放高8位,位,R1存放低存放低8位。编位。编程实现其求反再加一运算,结果送原址。程实现其求反再加一运算,结果送原址。 ORG 0030HMOVA,R1;取低字节入;取低字节入ACPLA ;对低字节求反;对低字节求反ADDA,01H;加;加1MOVR1,A;存结果到原址;存结果到原址MOV

21、A,R0;取高字节入;取高字节入ACPL A ;对高字节求反;对高字节求反ADDCA,00H;加可能产生的低字节对高字节的进位;加可能产生的低字节对高字节的进位MOVR0,A;存结果到原址;存结果到原址SJMP$;原地踏步;原地踏步 END133. 3. 汇编语言程序设计汇编语言程序设计 累加器累加器A循环左移循环左移 Rotate LeftRL Aa7 a6 a5 a4 a3 a2 a1 a0a6 a5 a4 a3 a2 a1 a0 a7 A8位的循环移位器。位的循环移位器。如果如果a7=0左移一位相当于原数乘左移一位相当于原数乘2SWAP A累加器累加器A循环右移循环右移 Rotate R

22、ightRR A8位的循环移位器。位的循环移位器。a7 a6 a5 a4 a3 a2 a1 a0a0 a7 a6 a5 a4 a3 a2 a1 A累加器累加器A高低高低4位互换位互换 SWAP如果如果a0=0右移一位相当于原数除以右移一位相当于原数除以2143. 3. 汇编语言程序设计汇编语言程序设计累加器累加器A带进位位的循环左移带进位位的循环左移 Rotate Left through CarryRLC Aa7 a6 a5 a4 a3 a2 a1 a0a6 a5 a4 a3 a2 a1 a0 CACa7CY9位的循环移位器。位的循环移位器。累加器累加器A带进位位的循环右移带进位位的循环右移

23、 Rotate Right through CarryRRC A9位的循环移位器。位的循环移位器。a7 a6 a5 a4 a3 a2 a1 a0C a7 a6 a5 a4 a3 a2 a1 ACa0CY153. 3. 汇编语言程序设计汇编语言程序设计例、片内例、片内RAM40H、41H单元存放着单元存放着16个单字节个单字节AD转换值的和,求其算术平均值。转换值的和,求其算术平均值。(40H和的高字节,和的高字节,41H和的低字节,不考虑余数)和的低字节,不考虑余数)CLR CMOV A,40HRRC AMOV 40H,AMOV A,41HRRC AMOV 41H,A163. 3. 汇编语言程

24、序设计汇编语言程序设计逻辑运算类逻辑运算类按位与按位与AND Logical : ANL A ,RndirectRi#data“遇遇1 1保持,遇保持,遇0 0复位复位”。常用于某些特定位的常用于某些特定位的强迫复位强迫复位(与(与“0”0”与),与),其余位状态不改变(与其余位状态不改变(与“1”1”与)。与)。按位或按位或OR Logical :ORL A ,“遇遇0 0保持,遇保持,遇1 1置位置位”。常用于某些特定位的常用于某些特定位的强迫置位强迫置位(与(与“1”1”或),或),其余位状态不改变(与其余位状态不改变(与“0”0”或)。或)。按位异或按位异或eXclusive-OR L

25、ogical :XRL A ,“相同为相同为0 0,相异为,相异为1 1”。常用于某些特定位的常用于某些特定位的求反求反(与(与“1”1”异或),异或),其位状态不改变(与其位状态不改变(与“0”0”异或)。异或)。173. 3. 汇编语言程序设计汇编语言程序设计例、片内例、片内RAM40H、41H单元存放着单元存放着16个单字节个单字节AD转换值的和,求其算术平均值。转换值的和,求其算术平均值。(40H和的高字节,和的高字节,41H和的低字节,不考虑余数)和的低字节,不考虑余数) a7 a6 a5 a4 0 0 0 0a15a14 a13 a12 0 0 0 0a11 a10 a9 a8 0

26、 0 0 0MOV A,40HSWAP AMOV R2,A ;暂存备拆分;暂存备拆分 ANL A,#0FH ;高四位清零;高四位清零MOV 40H,AMOV A,R2 ANL A,#0F0HMOV R2,A ;暂存暂存MOV A,41HSWAP AANL A,#0FHORL A,R2MOV 41H,A拆合a15a14 a13 a12a3 a2 a1 a0 a7 a6 a5 a4a11 a10 a9 a8;Aa15a14 a13 a12 0 0 0 0a11 a10 a9 a8 0 0 0 0;A a7 a6 a5 a4 0 0 0 0;Aa15a14 a13 a12a11 a10 a9 a8

27、a7 a6 a5 a40 0 0 03. 3. 汇编语言程序设计汇编语言程序设计3.2 程序计数器PC和程序运行3.2.1 程序计数器PC (Program Counter)PC(Program Counter):程序计数器。16位的寄存器,存放的是ROM地址起始地址:0000H 第一条指令地址 形成下一条要执行指令的地址: 自动加1:取指令的1个字节加1 新地址直接替换:转移类指令从程序存储器某地址取指令分析指令(译 码)执行指令 形成下一条要执行指令的地址起始地址3. 3. 汇编语言程序设计汇编语言程序设计3.2.2 简单程序运行PC=0100HPC=0102H 取指7A23译码执行 PC

28、=0104HPC=0104H 取指7B24译码执行 PC=0106HPC=0106H 取指7C25译码执行 PC=0108HPC=0108H 取指7D26译码执行 PC=010AHPC=010AH 取指2A译码执行 PC=010BHPC=010BH 取指2B译码执行 PC=010CHPC=010CH 取指2C译码执行 PC=010DHPC=010DH 取指2D译码执行 PC=010EH PC自动加1后形成的值称PC当前值能保证按照指令排列顺序执行程序取指7400译码执行PC=0102H0100H0102H0104H0106H0108H010AH010BH010CH010DHMOV A, #00

29、HMOV R2, #23HMOV R3, #24HMOV R4, #25HMOV R5, #26HADD A, R2ADD A, R3ADD A, R4ADD A, R574 007A 237B 247C 257D 262A2B2C2DORG 0100HENDMAIN:标号是语句地址的标志符号010EH3. 3. 汇编语言程序设计汇编语言程序设计3.3 顺序程序设计 顺序程序的特点是程序执行时,每一条指令都被执行一次(有别于分支程序)且仅一次(有别于循环程序)。计算机在执行这类程序时只需按照指令排列的先后顺序依次执行,中间不会产生任何分支,故又称为无分支程序或简单程序(不含有转移指令)。例3-

30、3 在实际压力测量系统中通过A/D转换器得到8位无符号二进制数测量值存于累加器A中。把A中的二进制数测量值转换为3位BCD码,并以压缩BCD码形式存放在地址40H、41H单元中。解题思路: 8位二进制数3位BCD码例如A=1111 0101B 转换 4 5 0 241H40H 十 个 0 百 41H40H求百位数求十位数求个位数除以100得到的商DIV AB余数除以10得到的商除以10得到的余数DIV AB 0 百 0 十 0 个合成一字节 十 0 0 个SWAP AORL A, 十 个Binary Coded Decimal3. 3. 汇编语言程序设计汇编语言程序设计 ORG 0030H;百

31、位数MOVB,100 ;除数100送BDIVAB MOV40H,A ;十位数和个位数MOVA,B ;第一次除法余数 ;做第二次除法被除数MOVB,#10 ;除数10送B 例3-3 在实际压力测量系统中,通过A/D转换器得到8位二进制数测量值,存于A中。利用除法指令把累加器A中的二进制数测量值转换为3位BCD码,并以压缩BCD码形式存放在地址40H、41H单元中。1111 01010110 01000010 11010000 00100000 00100010 11010000 10103. 3. 汇编语言程序设计汇编语言程序设计0100 01010100 0101 ORG 0030H;百位数M

32、OVB,100 ;除数100送BDIVAB MOV40H,A ;十位数和个位数MOVA,B ;第一次除法余数 ;做第二次除法被除数MOVB,#10 ;除数10送BDIVAB ;合SWAPA ORLA,B ;组成压缩BCD码MOV41H,A END 例3-3 在实际压力测量系统中,通过A/D转换器得到8位二进制数测量值,存于A中。利用除法指令把累加器A中的二进制数测量值转换为3位BCD码,并以压缩BCD码形式存放在地址40H、41H单元中。0010 11010000 10100000 00100000 01000000 01010100 0000233. 3. 汇编语言程序设计汇编语言程序设计3

33、.3 顺序程序设计顺序程序设计例3-3 在实际压力测量系统中,通过A/D转换器得到8位二进制数测量值,存于A中。利用除法指令把累加器A中的二进制数测量值转换为3位BCD码,并以压缩BCD码形式存放在地址M1、M2单元中。赋值伪指令赋值伪指令EQUEQU(EquateEquate) 字符名称字符名称EQUEQU赋值项赋值项 其中赋值项可以是常数、地址、标号或者是表达式,以其中赋值项可以是常数、地址、标号或者是表达式,以8 8位或位或1616位二进制数存放。汇位二进制数存放。汇编程序自动把编程序自动把EQUEQU右边的赋值项赋给左边的字符名称。一旦字符名称被赋值它就可以在程右边的赋值项赋给左边的字

34、符名称。一旦字符名称被赋值它就可以在程序中作为数据或地址来多次使用。必须先赋值再使用,故该语句常放在程序开头。序中作为数据或地址来多次使用。必须先赋值再使用,故该语句常放在程序开头。 BUFFER EQU 30HMOV A,#BUFFERMOV B,BUFFERMOV A,#30H;BUFFER做立即数使用做立即数使用MOV B,30H;BUFFER做地址使用做地址使用;先定义;先定义243. 3. 汇编语言程序设计汇编语言程序设计M1 EQU 30H ;赋值伪指令,;赋值伪指令,M1=30HM2 EQU 31H ORG 0030HMOVB,64H;除数;除数100送送BDIVAB;得;得BC

35、D百位数于百位数于AMOVM1,A;BCD百位数存于百位数存于M1中,中,M1作为地址使用作为地址使用MOVA,0AH;取除数;取除数10XCHA,B;第一次余数与第二次除数交换;第一次余数与第二次除数交换DIVAB ;得存;得存A的的BCD十位数和存十位数和存B的的BCD个位数个位数SWAPA;十位数存于;十位数存于A的高的高4位位ADDA,B;组成压缩;组成压缩BCD码码MOVM2,A;压缩;压缩BCD码存码存M2 END 3. 3. 汇编语言程序设计汇编语言程序设计3.2.2 简单程序运行PC=0100HPC=0102H 取指7A23译码执行 PC=0104HPC=0104H 取指7B2

36、4译码执行 PC=0106HPC=0106H 取指7C25译码执行 PC=0108HPC=0108H 取指7D26译码执行 PC=010AHPC=010AH 取指2A译码执行 PC=010BHPC=010BH 取指2B译码执行 PC=010CHPC=010CH 取指2C译码执行 PC=010DHPC=010DH 取指2D译码执行 PC=010EH PC自动加1后形成的值称PC当前值能保证按照指令排列顺序执行程序取指7400译码执行PC=0102H0100H0102H0104H0106H0108H010AH010BH010CH010DHMOV A, #00HMOV R2, #23HMOV R3,

37、 #24HMOV R4, #25HMOV R5, #26HADD A, R2ADD A, R3ADD A, R4ADD A, R574 007A 237B 247C 257D 262A2B2C2DORG 0100HENDMAIN:010EH0000H263. 3. 汇编语言程序设计汇编语言程序设计3.4 分支程序设计分支程序设计程序要求改变执行顺序,特点是含有控制转移类指令(转移目的地址替换程序要求改变执行顺序,特点是含有控制转移类指令(转移目的地址替换PCPC当前值)当前值)无条件转移指令无条件转移指令1 1、长转移指令、长转移指令LJMPLJMP: Long JumpLong JumpLJ

38、MP addr16;PCPC+3 PC当前值PCaddr16 程序实现转移转移范围:任意转移范围:任意1616位地址,即位地址,即64KB64KB空间。空间。ORG 0030HMAIN:ORG 0000HLJMP 0030HORG 0000HLJMP MAIN0030H0032H0034HROMR ROOMM地地址址E 9F 42 40 1F 9E 80031H0035H0000H0002H0 20 03 00001H0003H转转移移常用标号代替常用标号代替addr16addr16,程序员只需在要跳转到的,程序员只需在要跳转到的汇编语句前加标号,由汇编器负责计算。汇编语句前加标号,由汇编器负

39、责计算。LJMP LJMP 273. 3. 汇编语言程序设计汇编语言程序设计3.2.2 3.2.2 简单程序运行简单程序运行1、PC=0000H 取指取指020100译码执行译码执行 PC=0003H 目的地址目的地址0100H装入装入PC替换掉当前值替换掉当前值,程序转移,程序转移2、PC=0100H 取指取指7400译码执行译码执行 PC=0102H3、PC=0102H 取指取指7A23译码执行译码执行 PC=0104H4、PC=0104H 取指取指7B24译码执行译码执行 PC=0106H5、PC=0106H 取指取指7C25译码执行译码执行 PC=0108H6、PC=0108H 取指取

40、指7D26译码执行译码执行 PC=010AH7、PC=010AH 取指取指2A译码执行译码执行 PC=010BH8、PC=010BH 取指取指2B译码执行译码执行 PC=010CH9、PC=010CH 取指取指2C译码执行译码执行 PC=010DH10、PC=010DH 取指取指2D译码执行译码执行 PC=010EHLJMP MAINMAIN = 0100H02 01 00283. 3. 汇编语言程序设计汇编语言程序设计3.4 分支程序设计分支程序设计无条件转移指令无条件转移指令2、绝对转移指令、绝对转移指令AJMP: Absolute JumpAJMP addr11机器码机器码;PCPC+2

41、 PC当前值当前值PCPC当前值高五位当前值高五位 + addr110030H0032H0034HROMR ROOMM地地址址E 9F 42 40 1F 9E 80031H0035H0000H0002H0 20 03 00001H0003H转转移移A10A9A80 0 0 0 1E 8A7A6A5A4A3A2A1A0或或AJMP 转移范围:转移范围:高五位不变的任意高五位不变的任意1111位地址,位地址,按照地址的高五位分成按照地址的高五位分成3232页(每页页(每页2KB2KB),),即即2KB2KB空间。其相当于把空间。其相当于把64KB64KB的的ROMROM空间空间只能在当前页中跳转。

42、只能在当前页中跳转。111100000000000011111111111R ROOMM地地址址0000000000000000111111111110页0000100000000000111111111111111100000000000111111111111页30页31页R ROOMM293. 3. 汇编语言程序设计汇编语言程序设计3.2.2 3.2.2 简单程序运行简单程序运行1、PC=0000H 取指取指2100译码执行译码执行 PC=0002H 目的地址目的地址=0000 0001 0000 0000B=PC,转移,转移2、PC=0100H 取指取指7400译码执行译码执行 PC=

43、0102H3、PC=0102H 取指取指7A23译码执行译码执行 PC=0104H4、PC=0104H 取指取指7B24译码执行译码执行 PC=0106H5、PC=0106H 取指取指7C25译码执行译码执行 PC=0108H6、PC=0108H 取指取指7D26译码执行译码执行 PC=010AH7、PC=010AH 取指取指2A译码执行译码执行 PC=010BH8、PC=010BH 取指取指2B译码执行译码执行 PC=010CH9、PC=010CH 取指取指2C译码执行译码执行 PC=010DH10、PC=010DH 取指取指2D译码执行译码执行 PC=010EH11、PC=010EH 取指

44、取指80FE译码执行译码执行 PC=0110H 目的地址目的地址=0110H + 0FEH = 010E H,转移,转移303. 3. 汇编语言程序设计汇编语言程序设计3.4 分支程序设计分支程序设计3.4.1 3.4.1 无条件转移指令无条件转移指令3、短转移指令和相对寻址方式、短转移指令和相对寻址方式SJMP: Short JumpSJMP rel或或SJMP 机器码机器码PCPC+2 ,PC当前值当前值PCPC当前值当前值+ rel转移范围:转移范围:转移目的地址转移目的地址PCPC当前值当前值+ rel+ relrelrel是是8 8位符号数(补码),因此转移范围位符号数(补码),因此

45、转移范围(PC(PC当前值当前值128)128)(PC(PC当前值当前值+127)+127)relrel 转移目的地址转移目的地址PCPC当前值当前值 补补 = = 转移目的地址转移目的地址(PC+(PC+指令字节数指令字节数)补补 PCPC是转移指令首字节地址是转移指令首字节地址;80rel rel80rel rel是是8 8位符号数(补码位符号数(补码) )相对寻址方式相对寻址方式机器汇编只需在指令写出要转移到语句的标号,由汇编器自动计算相对偏移量。机器汇编只需在指令写出要转移到语句的标号,由汇编器自动计算相对偏移量。原地踏转指令原地踏转指令 SJMP $原地踏转指令一般用于程序结束处,实

46、现原地踏步效果,原地踏转指令一般用于程序结束处,实现原地踏步效果,原地踏转指令原地踏转指令relrel计算:计算: relrel$($+2)($+2)补补 22补补0FEH0FEH$ $表示所在指令的表示所在指令的ROMROM地址。地址。HERE:SJMP HERE313. 3. 汇编语言程序设计汇编语言程序设计 这类指令在执行过程中需要判断某种条件是否满足而决定要不要转移的指令。若这类指令在执行过程中需要判断某种条件是否满足而决定要不要转移的指令。若满足条件就转移,否则程序顺序执行。这类指令无一例外的都是相对寻址方式。满足条件就转移,否则程序顺序执行。这类指令无一例外的都是相对寻址方式。3.

47、4.2 3.4.2 条件转移指令条件转移指令1 1、累加器、累加器A A状态转移指令状态转移指令JZ JNZ JZJZ: J Jump if A is ump if A is Z ZeroeroJNZJNZ: J Jump if A is ump if A is N Not ot Z Zeroero2 2、累加位、累加位C C状态转移指令状态转移指令 JCJC: J Jump if ump if C C is set is setJNCJNC: J Jump if ump if C C is is N Not setot setJC JNC 323. 3. 汇编语言程序设计汇编语言程序设计例、

48、编程比较例、编程比较50H和和51H单元内容,相等单元内容,相等F0(PSW.5)0,否则,否则F01.分析:可以使用异或指令或者带借位减法指令;通过判断运算结果分析:可以使用异或指令或者带借位减法指令;通过判断运算结果A是否为零来是否为零来判断两个数是否相等。判断两个数是否相等。CLR F0 ;相等处理;相等处理SETB F0 ;不相等处理;不相等处理ORG 0030HMOV A, 51HXRL A,50H ;异或运算;异或运算START:JNZ L0 ;不相等转移去标号;不相等转移去标号L0处处ORG 0000HLJMP START;if A!=0,即两数不相等,即两数不相等SJMP $S

49、JMP $L0:SETB F0CLR F0ORG 0030HMOV A, 51HXRL A,50HSTART:JZ L0ORG 0000HLJMP START;if A=0,即两数相等,即两数相等SJMP $;else,两数不相等,两数不相等SJMP $L0:;取;取51H单元内容单元内容ENDEND;else, 两数相等两数相等333. 3. 汇编语言程序设计汇编语言程序设计3.4.2 3.4.2 条件转移指令条件转移指令3 3、bitbit位状态转移指令位状态转移指令JBJB:J Jump if ump if B Bit is set it is set JNBJNB:J Jump if

50、ump if B Bit is it is N Not set ot set JBCJBC:J Jump if ump if B Bit is set and it is set and C Clear bit lear bit JB bit ,JNB bit ,JBC bit ,4 4、比较不等转移指令、比较不等转移指令 CJNECJNE:Compare and Jump if is not EqualCompare and Jump if is not Equal CJNE A ,#data,CJNE Rn ,#data,CJNE Ri ,#data,CJNE A ,direct, 343

51、. 3. 汇编语言程序设计汇编语言程序设计例例3-5 3-5 判断判断2 2个个1616位无符号数位无符号数A A、B B的大小。的大小。A A存放在片内存放在片内RAMRAM的的40H40H、41H41H单元,单元,B B存放在存放在50H50H、51H51H单元中。当单元中。当ABAB时,将内部时,将内部RAMRAM的的42H42H单元内容清单元内容清0 0;否则,将该单元内容置;否则,将该单元内容置1 1。试编写实现此功能的程序。试编写实现此功能的程序。 ORG0030H MAIN:MOV R0,00H ;建立;建立AB标志标志 MOV A,40H ;取;取A高字节高字节 CJNE A,

52、50H,LOOP2 ;与;与B高字节比较高字节比较 ; 若若AB,转移至,转移至LOOP2 MOV A,41H ;取;取A低字节低字节 CJNE A,51H,LOOP2 ;与;与B低字节比较低字节比较 ;若;若AB,转移至,转移至LOOP2 SJMP LOOP3 ;若;若A=B,转移至,转移至LOOP3LOOP2:JNC LOOP4 ;若;若AB,转移至,转移至LOOP4LOOP3:MOV R0,0FFH ;建立;建立AB标志标志LOOP4:MOV 42H,R0 ;存标志;存标志 SJMP $ END353. 3. 汇编语言程序设计汇编语言程序设计3.5 循环程序设计循环程序设计特殊的分支结构

53、,含有重复执行多遍的指令。特殊的分支结构,含有重复执行多遍的指令。 在一个循环程序结构包含在一个循环程序结构包含4 4个部分:个部分:循环变量设置循环变量设置。在循环开始时,往往需要定义一个循环变量(例如循环次数计数。在循环开始时,往往需要定义一个循环变量(例如循环次数计数器,地址指针等),并且给它设置一个初始值。器,地址指针等),并且给它设置一个初始值。循环体循环体。要求重复执行的程序段,即循环程序的主体部分。要求重复执行的程序段,即循环程序的主体部分。循环变量修改循环变量修改。修改循环变量的值,为下一次循环准备条件。修改循环变量的值,为下一次循环准备条件。循环控制循环控制。根据循环结束的条

54、件,判断是否跳出循环。根据循环结束的条件,判断是否跳出循环。363. 3. 汇编语言程序设计汇编语言程序设计3.5 循环程序设计循环程序设计计数控制循环(循环次数已知),常用先执行后判断结构。计数控制循环(循环次数已知),常用先执行后判断结构。减一非零转移指令减一非零转移指令DJNZ DJNZ : : D Decrement and ecrement and J Jump if is ump if is N Not ot Z Zero.ero.DJNZ Rn,DJNZ direct,Rn=Rn-1Rn!=0?PC=PC+2程序顺序执行PC=PC+2+rel程序转移YNdirect=direct

55、-1direct!=0?PC=PC+3程序顺序执行PC=PC+3+rel程序转移YN此指令专用于计数控制循环,此指令专用于计数控制循环,RnRn和和directdirect作为减一计数的循环计数器。作为减一计数的循环计数器。例例3-6 编写一个程序,清空编写一个程序,清空16个数据存储单元,数据存储单元的开始地址是个数据存储单元,数据存储单元的开始地址是60H。 ORG0030H CLR A ;A=0 MOV R1,#60H;建立地址指针;建立地址指针R1=60H MOV R2,#16;计数器赋初值;计数器赋初值R7=16AGAIN:MOVR1,A;通过指针将各单元清;通过指针将各单元清0 I

56、NC R1 ;指针调整;指针调整 DJNZR2,AGAIN SJMP$;原地踏步,停机;原地踏步,停机 END373. 3. 汇编语言程序设计汇编语言程序设计3.2.3 3.2.3 循环程序运行循环程序运行383. 3. 汇编语言程序设计汇编语言程序设计例例3-7 计算从片内计算从片内RAM的的50H单元开始的单元开始的10个个BCD数的累加和。数的累加和。 ORG 0000H LJMP MAIN ORG 0030HMAIN: MOVR3,00H;清累加和的高位;清累加和的高位 MOVR4,00H;清累加和的低位;清累加和的低位 MOVR2,10;循环计数器初值;循环计数器初值 MOVR0,5

57、0H;指针指向;指针指向50H单元单元 MOVA,R4;取累加和低字节;取累加和低字节 ADDA,R0;累加和低字节相加;累加和低字节相加 DAA;BCD数调整数调整 JNCNEXT;如果无进位,则转移到;如果无进位,则转移到NEXT INCR3;如有进位,高字节加;如有进位,高字节加1NEXT: INCR0;修改指针,指向新的单元;修改指针,指向新的单元 DJNZR2,LOOP;判断是否累加完毕;判断是否累加完毕 MOVR4,A;存累加和低位;存累加和低位 SJMP$;停机;停机 ENDLOOP:393. 3. 汇编语言程序设计汇编语言程序设计3.5 循环程序设计循环程序设计例例3-8 将片

58、内将片内RAM 20H单元数据中的单元数据中的 1的个数统计出来。结果存的个数统计出来。结果存20H单元。单元。 ORG 0030HMAIN:MOVR1,00H;1 1的计数单元清的计数单元清0 0 MOVR2,08H ;循环计数器置初值;循环计数器置初值 MOVA,20H;取数据;取数据LOOP: RLCA;左移一位,待判定位移入;左移一位,待判定位移入C JNCNEXT ;如果进位位为;如果进位位为0,则转移到,则转移到NEXT INCR1;如进位位为;如进位位为1,计数单元加,计数单元加1 NEXT: DJNZR2,LOOP;判断是否判断完毕;判断是否判断完毕 MOV20H,R1;存计数

59、结果;存计数结果 SJMP$;停机;停机 END 403. 3. 汇编语言程序设计汇编语言程序设计3.6 3.6 子程序结构子程序结构完成某一专用任务并能为其他程序反复调用的程序段称为子程序,调用子程序的完成某一专用任务并能为其他程序反复调用的程序段称为子程序,调用子程序的程序称为调用程序或主程序。程序称为调用程序或主程序。子程序人口地址子程序返回指令调用指令主程序调用与返回调用与返回1、调用指令:、调用指令:保存断点地址保存断点地址提供子程序人口地址提供子程序人口地址长调用指令长调用指令LCALL: Long CallLCALL addr16机器码机器码或或LCALL ;12addr16SP

60、=SP+1 *SP=PC70PC=PC+3 断点地址断点地址SP=SP+1 *SP=PC158调用范围:全部调用范围:全部ROM的的64KB空间。空间。例、下列程序执行到例、下列程序执行到LCALL指令指令(地址地址0100H)后,求断点地址,以及堆栈的值。后,求断点地址,以及堆栈的值。MOV SP,#60HLCALL SQUR断点地址:断点地址: 0100H+30103HSP62H(61H)03H(62H)01HPC=addr16转向子程序入口地址转向子程序入口地址413. 3. 汇编语言程序设计汇编语言程序设计3.6 3.6 子程序结构子程序结构调用与返回调用与返回2、返回指令:、返回指令

温馨提示

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

评论

0/150

提交评论