汇编语言程序设计X.ppt

上传人:wuy****n92 文档编号:69245606 上传时间:2023-01-01 格式:PPT 页数:47 大小:1.04MB
返回 下载 相关 举报
汇编语言程序设计X.ppt_第1页
第1页 / 共47页
汇编语言程序设计X.ppt_第2页
第2页 / 共47页
点击查看更多>>
资源描述

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

1、第三章第三章 MCS-51MCS-51单片机单片机汇编语言程序设计汇编语言程序设计内容提要:3-2汇编语言及汇编过程汇编语言及汇编过程3-1汇编语言程序设计概述汇编语言程序设计概述3-3汇编语言程序的基本结构及应用举例汇编语言程序的基本结构及应用举例3-4编程综合举例编程综合举例高级语言高级语言:3 3-1 -1 汇编语言程序设计概述汇编语言程序设计概述 一、汇编语言的特点及其语句格式一、汇编语言的特点及其语句格式汇编语言汇编语言:机器语言机器语言:程序设计语言:程序设计语言:用二进制代码表示指令和数据。用二进制代码表示指令和数据。用助记符表示指令操作功能,用标号表示操作对象。用助记符表示指令

2、操作功能,用标号表示操作对象。独立于机器独立于机器,面向过程面向过程,接近自然语言和数学表达式接近自然语言和数学表达式.助记符指令和机器指令一一对应,效率高、占用存储空助记符指令和机器指令一一对应,效率高、占用存储空间小、运行速度快,编制的程序是最优化的程序。间小、运行速度快,编制的程序是最优化的程序。使用汇编语言编程比使用高级语言编程困难,要深入了使用汇编语言编程比使用高级语言编程困难,要深入了解硬件。解硬件。汇编语言能直接管理和控制存储器及接口电路等硬件设汇编语言能直接管理和控制存储器及接口电路等硬件设备,也能处理中断。备,也能处理中断。汇编语言无通用性,程序不易移植,各种计算机的汇编汇编

3、语言无通用性,程序不易移植,各种计算机的汇编语言不能通用。语言不能通用。1汇编语言的特点汇编语言的特点标标号号语句地址的标志符号,其它语句访问该语句的地址。语句地址的标志符号,其它语句访问该语句的地址。1-8个个ASC字符组成,第一个字符必须是字母。字符组成,第一个字符必须是字母。不能使用本汇编语言已经定义了的符号作标号不能使用本汇编语言已经定义了的符号作标号(助记符伪指助记符伪指令寄存器名等令寄存器名等)。标号后为冒号标号后为冒号(:)。一个程序中的标号不能重复定义一个程序中的标号不能重复定义。标号不是必须的,其它语句访问该语句时才定义标号。标号不是必须的,其它语句访问该语句时才定义标号。操

4、作码操作码表示了该指令所能执行的操作功能表示了该指令所能执行的操作功能。操作数操作数表示参加操作的数的本身或操作数所在的地址。表示参加操作的数的本身或操作数所在的地址。标号:标号:操作码助记符操作码助记符 第一操作数第一操作数,第二操作数,第二操作数;注释;注释2汇编语言的语句格式汇编语言的语句格式MCS-51指令格式:指令格式:在程序中需对数据的存放、寄存器和工作单元的使用作出具在程序中需对数据的存放、寄存器和工作单元的使用作出具体安排。体安排。要对单片机的硬件结构有详细的了解。要对单片机的硬件结构有详细的了解。程序设计的技巧性。程序设计的技巧性。二、汇编语言程序设计的特点二、汇编语言程序设

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

6、各条机器码,字符标号原样写出;原样写出;第二次汇编:标号代真,将字符标号用所计算出的具体第二次汇编:标号代真,将字符标号用所计算出的具体地址值或偏移量代换。地址值或偏移量代换。源程序源程序目标程序目标程序地址地址 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,#44H#44H

