80C51汇编语言程序设计课件

上传人:风*** 文档编号:240742710 上传时间:2024-05-04 格式:PPT 页数:43 大小:1.69MB
返回 下载 相关 举报
80C51汇编语言程序设计课件_第1页
第1页 / 共43页
80C51汇编语言程序设计课件_第2页
第2页 / 共43页
80C51汇编语言程序设计课件_第3页
第3页 / 共43页
点击查看更多>>
资源描述
了解汇编语言的特点,明确程序设计的基本思了解汇编语言的特点,明确程序设计的基本思路路 熟悉汇编语言的语句结构,能正确书写汇编语熟悉汇编语言的语句结构,能正确书写汇编语言程序言程序 理解伪指令的功能,能正确使用理解伪指令的功能,能正确使用80C5180C51常用伪指常用伪指令令 熟悉几种基本的程序结构熟悉几种基本的程序结构 能读懂教材中的程序实例,学会编写同等难度能读懂教材中的程序实例,学会编写同等难度的应用程序的应用程序 本章学习目标本章学习目标 :2024/5/41 单片机应用系统由单片机应用系统由硬件系统硬件系统和和应用程序应用程序构成构成 汇编语言汇编语言 高级语言高级语言 应用程序设计方法应用程序设计方法 汇编语言汇编语言,生成的目标程序占内存空间少、运行速,生成的目标程序占内存空间少、运行速度快,具有效率高、实时性强度快,具有效率高、实时性强,适合于编写短小高速的适合于编写短小高速的程序。程序。高级语言高级语言,对系统的功能描述与实现简单,程序阅,对系统的功能描述与实现简单,程序阅读、修改和移植方便,适合于编写复杂的程序。读、修改和移植方便,适合于编写复杂的程序。2024/5/424.1 程序编制的方法和技巧程序编制的方法和技巧4.1.1 4.1.1 程序编制的步骤程序编制的步骤 明确任务:功能要求、技术指标明确任务:功能要求、技术指标 运行环境调研运行环境调研一、任务分析一、任务分析 将实际问题转化为计算机处理的程序算法将实际问题转化为计算机处理的程序算法 算法比较与优化(内存需求算法比较与优化(内存需求与与运行速度)运行速度)二、算法设计二、算法设计2024/5/43三、流程描述三、流程描述 流程图符号流程图符号“超级循环超级循环”框架框架2024/5/44一、强化模块观念一、强化模块观念使程序占用空间减少、结构清晰使程序占用空间减少、结构清晰注意循环初值和结束条件,避免注意循环初值和结束条件,避免“死机死机”现象现象子程序的现场保护(注意栈平衡、寄存器内容)子程序的现场保护(注意栈平衡、寄存器内容)程序模块(主程序模块、各种子程序模块)程序模块(主程序模块、各种子程序模块)模块化优点:分块设计、便于阅读、调试方便模块化优点:分块设计、便于阅读、调试方便4.1.2 4.1.2 程序编制的方法和技巧程序编制的方法和技巧二、采用循环和子程序二、采用循环和子程序对中断子程序还有注意保护对中断子程序还有注意保护PSWPSW的内容的内容2024/5/454.1.3 4.1.3 汇编语言的语句格式汇编语言的语句格式标号是指令的符号地址。通常作为转移指令的操作数。标号是指令的符号地址。通常作为转移指令的操作数。非非数数字字字字符符开开头头,后后跟跟字字母母、数数字字、“-”-”、“?”等等不能用已定义的保留字(指令助记符、伪指令等)不能用已定义的保留字(指令助记符、伪指令等)后跟英文冒号后跟英文冒号“:”:”KeilKeil的汇编器的汇编器A51A51可以识别的语句形式为:可以识别的语句形式为:一、标号(即符号地址)一、标号(即符号地址)标号:指令助记符指令助记符 操作数1,操作数2,操作数3,;注释二、指令助记符二、指令助记符是指令功能的英文缩写,是指令功能的英文缩写,是汇编语句中唯一不能空缺的部分。是汇编语句中唯一不能空缺的部分。2024/5/46操作数用于给指令的操作提供数据或地址。操作数用于给指令的操作提供数据或地址。(1 1)数据:)数据:二进制(二进制(B B)十进制(十进制(D D或省略或省略D D)十六进制(十六进制(H H),),注意注意AFAF开头时要加开头时要加“0”0”ASCII ASCII码,如码,如 AA,12451245(2 2)符号:符号名、标号或)符号:符号名、标号或“$”$”(PCPC的当前值)的当前值)(3 3)表达式:由运算符和数据构成(见表)表达式:由运算符和数据构成(见表4.14.1)三、操作数三、操作数四、注释四、注释英文分号英文分号“;”“;”开头开头2024/5/47表表4.14.12024/5/48程序设计实例引入程序设计实例引入v实例实例假设一个班有假设一个班有50个人,个人,共有共有3门选修课:门选修课:计算机算法计算机算法服装服装CAD设计设计德语德语请找出:请找出:同时选了三门课的同学;同时选了三门课的同学;2024/5/49问题的解决问题的解决v第一步第一步 如何在计算机中表示选修某门课的所有同学如何在计算机中表示选修某门课的所有同学5122325225392939412252939计算机算法计算机算法服装服装CAD设计设计德语德语选修这门人数选修这门人数学生的学号学生的学号这个过程实际上是设计数据结构的问题这个过程实际上是设计数据结构的问题2024/5/410问题的解决问题的解决v第二步第二步 设计思路:找出同时选了三门课的同学设计思路:找出同时选了三门课的同学这个过程实际上是设计算法的过程,既构建模型。这个过程实际上是设计算法的过程,既构建模型。计算机算法计算机算法CAD设计设计德语德语2024/5/411重复该过程重复该过程第第三三步步:设设计计流流程程找出第一个学生找出第一个学生他选了德语吗?他选了德语吗?他选了他选了CADCAD吗?吗?记录要找的人记录要找的人还有学生吗?还有学生吗?下一个学生下一个学生N NN NY YN NY YY Y结束结束他选计算机吗?他选计算机吗?N NY Y2024/5/412几点启示几点启示v整体构思;整体构思;v构建整体流程框图;构建整体流程框图;v结构合理,流程清晰,简单明了;结构合理,流程清晰,简单明了;v局部模块化;局部模块化;2024/5/413为什么要用流程图?为什么要用流程图?符合人进行逻辑思考的习惯符合人进行逻辑思考的习惯计算机从根本上来说,没有任何逻辑性,计算机从根本上来说,没有任何逻辑性,所所以,你必须告诉它,先做什么,后做什么,以,你必须告诉它,先做什么,后做什么,遇到什么情况又该做什么,等等遇到什么情况又该做什么,等等流程图设计本身是一个逐步求精的过程,最流程图设计本身是一个逐步求精的过程,最终将任务划分为若干能由机器指令实现的小终将任务划分为若干能由机器指令实现的小模块模块2024/5/4144.2.1 4.2.1 源程序的编辑和汇编源程序的编辑和汇编一、源程序的编辑一、源程序的编辑 ORG ORG 0000H LJMP MAIN ORG ORG 0040HMAIN:MOV R7,#16 MOV R0,#60H MOV A,#55HLOOP:MOV R0,A INC R0 DJNZ R7,LOOP SJMP$ENDEND依据汇编语言规则依据汇编语言规则用好用好伪指令伪指令符号符号不用中文不用中文SJMP$SJMP$用于调试用于调试以以 .ASM.ASM存盘存盘4.2 源程序的编辑和汇编源程序的编辑和汇编2024/5/415二、源程序的汇编二、源程序的汇编汇编源程序转为目标程序的过程叫汇编源程序转为目标程序的过程叫汇编汇编汇编通常在汇编通常在WindowsWindows下的下的集成开发环境集成开发环境完成完成用用A51.EXEA51.EXE汇编生成汇编生成.OBJ.OBJ、.LIB.LIB及及.LST.LST三、目标程序的连接三、目标程序的连接.OBJ.OBJ、.LIB.LIB经经BL51.EXEBL51.EXE生成无扩展名的生成无扩展名的绝对地址目标文件绝对地址目标文件绝对地址目标文件绝对地址目标文件可以用于仿真器调试可以用于仿真器调试调试无误的目标文件用调试无误的目标文件用OH51.EXEOH51.EXE转换为转换为.HEX.HEX文件文件.HEX.HEX文件经文件经编程器编程器写入单片机存储器写入单片机存储器2024/5/416 指令格式为指令格式为:ORG nn ORG nn 该该指指令令的的作作用用是是指指明明后后面面的的程程序序或或数数据据块块的的起起始始地地址址,它它总总是是出出现现在在每每段段源源程程序序或或数数据据块块的的开开始始。式式中中,nnnn为为 16 16 位位地地址址,汇汇编编时时nnnn确确定定了了此此语语句句后后面面第第一一条条指指令令或或第第一一个个数数据据的的地地址址,此此后后的的源源程程序序或或数数据据块块就就依依次次连连续续存存放放在在以后的地址内以后的地址内,直到遇到另一个直到遇到另一个ORGORG指令为止。指令为止。4.2.2 4.2.2 伪指令伪指令伪指令,也叫汇编命令。仅对汇编过程进行指示伪指令,也叫汇编命令。仅对汇编过程进行指示伪指令无对应的单片机可执行代码伪指令无对应的单片机可执行代码一、起始地址设定伪指令一、起始地址设定伪指令ORGORG2024/5/417 指令格式指令格式:字符名称字符名称 EQU 数字或汇编符号数字或汇编符号 例例:PA8155 EQU 8001H;即给标号;即给标号PA8155赋值为赋值为8001H 使指令中的字符名称等价于给定的数字或汇编符号。使指令中的字符名称等价于给定的数字或汇编符号。如如果果在在程程序序中中要要多多次次使使用用到到某某一一地地址址,由由EQU指指令令将将其其赋赋值值给给一一个个字字符符名名称称,一一旦旦需需要要对对其其进进行行变变动动,只只要要改改变变EQU命令后面的数字即可。命令后面的数字即可。注注意意:由由 EQU等等值值的的字字符符名名称称必必须须先先赋赋值值后后使使用用,且且在在同一个源程序中同一个源程序中,同一个标号只能赋值一次。同一个标号只能赋值一次。二、结束汇编伪指令二、结束汇编伪指令ENDEND2024/5/418 (3 3)定义字节指令)定义字节指令DBDB 指令格式指令格式:标号标号:DB 8位二进制数表位二进制数表 功功能能:把把 8 位位二二进进制制数数表表依依次次存存入入从从标标号号开开始始的的连连续续的存储单元中。的存储单元中。标标号号区区段段可可有有可可无无,DB指指令令之之后后的的 8 位位二二进进制制数数表表是是字字节节常常数数或或用用逗逗号号隔隔开开的的字字节节串串,也也可可以以是是用用引引号号括括起起来来的的ASCII码码字字符符串串 (一一个个 ASCII字字符符相相当当于于一一个字节个字节)。2024/5/419 (5 5)汇编结束指令)汇编结束指令ENDEND 指令格式指令格式:标号标号:END 地址或标号地址或标号 格格式式中中标标号号以以及及END后后面面的的地地址址或或标标号号可可有有可可无无。功功能能:提提供供汇汇编编结结束束标标志志。汇汇编编程程序序遇遇到到 END后后就就停停止止汇汇编编,对对 END以以后后的的语语句句不不予予处处理理,故故 END应应放放在程序的结束处。在程序的结束处。2024/5/4204.2.2 4.2.2 伪指令伪指令伪指令,也叫汇编命令。仅对汇编过程进行指示伪指令,也叫汇编命令。仅对汇编过程进行指示伪指令无对应的单片机可执行代码伪指令无对应的单片机可执行代码一、起始地址设定伪指令一、起始地址设定伪指令ORGORGORG ORG 表达式表达式 该命令总是出现在源程序的开始位置。用来规定目标程该命令总是出现在源程序的开始位置。用来规定目标程序的起始地址。表达式通常为十六进制地址,例:序的起始地址。表达式通常为十六进制地址,例:ORG 8000HSTART:MOV A,#30H ORGORG可多次使用,但地址值的顺序要由小到大可多次使用,但地址值的顺序要由小到大END该伪指令位于源程序的该伪指令位于源程序的最后一行最后一行。2024/5/421三、定义字节数据表伪指令三、定义字节数据表伪指令DBDB四、定义字数据表伪指令四、定义字数据表伪指令DWDW1000H 该命令用于从标号指定的地址开始,连续存该命令用于从标号指定的地址开始,连续存放字节数据表,常与查表指令放字节数据表,常与查表指令MOVCMOVC配合使用。配合使用。标号:标号:DB DB 字节数据表字节数据表如:如:ORG 1000HORG 1000HDB -2,-4,-6,8,10,18DB -2,-4,-6,8,10,181001H 标号:标号:DW DW 字数据表字数据表 ORG 1400H ORG 1400HDATA1:DW 32DATA1:DW 324A4AH,3CHH,3CH 1400H1401H1402H1403H大端模式2024/5/422五、定义常值为符号名伪指令五、定义常值为符号名伪指令EQUEQU该命令用来给标号赋值。赋值以后,其标号值在整个程序该命令用来给标号赋值。赋值以后,其标号值在整个程序中有效。中有效。符号名符号名 EQU EQU 常值表达式常值表达式 LENLEN EQUEQU 10 10 SUMSUM EQUEQU 21H 21HBLOCKBLOCK EQU EQU 22H 22H CLR A CLR A MOV R7,MOV R7,LENLEN MOV R0,MOV R0,BLOCKBLOCK LOOP:ADD A,R0 LOOP:ADD A,R0 INC R0 INC R0 DJNZ R7,LOOP DJNZ R7,LOOP MOV MOV SUMSUM,A,A 符号名为:符号名为:v地址地址v常数常数v段名段名v字符串字符串v寄存器名寄存器名v位名位名比较:比较:标号标号只能是地址只能是地址2024/5/423六、定义位地址为符号名伪指令六、定义位地址为符号名伪指令BITBIT符号名符号名 BIT BIT 位地址表达式位地址表达式如:如:ST BIT P1.0 ;ST BIT P1.0 ;将将P1.0P1.0的位地址赋给符号名的位地址赋给符号名STSTCF BIT 0D7H ;CF BIT 0D7H ;将位地址为将位地址为D7HD7H的位定义为符号名的位定义为符号名用用BITBIT定定义义的的“符符号号名名”一一经经定定义义便便不不能能重重新新定义和改变定义和改变其它一些伪指令参见教材表其它一些伪指令参见教材表4.2 4.2 2024/5/4244.3 基本程序结构基本程序结构一般不影响标志寄存器一般不影响标志寄存器PSWPSW的状态。的状态。传送类指令有两大类传送类指令有两大类 一般传送(一般传送(MOVMOV )特殊传送,如:特殊传送,如:MOVC MOVC MOVX MOVX PUSH PUSH、POPPOP XCH XCH、XCHDXCHD SWAP SWAP 2024/5/4254.3.1 4.3.1 顺序程序顺序程序(无分支、无循环)(无分支、无循环)4.3 基本程序结构基本程序结构【例例4-14-1】片内片内RAMRAM的的21H21H单单元存放一个十进制数据十元存放一个十进制数据十位的位的ASCIIASCII码,码,22H22H单元存单元存放该数据个位的放该数据个位的ASCIIASCII码。码。编写程序将该数据转换成编写程序将该数据转换成压缩压缩BCDBCD码存放在码存放在20H20H单元。单元。2024/5/426 ORG 0040H ORG 0040HSTART:MOV A,21H ;START:MOV A,21H ;取十位取十位ASCIIASCII码码 ANL A,#0FH ;ANL A,#0FH ;保留低半字节保留低半字节 SWAP A ;SWAP A ;移至高半字节移至高半字节 MOV 20H,A ;MOV 20H,A ;存于存于20H20H单元单元 MOV A,22H ;MOV A,22H ;取个位取个位ASCIIASCII码码 ANL A,#0FH ;ANL A,#0FH ;保留低半字节保留低半字节 ORL 20H,A ;ORL 20H,A ;合并到结果单元合并到结果单元 SJMP$SJMP$END END2024/5/4274.3.2 4.3.2 分支程序分支程序(单分支、双分支、多分支)(单分支、双分支、多分支)【例例4-24-2】设变量设变量x x以补码以补码的形式存放在片内的形式存放在片内RAMRAM的的30H30H单元,变量单元,变量y y与与x x的关的关系是系是:当当x x大于大于0 0时时,y=x;,y=x;当当x=0 x=0时时,y=20H;,y=20H;当当x x小于小于0 0时时,y=x+5,y=x+5。编制程序。编制程序,根据根据x x的大小求的大小求y y并送回原单元。并送回原单元。2024/5/428 ORG 0040HORG 0040HSTART:MOV A,30H ;START:MOV A,30H ;取取x x至累加器至累加器 JZ NEXTJZ NEXT ;x=0,;x=0,转转NEXTNEXT ANL A,#80H ;ANL A,#80H ;否,保留符号位否,保留符号位 JZ DONEJZ DONE ;x 0,;x 0,转结束转结束 MOV A,#05H ;x 0MOV A,#05H ;x 0处理处理 ADD A,30H ADD A,30H MOV 30H,A ;X+05H MOV 30H,A ;X+05H送送Y Y SJMP DONE SJMP DONE NEXT:MOV 30H,#20H;x=0,20H NEXT:MOV 30H,#20H;x=0,20H送送Y Y DONE:SJMP DONE DONE:SJMP DONE END END 2024/5/429【例例4-34-3】根据根据R7R7的内容的内容x x(转移序号)转向相应的处理程序。(转移序号)转向相应的处理程序。设设R7R7内容为内容为0 04 4,对应的处理程序入口地址分别为,对应的处理程序入口地址分别为PP0PP0PP4PP4。2024/5/430 START:MOV R7,#3 ;START:MOV R7,#3 ;以转移序号以转移序号3 3为例为例 ACALL JPNUMACALL JPNUM AJMP START AJMP START JPNUM:MOV DPTR,#TAB ;JPNUM:MOV DPTR,#TAB ;置分支入口地址表首址置分支入口地址表首址 MOV A,R7MOV A,R7 ADD A,R7ADD A,R7 ;乘乘2 2,调整偏移量,调整偏移量 MOV R3,A MOV R3,A MOVC A,A+DPTR ;MOVC A,A+DPTR ;取地址高字节,暂存于取地址高字节,暂存于R3R3 XCH A,R3 XCH A,R3 INC A INC A MOVC A,A+DPTR ;MOVC A,A+DPTR ;取地址低字节取地址低字节 MOV DPL,A ;MOV DPL,A ;处理程序入口地址低处理程序入口地址低8 8位送位送DPLDPL MOV DPH,R3 ;MOV DPH,R3 ;处理程序入口地址高处理程序入口地址高8 8位送位送DPHDPH CLR A CLR A JMP A+DPTRJMP A+DPTR 2024/5/431 TAB:DW PP0 TAB:DW PP0 DW PP1 DW PP1 DW PP2 DW PP2 DW PP3DW PP3 DW PP4 DW PP4 PP0:MOV 30H,#0 ;PP0:MOV 30H,#0 ;转移序号为转移序号为0 0时时,置功能号置功能号“0”0”于于30H30H单单元元 RETRET PP1:MOV 30H,#1 ;PP1:MOV 30H,#1 ;转移序号为转移序号为1 1时时,置功能号置功能号“1”1”于于30H30H单单元元 RETRET PP2:MOV 30H,#2 ;PP2:MOV 30H,#2 ;转移序号为转移序号为2 2时时,置功能号置功能号“2”2”于于30H30H单单元元 RETRET PP3:MOV 30H,#3PP3:MOV 30H,#3 ;转移序号为转移序号为3 3时时,置功能号置功能号“3”3”于于30H30H单单元元 RETRET PP4:MOV 30H,#4 ;PP4:MOV 30H,#4 ;转移序号为转移序号为4 4时时,置功能号置功能号“4”4”于于30H30H单单元元 RETRET 2024/5/4324.3.3 4.3.3 循环程序循环程序(2种:先执行,后判断;先判断,后执行)种:先执行,后判断;先判断,后执行)【例例4-44-4】将内部将内部RAMRAM的的30H30H至至3FH3FH单元初始化为单元初始化为00H00H。MAIN:MOV R0,#30H;MAIN:MOV R0,#30H;置初值置初值 MOV A,#00H ;MOV A,#00H ;MOV R7,#16 ;MOV R7,#16 ;LOOP:MOV R0,A ;LOOP:MOV R0,A ;循环处理循环处理 INC R0 ;INC R0 ;DJNZ R7,LOOP;DJNZ R7,LOOP;循环修改,判结束循环修改,判结束 SJMP$;SJMP$;结束处理结束处理2024/5/433【例例4-54-5】将内部将内部RAMRAM起始地址为起始地址为60H60H的数据串传送到外部的数据串传送到外部RAMRAM中中起始地址为起始地址为1000H1000H的存储区域,直到发现的存储区域,直到发现$字符停止传送。字符停止传送。MAIN:MOV R0,#60H ;MAIN:MOV R0,#60H ;置初值置初值 MOV DPTR,#1000HMOV DPTR,#1000HLOOP0:MOV A,R0 ;LOOP0:MOV A,R0 ;取数据取数据 CJNE A,#24H,LOOP1;CJNE A,#24H,LOOP1;循环结束?循环结束?SJMP DONE ;SJMP DONE ;是是LOOP1:MOVX DPTR,A ;LOOP1:MOVX DPTR,A ;循环处理循环处理 INC R0 ;INC R0 ;循环修改循环修改 INC DPTR INC DPTR SJMP LOOP0 ;SJMP LOOP0 ;继续循环继续循环 DONE:SJMP DONE ;DONE:SJMP DONE ;结束处理结束处理2024/5/4344.4 子程序及其调用子程序及其调用 完成完成通用功能通用功能、反复使用反复使用的程序设计成的程序设计成子程序。子程序。使应用使应用程序结构清晰紧凑,便于阅读和调试程序结构清晰紧凑,便于阅读和调试 执行要由其它程序来调用,执行完后要返回到调用程序执行要由其它程序来调用,执行完后要返回到调用程序 结构上仍然采用一般程序的结构上仍然采用一般程序的3 3种结构种结构 调用时注意:调用时注意:一是现场的保护和恢复;一是现场的保护和恢复;二是主程序与子程序间的参数传递。二是主程序与子程序间的参数传递。2024/5/4354.4.1 4.4.1 现场保护与恢复现场保护与恢复一、一、在主程序中实现(在主程序中实现(结构灵活结构灵活)PUSH PSW ;PUSH PSW ;保护现场(保护现场(含当前工作寄存器组号)含当前工作寄存器组号)PUSH ACC ;PUSH ACC ;PUSH B ;PUSH B ;MOV PSW,#10H;MOV PSW,#10H;切换当前工作寄存器组切换当前工作寄存器组LCALL addr16 ;LCALL addr16 ;子程序调用,子程序调用,POP B ;POP B ;恢复现场恢复现场POP ACC ;POP ACC ;POP PSW ;POP PSW ;含当前工作寄存器组切换含当前工作寄存器组切换2024/5/436二、二、在子程序中实现(在子程序中实现(程序规范、清晰程序规范、清晰)SUB1:PUSH PSW ;SUB1:PUSH PSW ;保护现场(保护现场(含当前工作寄存器组含当前工作寄存器组号)号)PUSH ACC ;PUSH ACC ;PUSH B ;PUSH B ;MOV PSW,#10H;MOV PSW,#10H;切换当前工作寄存器组切换当前工作寄存器组 POP B ;POP B ;恢复现场恢复现场 POP ACC ;POP ACC ;POP PSW ;POP PSW ;内含当前工作寄存器组切换内含当前工作寄存器组切换 RETRET2024/5/437主程序与子程序的关系主程序与子程序的关系 子程序SUB 主程序MAIN返回 LCALL SUB 调用子程序子程序入口地址RET2024/5/4384.4.2 4.4.2 参数传递参数传递一、一、利用累加器或寄存器(利用累加器或寄存器(简单、快速,但参数个数不多简单、快速,但参数个数不多)【例例4-64-6】实现两个实现两个8 8位的十六进制无符号数求和的子程序。位的十六进制无符号数求和的子程序。SADD:MOV A,R3 ;SADD:MOV A,R3 ;取加数(在取加数(在R3R3中)中)CLR CCLR C ADD A,R4 ;ADD A,R4 ;被加数(在被加数(在R4R4中)加中)加A A JC PP1 JC PP1 MOV R3,#00H;MOV R3,#00H;结果小于结果小于255255时,高字节时,高字节R3R3内容为内容为00H00H SJMP PP2 SJMP PP2 PP1:MOV R3,#01H;PP1:MOV R3,#01H;结果大于结果大于255255时,高字节时,高字节R3R3内容为内容为01H01H PP2:MOV R4,A ;PP2:MOV R4,A ;结果的低字节在结果的低字节在R4R4中中 RETRET入口入口:(R3R3)=加数;加数;(R4R4)=被加数。被加数。出口出口:(R3R3)=和的高字节;和的高字节;(R4R4)=和的低字节。和的低字节。2024/5/439二、二、利用存储器(利用存储器(个数多,用个数多,用R0R0或或R1R1及及DPTRDPTR为参数表指针为参数表指针)【例例4-74-7】将内部将内部RAM RAM 中两个中两个4 4字节无符号整数相加,和的高字节无符号整数相加,和的高字节由字节由R0R0指向。数据采用大端模式存储。指向。数据采用大端模式存储。入口入口:(R0R0)=加数低字节地址;加数低字节地址;(R1R1)=被加数低字节地址。被加数低字节地址。出口出口:(R0R0)=和的高字节起始地址。和的高字节起始地址。NADD:MOV R7,#4 ;NADD:MOV R7,#4 ;字节数字节数4 4送计数器送计数器 CLR C ;CLR C ;NADD1:MOV A,R0 ;NADD1:MOV A,R0 ;利用指针利用指针,取加数低字节取加数低字节 ADDC A,R1 ;ADDC A,R1 ;利用指针利用指针,被加数低字节加被加数低字节加A A MOV R0,A ;MOV R0,A ;DEC R0 DEC R0 DEC R1 DEC R1 DJNZ R7,NADD1 DJNZ R7,NADD1 INC R0 ;INC R0 ;调整指针调整指针,指向出口,指向出口 RET RET 2024/5/440三、三、利用堆栈利用堆栈【例例4-84-8】将内部将内部RAMRAM中中20H20H单元中的单元中的1 1个字节十六进制数转换为个字节十六进制数转换为2 2位位ASCIIASCII码,存放在码,存放在R0R0指示的两个单元中。指示的两个单元中。入口:预转换数据(低半字节)在栈顶入口:预转换数据(低半字节)在栈顶 出口:转换结果(出口:转换结果(ASCIIASCII码)在栈顶码)在栈顶 HEASC:MOV R1,SP ;HEASC:MOV R1,SP ;借用借用R1R1为堆栈指针为堆栈指针 DEC R1DEC R1 DEC R1 ;R1 DEC R1 ;R1指向被转换数据指向被转换数据 XCH A,R1 ;XCH A,R1 ;取被转换数据取被转换数据 ANL A,#0FH ;ANL A,#0FH ;取一位十六进制数取一位十六进制数 ADD A,#2 ;ADD A,#2 ;偏移调整偏移调整,所加值为所加值为MOVCMOVC与与DBDB间总字节数间总字节数 MOVC A,A+PC ;MOVC A,A+PC ;查表查表 XCH A,R1 ;1XCH A,R1 ;1字节指令字节指令,存结果于堆栈中存结果于堆栈中 RET ;1RET ;1字节指令字节指令ASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37HASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H DB 38H,39H,41H,42H,43H,44H,45H,46H2024/5/441验证程序段验证程序段 MAIN:MOV A,20H ;MAIN:MOV A,20H ;SWAP A SWAP A PUSH ACC ;PUSH ACC ;预转换的数据(在低半字节)入栈预转换的数据(在低半字节)入栈 ACALL HEASCACALL HEASC POP ACC ;POP ACC ;弹出栈顶结果于弹出栈顶结果于ACCACC中中 MOV R0,A ;MOV R0,A ;存转换结果高字节存转换结果高字节 INC R0 ;INC R0 ;修改指针修改指针 PUSH 20H ;PUSH 20H ;预转换的数据(在低半字节)入栈预转换的数据(在低半字节)入栈 ACALL HEASCACALL HEASC POP ACC ;POP ACC ;弹出栈顶结果于弹出栈顶结果于ACCACC中中 MOV R0,A ;MOV R0,A ;存转换结果低字节存转换结果低字节 SJMP$SJMP$2024/5/4424.4.3 4.4.3 常用子程序示例(略)常用子程序示例(略)2024/5/443
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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