第三章大学生复习资料_第1页
第三章大学生复习资料_第2页
第三章大学生复习资料_第3页
第三章大学生复习资料_第4页
第三章大学生复习资料_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

伪指令汇编语言程序设计MCS-51程序设计举例一汇编程序的伪指令(真)指令:告诉计算机如何操作以及做何种操作伪指令:伪指令不进行具体的操作,亦即它不像机器指令那样是在程序运行期间由计算机来执行的,而是在汇编程序对源程序汇编期间由汇编程序处理的操作。

伪指令仅在汇编过程中起控制作用不产生可执行目标代码,又称为软指令

1、起点指令ORG格式:ORG××××H功能:给程序起始地址或数据块的起始地址赋值例:用法:一般出现在每段源程序或数据块的开始一个源程序可多次出现ORG指令ORG

8000HSTART:MOVA,#74H

┇;源程序的起始地址为8000H首地址首地址ASM51程序中一定要写!2、结束命令END格式:END功能:汇编程序结束标志附在一个源程序的结尾一个源程序只能出现一次END指令3、定义字节命令DB格式:功能:标号:DB字节常数或字符串(8位)从指定的地址单元开始,定义若干个8位内存单元的数据。汇编程序把DB定义的字节数据依次存入标号开始的存储单元用法:有定义的内存单元地址项或项表ASM51程序中一定要写!例:ORG8000HTAB:

DB45H,73,‘5’,‘A’TAB1:DB101B伪指令ORG定义了TAB的起始地址为8000H,伪指令DB定义了8000H~8003单元的内容依次为:(8000H)=45H(8001H)=49H(8002H)=35H(8003H)=41H(8004H)=05HTABTAB1(1)由ORG定义(2)跟在其他源程序之后4、定义字命令DW格式:功能:标号:DW字或字表从指定的地址单元开始,定义若干个16位内存单元的数据。例:ORG8000HTAB:DW7234H,8AH,10(8000H)=72H(8001H)=34H(8002H)=00H(8003H)=8AH(8005H)=0AH汇编后:(8004H)=00H注意:因为16位需占用2个字节,所以高8位先存入,低8位后存入,不足16位,以0填充。5、定义空间命令DS格式:功能:标号:DS数据或字符及表达式例:(8008H)=30H(8009H)=8AH从指定单元地址开始,保留若干个内存空间备用ORG8000HDS08HDB30H,8AH即:8000H~8007H单元保留备用定义空间6、等值命令EQU格式:字符名称EQU数据或汇编符号功能:将一个数据或汇编符号赋予一个指定的字符名称例:ORG8000HAAEQUR6MOV

A,AA;AA与R6等值;A(R6)例:A10EQU10DELYEQU07EBHMOVA,A10LCALLDELY;A10=10;DELY=07EBH;转向入口地址07EBH使用EQU指令,须先赋值后使用,不能反之7、数据地址赋值等值命令DATA格式:字符名称DATA数据或表达式功能:此命令把数据/代码地址赋予规定的字符名称。定义的字符名称可先使用后定义INDEXJDATA8389HORG8000HINDEXJDATA8096HLJMPINDEXJENDORG8000HLJMP8096HEND;INDEXJ这个字符名称的地址为8389H例:等价于EQU与DATA的区别(1)DATA与EQU相似,但DATA定义的字符名称,可先使用后定义,EQU则不能(2)EQU指令可把汇编符号赋给字符名称,DATA则不能(3)DATA可把表达式的值赋给字符名称,EQU则不能DATA常在程序中定义数据地址EQU常在程序中定义字符数据8、位地址符号命令BIT格式:字符名称BIT位地址功能:把位地址赋予指定的字符名称A1BITP1.0A2BITP2.0例:;P1.0,P2.0赋予位地址字符名称A1、A2,在编程时可以直接把A1、A2当成位地址使用9、#HIGH(常数或数据表达式)#LOW(常数或数据表达式)功能:#HIGH伪指令用于取目标代码的高字节,而#LOW伪指令用于取目标代码的低字节。在给定时/计数器赋初值时,该伪指令经常使用。例如:MOVTH0,#HIGH(5000)MOVTL0,#LOW(5000)第一条指令将数据5000(16进制为1388H)的高字节取出并送入TH0中,第二条指令将数据5000的低字节取出并送入TL0中程序段执行后,(TH0)=13H,(TL0)=88H。二汇编语言程序设计一、汇编语言程序设计的一般步骤

分析课题