7、,NEXTNEXT INC R2 INC R2 NEXT NEXT:DJNZ R3DJNZ R3,LOOPLOOP MOV MOV 2AH2AH,R2 R2 SJMP$SJMP$END END第一次汇编第一次汇编第二次汇编第二次汇编1000A82F10027A001004E61005FB10060B100780NEXT100908100AB644NEXT100D0A100EDBLOOP10108A2A101280FEA82F7A00E6FB0B800508B644010ADBF98A2A80FE2 2、机器汇编、机器汇编借助微机或开发器进行单片机的程序借助微机或开发器进行单片机的程序设计,编辑

8、一个扩展名为设计,编辑一个扩展名为“.ASMASM的的ASCASC码文件码文件,然后用汇编程序进行汇编。然后用汇编程序进行汇编。单片机指令单片机指令伪指令伪指令宏指令宏指令源源程程序序编辑程序编辑程序交叉汇编程序交叉汇编程序列表文件列表文件目标文件目标文件单片机调试运行单片机调试运行编辑包含一段独立代码包含一段独立代码原程序和机器码原程序和机器码16进进制制代代码码机器汇编是一个两次扫描过程。机器汇编是一个两次扫描过程。第一次扫描:第一次扫描:检查语法错误,确定符号名字;检查语法错误,确定符号名字;建立使用的全部符号名字表;建立使用的全部符号名字表;每一符号名字后跟一对应值(地址或数)。每一符

9、号名字后跟一对应值(地址或数)。第二次扫描:第二次扫描:是在第一次扫描基础上,将符号地址转换成是在第一次扫描基础上,将符号地址转换成 地址(代真);利用操作码表将助记符转换地址(代真);利用操作码表将助记符转换 成相应的目标码。成相应的目标码。三、伪指令三、伪指令 伪指令是告诉汇编程序,如何汇编源程序的指令。伪指令是告诉汇编程序,如何汇编源程序的指令。伪指令既不控制机器的操作,也不能被汇编成机器代码,伪指令既不控制机器的操作,也不能被汇编成机器代码,故称为伪指令。故称为伪指令。1 1、起始地址伪指令、起始地址伪指令 ORGORG(ORiGin)ORG addr16ORG addr16 用于规定

10、目标程序段或数据块的起始地址,用于规定目标程序段或数据块的起始地址,设置在程序开始处。设置在程序开始处。2 2、汇编结束伪指令、汇编结束伪指令 ENDEND(END of assemblyEND of assembly)告诉汇编程序,对源程序的汇编到此结束。告诉汇编程序,对源程序的汇编到此结束。一个程序中只出现一次,在末尾。一个程序中只出现一次,在末尾。3 3、赋值伪指令、赋值伪指令 EQUEQU(EQUateEQUate)告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。格式:格式:标号名称标号名称 EQU EQU 数值或汇编符号数值或汇

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

12、 WordDefine Word)的字符串(的字符串(ASCASC)从指定地址开始,定义若干个从指定地址开始,定义若干个1616个位数据,高八位存入低地址;个位数据,高八位存入低地址;低八位存入高地址。(定义地址)低八位存入高地址。(定义地址)例、例、ORG 1000HORG 1000H PIOI PIOI:DW 7654HDW 7654H,40H40H、1212、ABAB6 6、数据地址赋值伪指令、数据地址赋值伪指令 DATADATA 将表达式指定的数据地址赋予规定的字符名称将表达式指定的数据地址赋予规定的字符名称 格式:格式:字符名称字符名称 DATA DATA 表达式表达式注:该指令与注

13、:该指令与EQUEQU指令相似,只是,可先使用后定义,指令相似,只是,可先使用后定义,放于程序开头、结尾均可。放于程序开头、结尾均可。7 7、定义空间伪指令、定义空间伪指令 DSDS 从指定地址开始,保留由表达式指定的若干字节空间作从指定地址开始,保留由表达式指定的若干字节空间作 为备用空间。为备用空间。格式:格式:标号:标号:DS DS 表达式表达式例例2 2、ORG 1000HORG 1000H DS 0AH DS 0AH DB 71H DB 71H,11H11H,11H 11H ;从从100100BHBH开始存放开始存放 ;7171H11HH11H、11H11H。注:注:DBDB、DWD

14、W、DS DS 只能用于程序存储器;只能用于程序存储器;而不能用于数据存储器。而不能用于数据存储器。8 8、位地址赋值伪指令、位地址赋值伪指令 BITBIT将位地址赋予规定的字符名称。将位地址赋予规定的字符名称。格式:格式:字符名称字符名称 BIT BIT 位地址位地址例例3 3、X1 BIT P1.2X1 BIT P1.2 相当于相当于 X1 EQU 92HX1 EQU 92H3 3-3 -3 汇编语言程序的基本结构汇编语言程序的基本结构及应用举例及应用举例程序编写做到:程序编写做到:占用存储空间少;占用存储空间少;运行时间短;运行时间短;程序的编制、调试及排错所需时间短;结构清晰,易读、易

15、于移植。程序的编制、调试及排错所需时间短;结构清晰,易读、易于移植。按结构化程序设计思想,任何复杂程序都可由按结构化程序设计思想,任何复杂程序都可由顺序结构、顺序结构、分支结构、分支结构、循环结构循环结构 子程序结构子程序结构语句 3语句 2顺序结构顺序结构入口入口语句 1出口出口分支结构分支结构入口入口条件满足否?分支 1出口出口YN 分支 2循环结构循环结构入口入口 处理 修改条件条件满足否?Y出口出口N一、顺序程序举例一、顺序程序举例例例1 1、设在片内、设在片内RAMRAM的的6060H H单元存有单元存有1 1个字节代码,要求将其分解成两个字节代码,要求将其分解成两个个4 4位字段,

16、高位字段,高4 4位存入原单元的低位存入原单元的低4 4位,其低位,其低4 4位存入位存入6161H H单元的低单元的低4 4位,且要求这两个单元的高位,且要求这两个单元的高4 4位均为位均为0 0,试编制完整程序。,试编制完整程序。分析:#¥61H60H解:核心指令解:核心指令 ANLANL ORL 1000H ORL 1000H MODE MODE:MOV R0MOV R0,#60H#60H MOV A MOV A,R0R0 MOV B MOV B,A A ANL A ANL A,#0F0H#0F0H SWAP A SWAP A MOV R0 MOV R0,A A ANL B ANL B,

17、#0FH#0FH MOV A MOV A,B B INC R0 INC R0 MOV R0 MOV R0,A A END END二、分支结构与分支程序设计二、分支结构与分支程序设计1 1 单分支程序单分支程序结构:根据不同的条件,进行相应的处理。结构:根据不同的条件,进行相应的处理。通常用条件转移指令形成简单分支结构。通常用条件转移指令形成简单分支结构。如:如:判(判(A A)=Z =Z 或或 NZ NZ,转移转移(JZ,JNZ)JZ,JNZ)判(判(CYCY)=1=1 或或 0 0 ,转移,转移(JC,JNC)JC,JNC)判(判(bitbit)=1=1 或或 0 0 ,转移,转移(JB,J

18、NB,JBC)JB,JNB,JBC)CJNE CJNE 比较不相等转移比较不相等转移DJNZ减减1条件转移条件转移单分支程序举例单分支程序举例例例1 1、设在外、设在外RAMRAM的的ST1ST1、ST2ST2和和ST3ST3共三个连续单元,其中共三个连续单元,其中ST1ST1、ST2ST2存放着两个存放着两个8 8位无符号二进制数,要求找出其中大数存入位无符号二进制数,要求找出其中大数存入ST3ST3中。中。START:CLRC;进位位清进位位清”0“MOVDPTR,#ST1;设置数据指针设置数据指针MOVXA,DPTR;取第一个数取第一个数MOVR2,A;第一个数存第一个数存R2INCDP

19、TR;数据指针加数据指针加1MOVXA,DPTR;取第二个数取第二个数SUBBA,R2;两数比较两数比较JNCBIG1;第二个数大转第二个数大转BIG1XCHA,R2BIG0:INCDPTRMOVXDPTR,A;存大数存大数RETBIG1:MOVXA,DPTRSJMPBIG0例例2 2、设、设a a存放在累加器存放在累加器A A中,中,b b存放在寄存器存放在寄存器B B中,要求按下式中,要求按下式 计算计算Y Y值,并将结果值,并将结果Y Y存于累加器存于累加器A A中,试编写程序。中,试编写程序。a-b a-b (a0a0)Y=Y=a+b a+b (a 0a 0)解:本题关键是判解:本题关