确定算法

画流程图

编写程序

上机调试二、程序结构按程序的走向可以将程序分成4种结构:

简单程序分支程序循环程序子程序一、汇编语言程序设计的一般步骤分析课题确定算法画流程图编写程序上机调试二、程序结构当接到程序设计的任务后,首先对任务进行详尽的分析,搞清楚已知的数据和想要得到的结果,程序应该完成何种的功能。一、汇编语言程序设计的一般步骤分析课题确定算法画流程图编写程序上机调试二、程序结构根据实际问题的要求和指令系统的特点,确定解决问题的具体步骤。根据任务要求,对不同的计算方法进行比较,选择最适宜的算法。一、汇编语言程序设计的一般步骤分析课题确定算法画流程图编写程序上机调试二、程序结构将解决问题的具体步骤用一种约定的几何图形、指向线和必要的文字说明描述出来的图形。一、汇编语言程序设计的一般步骤分析课题确定算法画流程图编写程序上机调试二、程序结构经过上述各步骤后,解决问题的思路已经非常清楚,所以接下来就可以按流程图的顺序对每一个功能框选用合适的指令编写出汇编语言程序。一、汇编语言程序设计的一般步骤分析课题确定算法画流程图编写程序上机调试二、程序结构在应用程序的设计中,几乎没有一个程序只经过一次编写就完全成功的,所以必须经过上机调试。一、汇编语言程序设计的一般步骤

分析课题

确定算法

画流程图

编写程序

上机调试二、程序结构按程序的走向可以将程序分成4种结构:

简单程序分支程序循环程序子程序简单程序

简单程序是指一种无分支的直接程序,即CPU从第一条指令开始依次执行每一条指令,直到最后一条指令。这种程序虽然比较简单,但也能完成一定的功能,并且往往也是构成复杂程序的基础。拆字程序拼字程序求和程序拆字程序

例:将30H单元中存放的一个两位的BCD拆开并存入31H单元和32H单元,高字节存入32H单元。解:

分析命题确定算法画流程图编写程序上机调试32H31H30H89H09H08H分别屏蔽高4位与低4位,再将高4位交换MOVA,30HANLA,#0F0HSWAPAMOV32H,AMOV31H,30HANL31H,#0FHSJMP$开始将30H单元的内容送A将A中高、低4位交换将A中内容存入32H单元屏蔽30H单元内容的高4位屏蔽A中内容的低4位将30H单元内容存入31H单元结束拼字程序

例:将30H和31H单元中存放的2个一字节BCD码组合成一个2位的BCD码存入32H单元,31H单元中的数为低4位。解:

分析命题确定算法画流程图编写程序上机调试32H31H30H04H07H47H将30H单元的高4与低4交换,再与31H单元相或MOVA,30HSWAPAORLA,31HMOV32H,ASJMP$开始将30H单元的内容送A将A中高、低4位交换将A中内容与31H单元内容相或将A中内容存入32H单元结束MOVA,30HADDA,32HMOV40H,AMOVA,31HADDCA,33HMOV41H,AMOVA,#00HADDCA,#0MOV42H,ASJMP$求和程序

例:设2个16位二进制数存于以30H为首址的连续单元中,求二者的和,并将和存于以40H为首址的区域。(低字节在前)解:

分析命题确定算法画流程图编写程序上机调试(30H)+(32H)送40H单元;(31H)+(33H)+Cy送41H单元;Cy+0送42H单元开始(30H)+(32H)送40H单元

(31H)+(33H)+Cy送41H单元Cy+0送42H单元结束分支程序

分支程序就是条件分支程序,即根据不同的条件,执行不同的程序段。在编写分支程序时,关键是如何判断分支的条件。在MCS-51中可以直接用来判断分支条件的指令不是很多,只有累加器为零(或不为零)、比较条件转移指令CJNE等,但它还提供位条件转移指令,如JC,JB等。把这些指令结合在一起使用,就可以完成各种各样的条件判断,如正负判断、溢出判断、大小判断等。分段函数符号函数比较大小例:设变量X存放于30H单元,函数值Y存放在31H单元。试按照下式的要求给Y赋值。解:Y=

分析命题确定算法画流程图编写程序上机调试开始将30H单元的内容送A结束符号函数A=0?将0送31H单元A>0?将1送31H单元将-1送31H单元VAR DATA 30HFUNC DATA 31HMOV A,VARJZ COMPJNB ACC.7,POSI

MOV A,#0FFHSJMP COMPPOSI:

MOVA,#1COMP:

MOVFUNC,ASJMP$YNYN例:两个无符号数分别存于ONE和TWO单元,试比较它们的大小,将较大者存人MAX单元。若两数相等则任存入一个即可。

解:

分析命题确定算法画流程图编写程序上机调试开始将ONE单元的内容送A结束比较大小A≥TWO将TWO单元内容送MAX单元MOV A,ONECJNE A,TWO,NEXT1NEXT1: JCNEXT2MOVMAX,ONESJMP$NEXT2:MOV MAX,TWO SJMP$YN将ONE单元内容送MAX单元循环程序

一、循环程序的应用场合二、循环程序的组成三、循环程序举例字符串长度数组清0循环程序

一、循环程序的应用场合分段函数符号函数比较大小在程序执行时,往往同样的一组操作要重复许多次。当然可以采用简单程序,重复使用同样的指令来完成,但若使用循环程序,重复执行同一条指令许多次来完成重复操作,就可大大减化程序。例如:要使00H—7FH单元的内容清0。方法1:用128条赋值指令完成。方法2:只用一条赋值指令,并使之执行128次,每次执行时操作数亦作相应的变化以完成规定的操作。方法1:MOV00H,#0MOV01H,#0

………MOV7FH,#0方法2:MOVR0,#128CLRAUP:MOV@R0,ADECR0CJNER0,#00H,UPSJMP$循环程序

一、循环程序的应用场合二、循环程序的组成循环程序一般由四部分组成:

置循环初值循环体循环修改部分循环控制部分确定循环开始时的状态,如使得工作单元清0,计数器置初值等。要求重复执行的部分。每循环一次就要需要修改一次初值,以便在一定情况下,能结束循环。根据循环结束条件,判断是否结束循环流程图循环程序

先处理后判断

先判断后处理例:使00H---7FH单元清0。数组清0分析命题确定算法画流程图编写程序上机调试7FH…00H00H00H00H用MOV@R0,A做循环主体,修改R0的值,可以将0送入00H—7FH单元中。MOVR0,#128CLRAUP:MOV@R0,ADECR0CJNER0,#00H,UPSJMP$开始给R0赋128、A清0A送@R0R0减1结束R0=00H?YN例:内存中以21H开始的区域有若干个字符和数字,一般称为一个字符串,最末一个字符为"$",试统计这些字符数字的数目,结果存人20H单元字符串长度分析命题确定算法画流程图编写程序上机调试NUM DATA20HSTRINGDATA21HCLR AMOVR0,#STRINGLOOP: CJNE@R0,#24H,NEXTSJMPCOMPNEXT: INC A INC R0SJMP LOOPCOMP:INC AMOV NUM,ASJMP$开始给R0赋21H、A清0A加1,并送20H单元A加1R0加1结束@R0=24H?YN【例4-6】设例4-4中,8位无符号数的个数n未知,数据存放的单元首址为30H,数据结束标志为十六进制数0FFH(有效数据中不含0FFH),求这n个8位无符号数之和,并将和存放在2DH和2EH单元,高字节在前。算法:此例属于单循环且循环次数未知的情况。初始化部分清零累加和单元;循环控制方式应为先判断后执行,即应先判断某单元数据是否为结束标志,不是则将该数据加入累加和,否则结束循环;循环体内用ADDC指令实现累加和与各无符号单字节数的加法运算。循环控制可CJNE指令实现。汇编程序C语言程序ORG0000HSTART:CLRC;清进位位MOV2DH,#00H;清零累加和MOV2EH,#00HMOVR0,#30H;取数据首址LOOP:MOVA,@R0;取无符号数据CJNEA,#0FFH,SUM;不是结束标志,转加法程序SJMP$SUM:ADDA,2EH;加到累加和低字节MOV2EH,ACLRA ADDCA,2DH;和高字节加进位位MOV2DH,AINCR0SJMPLOOPEND#include<REG52.h>unsignedintsum_at_0x2d;voidmain(){unsignedchar*addr;addr=0x30;sum=0;while(*addr!=0xff){sum+=*addr;addr++;}while(1);}

查表程序设计

【例4-7】设有一个MCS-51单片机控制系统,共10个按键,有键按下时键盘扫描程序将其键值(0~9)放在片内RAM30H单元,编程将其转换成7段显示码(共阴),放到片内RAM31H单元。汇编程序C语言程序ORG0000HSTART

温馨提示

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

评论

0/150

提交评论