20、键是判a a是正数,还是负数;由是正数,还是负数;由ACC.7ACC.7便知。便知。ORG 1000HORG 1000H BR BR:JB ACC.7 JB ACC.7,MINUSMINUS CLR C CLR C SUBB A SUBB A,B B SJMP DONE SJMP DONE MINUS MINUS:ADD A ADD A,B B DONE DONE:SJMP SJMP ENDEND2 2 多分支程序多分支程序多分支程序结构多分支程序结构K=?转向转向0分支分支转向转向1分支分支转向转向n-1分支分支转向转向n分支分支K=0K=1K=n-1K=n指令系统中没有多分支转移指令指令系

21、统中没有多分支转移指令,无法使用单条指令完成多分支转移无法使用单条指令完成多分支转移例例3 3、某温度控制系统采集的温、某温度控制系统采集的温度值度值TaTa放在放在A A中中,内内RAM 54HRAM 54H放下放下限值限值T54,55HT54,55H放上限值放上限值T55,T55,若若TaTaT55,T55,程序转向程序转向JW,JW,若若TaTaT54,T54,程序转向程序转向SW,SW,若若T55TaT54T55TaT54程程序转向序转向FH多分支程序举例多分支程序举例(1)使用多条使用多条CJNE指令指令,连续比较连续比较,实现多分支转移实现多分支转移(A)=0?(A)=1?(A)=

22、2?转向转向0分支分支转向转向1分支分支转向转向2分支分支CJNEA,55H,LOOP1;TaT55,转转LOOP1AJMPFH;Ta=T55,返回返回LOOP1:JNCJW;若(若(CY)=0,则则TaTaT55T55,转转JWJW CJNEA,54H,LOOP2;TaT54,转转LOOP2AJMPFH;Ta=T54,返回返回LOOP2:JCSW;若(若(CY)=1,则则TaTaT54T54,转转SWSWFHFH:RET RET多分支程序举例多分支程序举例(2)使用查转移指令表的方法实现多分支转移使用查转移指令表的方法实现多分支转移也是以查表实现多分支程序转移,但表中放转移指令,转移也是以查

23、表实现多分支程序转移,但表中放转移指令,转移指令用指令用AJMP,转移范围是转移范围是2KB(128分支分支),用,用LJMP是是64K键功能键值处理程序读数据01DS写数据02XS插入03CR例例5假定键盘上有假定键盘上有3个操作键,键值已读个操作键,键值已读入入A中,其功能为:中,其功能为:.MOVDPTR,#BRTABCLRCRLCAJMPA+DPTRBRTAB:NOPNOPAJMPDSAJMPXSAJMPCR.三、循环程序三、循环程序循循环环是是为为了了重重复复执执行行一一个个程程序序段段循循环环是是为为了了重重复复执执行行一一个个程程序序段段,汇汇 编编 语语 言言 没没 有有 专专

24、 用用 循循 环环 指指 令令汇汇 编编 语语 言言 没没 有有 专专 用用 循循 环环 指指 令令,只只只只能能用用条条件件转转移移指指令令通通过过条条件件判判断断能能用用条条件件转转移移指指令令通通过过条条件件判判断断来来 控控 制制 循循 环环 是是 继继 续续 还还 是是 结结 束束来来 控控 制制 循循 环环 是是 继继 续续 还还 是是 结结 束束循环结构不但使程序简练,而且大大节省存储空间。循环结构不但使程序简练,而且大大节省存储空间。循环程序包含四部分:循环程序包含四部分:、初始化部分(循环计数器、变量置初值)初始化部分(循环计数器、变量置初值)、循环处理部分(主体,需要重复执

25、行的部分)循环处理部分(主体,需要重复执行的部分)、循环控制部分(修改地址指针、修改变量、检测循环控制部分(修改地址指针、修改变量、检测循环结束条件)循环结束条件)、循环结束部分(对结果分析、处理,存放结果)循环结束部分(对结果分析、处理,存放结果)先处理,后判断:先处理,后判断:开始初始化部分处理部分修改变量循环结束?结束部分结束先判断,后处理:先判断,后处理:开始初始化部分修改变量循环结束?结束部分结束处理部分循环有:单循环、多重循环。循环有:单循环、多重循环。循环次数已知,可用计数器控制循环次数;循环次数已知,可用计数器控制循环次数;循环次数未知,按问题条件控制循环是否结束。循环次数未知

26、,按问题条件控制循环是否结束。1 1、单循环程序、单循环程序(1 1)循环次数是已知的程序)循环次数是已知的程序例例1 1、已知片外、已知片外RAMRAM的的101000H00H单元存放一单元存放一8 8位二进制数,要求将其转移位二进制数,要求将其转移成相应的成相应的ASCIIASCII码,并以高位在前,低位在后的顺序,依次存放到码,并以高位在前,低位在后的顺序,依次存放到片内片内RAMRAM以以40H40H为首地址的连续单元中,试编程。为首地址的连续单元中,试编程。解:先将中间单元置成解:先将中间单元置成3030H H,然后判欲转换位是否为然后判欲转换位是否为1 1,若是,则将中间单元内容加

27、若是,则将中间单元内容加1 1;否则,中间单元内容保持不变。;否则,中间单元内容保持不变。通过左移指令实现由高到低的顺序进行转换。通过左移指令实现由高到低的顺序进行转换。START START:MOV R2MOV R2,#08H#08H ;循环计数初值(循环次数已知)循环计数初值(循环次数已知)MOV DPTRMOV DPTR,#1000H#1000H;地址指针初值;地址指针初值 MOV R0 MOV R0,#3FH#3FH ;地址指针初值;地址指针初值 MOVX AMOVX A,DPTR DPTR ;取数取数 MOV BMOV B,A A ;暂存暂存B B中中 LOOPLOOP:MOV AM

28、OV A,#30H#30H ;将中间单元(将中间单元(A A)置成置成3030H H JNB B.7 JNB B.7,NA NA ;判断转换的二进制位为判断转换的二进制位为0 0否?否?INC A INC A ;若为若为1 1,则变成,则变成1 1的的ASCIIASCII码码“3131H H”NA NA:INC R0 INC R0 ;修改地址指针修改地址指针 MOV R0MOV R0,A A ;存放转换的结果存放转换的结果 MOV AMOV A,B B RL A RL A ;作好准备,判断下一位作好准备,判断下一位 MOV BMOV B,A A ;暂存暂存 DJNZ R2DJNZ R2,LOO

29、P LOOP ;判断转换结束否?未完继续判断转换结束否?未完继续 SJMP SJMP (2 2)循环次数未知的程序)循环次数未知的程序例例2 2、设用户用键盘输入长度不超过、设用户用键盘输入长度不超过100100字节的字符串放在字节的字符串放在80318031单片单片机外部机外部RAMRAM以以202000H00H为首地址的连续单元,该字符串用回车符为首地址的连续单元,该字符串用回车符CRCR(CRCR=0DH=0DH)作为结束标志,要求统计此字符串的长度并存入作为结束标志,要求统计此字符串的长度并存入内部内部RAMRAM的的1 1FHFH单元中。单元中。解:从首单元开始取数,每取一数判断其是

30、否为解:从首单元开始取数,每取一数判断其是否为CRCR,是则结束。是则结束。ORG 1000HORG 1000HSTADA DATA 1FFFHSTADA DATA 1FFFHSLANG DATA 1FHSLANG DATA 1FHCMCR2CMCR2:MOV DPTRMOV DPTR,#STADA#STADA MOV B MOV B,#0FFH#0FFHCRLOPCRLOP:INC DPTRINC DPTR INC B INC B MOVX A MOVX A,DPTRDPTR CJNE A CJNE A,#0DH#0DH,CRLOPCRLOP MOV SLANG MOV SLANG,B B

31、SJMP SJMP END END3 3-4 -4 编程综合举例编程综合举例一、加减法运算一、加减法运算两个两个N N字节无符号数分别存放在内字节无符号数分别存放在内RAMRAM的单元中,低字节在前,高字节在的单元中,低字节在前,高字节在后,后,R0R0指定被减数单元地址,指定被减数单元地址,R1R1指定减数单元地址,差放原被减数单元指定减数单元地址,差放原被减数单元CLRC;清进位位清进位位MOVR2,#N;设定字节数设定字节数LOOP:MOVA,R0;从低位取被减数的一个字节从低位取被减数的一个字节SUBBA,R1;两数相减两数相减MOVR0,A;存字节相减的差存字节相减的差INCR0IN

32、CR1DJNZR2,LOOP;两数相减完否两数相减完否JCQAZ;最高字节有借位转溢出处理最高字节有借位转溢出处理RET二、乘法运算二、乘法运算进进行行两两个个双双字字节节无无符符号号数数乘乘法法运运算算,被被乘乘数数和和乘乘数数分分别别放放在在内内RAM的的R2、R3单单元元和和R6、R7单单元元中中,其其中中R2、R6为为高高字字节节,相相乘乘结结果果(积积)依依 次次 放放 在在R 4、R 5、R 6、R 7中中R2R3R6R7()R3R7H R3R7LR5R7R2R7H R2R7L()()R7R4R5R3R6H R3R6L()()R7R6R5F0R2R6L()()R7R6R5ACC.0

33、R2R6H()()R7R6R5R4DBMUL:MOVA,R3MOVB,R7MULAB;R3*R7(得到第一次部分积得到第一次部分积)XCHA,R7;原原R7内容送内容送A,R7R3R7L(在在R7中得到中得到乘积的第四字节乘积的第四字节)MOVR5,B;R5R3R7HMOVB,R2MULAB;R2*R7(得到第二次部分积得到第二次部分积)ADDA,R5;R2R7L+R3R7HMOVR4,A;R4和和CLRAADDCA,B;R2R7H+(R2R7L+R5时产生的进位时产生的进位)MOVR5,A;R5和和MOVA,R6MOVB,R3MULAB;R3*R6(得到第三次部分积得到第三次部分积)ADDA

34、,R4;R3R6L+R4XCHA,R6;AR6,R6R3R6L+R4(在在R6中中得到乘积的第三字节得到乘积的第三字节)R2 R3R6 R7R3R7H R3R7LR5 R7R2R7H R2R7LR7R4R5R3R6H R3R6LR7R6R5F0R2R6LR7R6R5ACC.0R2R6HR7R6R5R4XCHA,B;AR3R6H,BR6ADDCA,R5;R3R6H+R5+(R3R6L+R4时产生的进位时产生的进位)MOVR5,A;R5和和MOVF0,C;F0进位进位MOVA,R2MULAB;R2*R6(得到第四次部分积得到第四次部分积)ADDA,R5;R2R6L+(R3R6H+R5时产生的进位时

35、产生的进位)MOVR5,A;在在R5中得到乘积的第二字节中得到乘积的第二字节CLRAMOVACC.0,C;累加器最高位累加器最高位进位进位MOVC,F0ADDCA,B;R2R6H+F0+ACC.0MOVR4,A;在在R4中得到乘积的第一字节中得到乘积的第一字节RETR2R3R6R7R3R7HR3R7LR5R7R2R7HR2R7LR7R4R5R3R6HR3R6LR7R6R5F0R2R6LR7R6R5ACC.0R2R6HR7R6R5R4三、除法运算三、除法运算除法指令除法指令DIVAB是对单字节的,多字节除法不能直接使用,是对单字节的,多字节除法不能直接使用,需要编程实现。常用的一种方法是需要编程

36、实现。常用的一种方法是“移位相减移位相减”,即按位进行:从,即按位进行:从被除数高位逐位减去除数,够减商加被除数高位逐位减去除数,够减商加1,依次一直循环到最后一位。,依次一直循环到最后一位。移位方法:被除数向余数单元左移,而被除数腾出的低位用于移位方法:被除数向余数单元左移,而被除数腾出的低位用于存放商数,这样,除法完成后,被除数已经全部移到余数单元存放商数,这样,除法完成后,被除数已经全部移到余数单元并逐次减掉除数得到余数,而且被除数单元已经被商数代替。并逐次减掉除数得到余数,而且被除数单元已经被商数代替。在大部分程序中,运算结束后,进行对余数的在大部分程序中,运算结束后,进行对余数的“四

37、舍五入四舍五入”处理处理两个双字节无符号数的除法两个双字节无符号数的除法数据单元分配:数据单元分配:R7R6:被除数,程序执行后存商数被除数,程序执行后存商数R5R4:除数除数R3R2:存每次相除的余数,完成后为最终余数存每次相除的余数,完成后为最终余数3AH:溢出标志单元,除数为溢出标志单元,除数为0,置,置3AH单元为单元为”0FFH“R1:循环次数计数器(循环次数计数器(16次)次)R7R6R3R2R5R4()()WDIV:MOV3AH,#00H;清溢出标志单元清溢出标志单元MOVA,R5JNZZERO;除数高位不为除数高位不为0转转MOVA,R4JZOVER;除数为除数为0转溢出处理转

38、溢出处理ZERO:MOVA,R7JNZSTART;被除数高字节不为被除数高字节不为0开始运算开始运算MOVA,R6JNZSTART;被除数低字节不为被除数低字节不为0开始运算开始运算RET;被除数字节为被除数字节为0结束程序结束程序START:CLRA;开始除法运算开始除法运算MOVR2,A;余数单元清余数单元清”0“MOVR3,AMOVR1,#10H;置循环次数为置循环次数为10HLOOP:CLRC;进行一位除法运算进行一位除法运算MOVA,R6RLCAMOVR6,AMOVA,R7RLCAMOVR7,AMOVA,R2;移出的被除数高位移入余数单元移出的被除数高位移入余数单元R7R6:被除数被

39、除数R5R4:除数除数R7R6R3R2R5R4()()RLCAMOVR2,AMOVA,R3RLCAMOVR3,AMOVA,R2;余数减除数余数减除数SUBBA,R4;低位先减低位先减JCNEXT;不够减转移不够减转移MOVR0,AMOVA,R3SUBBA,R5;再减高位再减高位JCNEXT;不够减转移不够减转移INCR6;够减商为够减商为1MOVR3,A;相减结果送回余数单元相减结果送回余数单元MOVA,R0MOVR2,ANEXT:DJNZR1,LOOP;不够不够16次返回次返回;四舍五入处理四舍五入处理OVER:MOV3AH,#0FFH;除数为除数为0置溢出标志置溢出标志RETR7R6:被除

40、数被除数R5R4:除数除数R7R6R3R2R5R4()()四、十六进制数转换为四、十六进制数转换为ASC码码 ORG 2000H ORG 2000HH2ASC:MOV A,R2 ;H2ASC:MOV A,R2 ;取待转换的数据取待转换的数据(入口入口)ADD A,#0F6H ;ADD A,#0F6H ;判此数是否判此数是否10 10?若若10,10,则则C=1C=1;10,10,则则C=0C=0 MOV A,R2 ;MOV A,R2 ;重取待转换的数据重取待转换的数据 JNC AD30H ;JNC AD30H ;小于小于1010就跳去加就跳去加30H30H ADD A,#07H ;10 ADD

41、 A,#07H ;10就先加就先加7 7 再去加再去加30H 30H AD30H:ADD A,#30H AD30H:ADD A,#30H MOV R2,A ;MOV R2,A ;存结果存结果(出口出口)RET RET例例:16:16进制数进制数(00H(00H0FH)0FH)转转ASCIIASCII码子程序码子程序算法:凡算法:凡1010的十六进制数加的十六进制数加37H37H;凡;凡1010的十六进制数加的十六进制数加 30H30H。(参见参见 ASCIIASCII码表码表)ie.0)ie.09 30H9 30H39H,A39H,AF 41HF 41H46H 46H 五、五、ASC码转换为码

42、转换为16进制数进制数在在片片内内RAM的的30H3FH单单元元中中的的ASC码码依依次次转转换换为为16进进制制数数(高高位位在在前前),存存放放在在内内RAM的的60H67H单单元元中中转转 换换 算算 法法:计计 算算 法法,把把A S C码码 减减3 0H,其其 结结 果果:若若小小于于0,为为非非1 6进进制制数数;若若为为0 9 即即为为转转换换结结果果;若若 大大 于于 等等 于于0A H,应应 再再 减减7,减减7后后:若若 在在0AH0FH之之间间即即为为转转换换结结果果若若小小于于0AH或或大大于于0FH,也也是是非非16进进制制数数清C通过R0间址取数,并减30H是否小于

43、0是否00H09H减07H小于0AH?大于0FH?返回非16进制数YYYYNNN转换子程序流程转换子程序流程主程序设置ASC码地址指针(R0)=30H设置16进制地址指针(R1)=60H设置拼装字节个数(R7)=08H取出待转换的ASC码调用ASC码16转换子程序A的高低4位交换转换结果存16进制缓冲区调用ASC码16转换子程序与上一个16进制数拼装拼装结果送16进制数缓冲区(R0)+1R0,(R1)1R1(R7)-1=0?结束NY主程序流程主程序流程入口参数:R0间址出口参数:AMAIN:MOVR0,#30H;设置设置ASC码地址指针码地址指针MOVR1,#60H;设置设置16进制数地址指针

44、进制数地址指针MOVR7,#08H;拼装的拼装的16进制数字节个数进制数字节个数AB:ACALLTRAN;调用转换子程序调用转换子程序SWAPA;A高低高低4位交换位交换MOVXR1,A;存放外部存放外部RAMINCR0ACALLTRAN;调用转换子程序调用转换子程序XCHDA,R1;16进制数拼装进制数拼装INCR0INCR1DJNZR7,AB;继续继续HALT:AJMPHALTTRAN:CLRC;清进位位清进位位MOVXA,R0;取取ASC码码SUBBA,#30H;减减30HJCERRORCJNEA,#0AH,BBBB:JCDONESUBBA,#07HCJNEA,#0AH,BCBC:JCE

45、RRORCJNEA,#10H,BDBD:JNCERRORRET;返回返回ERROR:MOV A,#0FFHRET六、布尔处理机的应用六、布尔处理机的应用假假设设有有下下列列逻逻辑辑方方程程,试试求求解解:Q=U(V+W)+(XY)+Z.此方程可用硬件求解也可用软件求解,下图是用此方程可用硬件求解也可用软件求解,下图是用TTL硬件求解的方案硬件求解的方案&1。1&。UVWXYZQ.Q=U(V+W)+(XY)+Z软件求解方法:软件求解方法:1利用字节型逻辑指令的方法利用字节型逻辑指令的方法2利用位测试指令的方法利用位测试指令的方法3利用布尔处理机逻辑操作指令子集的方法利用布尔处理机逻辑操作指令子集

46、的方法假定:假定:U和和V是输入引脚是输入引脚P1.1和和P1.2,W和和X是是2个外设控制个外设控制器的状态位器的状态位TF0(TCON.5)和和IE1(TCON.3),),Y和和Z是程是程序中设置的软件标志序中设置的软件标志20H.0和和21H.1,Q是输出口引脚是输出口引脚P3.3。布尔处理机逻辑操作指令求解程序布尔处理机逻辑操作指令求解程序UBITP1.1VBITP2.2WBITTF0XBITIE1YBIT20H.0ZBIT21H.1QBITP3.3MOVC,VORLC,WANLC,UMOVF0,CMOVC,XANLC,/YORLC,F0ORLC,/ZMOVQ,C上述三种程序的效益比较上述三种程序的效益比较:占用存储器字节数占用存储器字节数执行周期数执行周期数字节型逻辑指令字节型逻辑指令5065位测试指令位测试指令2416布尔处理机指令集布尔处理机指令集1818由此可见由此可见:布尔处理机在求解逻辑布尔处理机在求解逻辑方程的应用中十分简单并且有效方程的应用中十分简单并且有效

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

当前位置:首页 > 教育专区 > 大学资料

本站为文档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