版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2.3 汇编言语程序设计汇编言语程序设计主要内容主要内容1. 1. 汇编言语格式及构成汇编言语格式及构成2. 2. 汇编源程序设计步骤及汇编汇编源程序设计步骤及汇编3. 3. 顺序程序设计顺序程序设计4. 4. 分支程序设计分支程序设计5. 5. 循环和查表程序设计循环和查表程序设计6. 6. 子程序设计子程序设计2.3.1 汇编言语格式汇编言语格式标号段:操作码段标号段:操作码段 操作数段;注释段操作数段;注释段 如:如:LP1: MOV R2, #10; 设置循环次数设置循环次数标号段:指明所在指令操作码字节所在的内存地址。标号段:指明所在指令操作码字节所在的内存地址。标号由大写英文字母开
2、头的字母和数字串组成,长度标号由大写英文字母开头的字母和数字串组成,长度为为18个字符。标号段可省略。个字符。标号段可省略。2.3.2 2.3.2 汇编言语构成汇编言语构成1. 1. 指令性语句助记符语句指令性语句助记符语句2. 2. 指示性语句伪指令指示性语句伪指令 a. ORGa. ORG起始汇编伪指令起始汇编伪指令 例:例:ORG 2000HORG 2000H; 指定程序存储地址从指定程序存储地址从2000H2000H开场开场 b. ENDb. END终了汇编伪指令终了汇编伪指令 例:例:ENDEND c. EQU c. EQU赋值伪指令赋值伪指令 字符称号字符称号 EQU EQU 数据
3、或汇编符号数据或汇编符号 ;将右边的数据或汇编符号赋给左边的字符称号;将右边的数据或汇编符号赋给左边的字符称号例如:例如:AA EQU R1 AA EQU R1 ;AAAA当作存放器当作存放器R1R1运用运用 A10 EQU 10H A10 EQU 10H ;A10=10HA10=10H DELAY EQU 07E6H DELAY EQU 07E6H ;DELAY=07E6HDELAY=07E6H MOV R0 , A10 MOV R0 , A10 MOV A , AA MOV A , AA LCALL DELAY LCALL DELAYd. DATAd. DATA数据地址赋值伪指令数据地址赋
4、值伪指令字符称号字符称号 DATA DATA 表达式表达式 ;将右边表达式;将右边表达式8 8位位 ;赋左边,只能是数据;赋左边,只能是数据 ;或地址等;或地址等DATADATA型型 字符称号字符称号 XDATA XDATA 表达式;表达式; 1616位位 例:例: AA DATA 35HAA DATA 35H DELAY XDATA 0A7E6H DELAY XDATA 0A7E6H e. DBe. DB字节定义伪指令字节定义伪指令 标号:标号: DB DB 项或项表项或项表 例:例: TAB TAB: DB 45H DB 45H,7373,A A ;将;将45H45H、7373、A A依次
5、存放依次存放 ;入;入TABTAB地址开场的存储单元地址开场的存储单元 A73TAB45Hf. DWf. DW字定义伪指令字定义伪指令 标号:标号: DW DW 项或项表项或项表例:例:ORG 1000H ORG 1000H HETAB HETAB:DW 1234H, 8AH, 10 DW 1234H, 8AH, 10 g. DSg. DS存储空间定义伪指令存储空间定义伪指令 标号:标号: DS DS 项或项表项或项表例:例: SPCSPC: DS 08H DS 08H ;从;从SPCSPC地址开场,地址开场, ;预留;预留8 8个存储单元个存储单元 DB 25H DB 25H ;SPC+8S
6、PC+8=25H =25H h. BITh. BIT位地址赋值伪指令位地址赋值伪指令 字符称号字符称号 BIT BIT 位地址位地址例:例:A1 BIT 00H A1 BIT 00H A2 BIT P1.0 A2 BIT P1.0 MOV C MOV C,A1 A1 ;将位地址;将位地址00H00H的值送的值送Cy Cy 2.3.3 汇编源程序设计步骤及汇编汇编源程序设计步骤及汇编源程序设计步骤:源程序设计步骤:1 1拟定设计义务书,设计义务书包括:程序功能、技术目的、精度拟定设计义务书,设计义务书包括:程序功能、技术目的、精度等级、实施方案、工程进度、所需设备、研制费用、人员分工等级、实施方
7、案、工程进度、所需设备、研制费用、人员分工2 2建立数学模型建立数学模型3 3确立算法确立算法4 4绘制程序流程图绘制程序流程图5 5编制汇编言语源程序编制汇编言语源程序6 6上机调试上机调试 汇编言语源程序的汇编汇编言语源程序的汇编人工汇编人工汇编机器汇编机器汇编2.3.4 2.3.4 顺序程序设计顺序程序设计例题例题1 1:求一个:求一个1616位二进制负数的补码。设此位二进制负数的补码。设此1616位位二进制数存于二进制数存于NUMNUM、NUM+1NUM+1单元单元 解:补码解:补码= =反码反码+1+1ORG 1000HORG 1000HNUM DATA 20HNUM DATA 20
8、HMOV R0MOV R0,#NUM#NUMMOV AMOV A,R0 R0 CPL ACPL AADD AADD A,#01H#01HMOV R0MOV R0,A AINC R0 INC R0 MOV AMOV A,R0 R0 CPL ACPL AADDC AADDC A,#00H#00HMOV R0MOV R0,A ASJMP $SJMP $ENDEND2.3.5 2.3.5 分支程序设计分支程序设计 例题例题2 2:知:知VARVAR单元内有一自变量单元内有一自变量X X,按如下条件,按如下条件编出求函数值编出求函数值Y Y并将它存入并将它存入FUNCFUNC单元的程序:单元的程序:假设
9、假设X0X0,那么,那么Y=1Y=1;假设假设X=0X=0,那么,那么Y=0Y=0;假设假设X0X0VAR0,那么转,那么转POSPOS MOV A MOV A,#0FFH #0FFH ;假设;假设VAR0VAR0,-1 -1给给A A SJMP DONE SJMP DONEPOS POS :MOV AMOV A,#01H#01HDONEDONE:MOV FUNCMOV FUNC,A A SJMP $ SJMP $ END END2.3.6 2.3.6 循环和查表程序设计循环和查表程序设计例题例题3 3:知内部:知内部RAM ADDRRAM ADDR为始址的无符号数数据块为始址的无符号数数据块
10、的块长存储于的块长存储于LENLEN单元内,请编程找出数据块中的单元内,请编程找出数据块中的最大数并存入最大数并存入MAXMAX单元单元解:解: ORG 1000H ORG 1000H LEN DATA 31H LEN DATA 31H MAX DATA 32H MAX DATA 32H ADDR DATA 40H ADDR DATA 40H MOV R0 MOV R0,#ADDR #ADDR ;R0R0指向数据块,初始化指向数据块,初始化为为 ;数据块首地址;数据块首地址 MOV MAX, ADDR MOV MAX, ADDR ;MAXMAX单元初始化单元初始化LOOPLOOP:MOV AM
11、OV A,R0 R0 ;开场循环体,将一个数取;开场循环体,将一个数取到到A A CJNE A CJNE A,MAXMAX,BRCHBRCH;比较该数与;比较该数与MAXMAX的大小的大小BRCHBRCH:JC NEXT JC NEXT ;假设该数小,那么进展下一;假设该数小,那么进展下一次循环次循环 XCH A XCH A,MAX MAX ;假设该数大,那么与;假设该数大,那么与MAXMAX交换交换NEXTNEXT:INC R0 INC R0 ;为下一次循环做预备;为下一次循环做预备 DJNZ LEN DJNZ LEN,LOOP LOOP ;判别循环次数;判别循环次数 SJMP $ SJMP
12、 $ END END例题例题4 4:R0R0的低四位为一个的低四位为一个1616进制数码,编写程序,进制数码,编写程序,将该数码对应字符的将该数码对应字符的ASCIIASCII编码送入编码送入R1R1。例如:假。例如:假设设R0R0的低的低4 4位为位为1110B1110B,对应,对应1616进制数码进制数码E E,那么将字,那么将字符符E E的的ASCIIASCII码送入码送入R1R1查表:用于查表的参数即为所查查表:用于查表的参数即为所查数据在表中的位置,即该存储地数据在表中的位置,即该存储地址间隔表起始地址的间隔。址间隔表起始地址的间隔。例如:例如:a2表表(a为为10以内的自然以内的自
13、然数数),根据,根据a的值查表得的值查表得a2的值。的值。假设假设a=3,a2=9,该数据存储地,该数据存储地址间隔表起始地址的间隔即为址间隔表起始地址的间隔即为3(个存储单元个存储单元)。执行。执行MOVC A,A+PC指令后,指令后,A+PC即指向即指向该存储单元。该存储单元。ASCTAB:DB 0, 1, 2, 3 ; 制表制表 DB 4 ,5, 6, 7 DB 8, 9A, B DB C, D, E , F ENDORG 1000HMOV A, R0 ANL A, #0FH ; 此时此时A为该字符在为该字符在 ;表中的偏移间隔表中的偏移间隔ADD A, #03H;查表指令到表的间隔;查
14、表指令到表的间隔MOVC A, A+PC ; 查表查表MOV R1, A ;单字节指令单字节指令SJMP $ ;双字节指令双字节指令解:解:2.3.7 2.3.7 子程序设计子程序设计 子程序可自动维护断点即主程序中下一条指令的子程序可自动维护断点即主程序中下一条指令的地址,但不会自动维护现场即运转子程序前的存地址,但不会自动维护现场即运转子程序前的存放器形状,假设要维护现场,那么在子程序的开场放器形状,假设要维护现场,那么在子程序的开场部分用压入堆栈命令维护现场,在终了部分用弹出堆部分用压入堆栈命令维护现场,在终了部分用弹出堆栈命令恢复现场栈命令恢复现场 可利用存放器、存储单元或堆栈进展子程
15、序的入口可利用存放器、存储单元或堆栈进展子程序的入口参数和出口参数传送参数和出口参数传送例题例题5 5:设片内:设片内RAMRAM单元单元MDAMDA和和MDBMDB内有两数内有两数a a和和b b,请编出求请编出求c=a2+b2c=a2+b2并把并把c c送入片内送入片内MDCMDC单元的程序,单元的程序,设设a a和和b b皆为皆为1010以内的自然数。以内的自然数。 SQRTAB 100 81 64 49 36 25 表表 16 9 4 1 0 SQRTAB:DB 0, 1, 4, 9;平方表;平方表 DB 16, 25, 36 DB 49, 64, 81,100 END ORG 100
16、0H ORG 1000H MDA DATA 20H MDA DATA 20H MDB DATA 21H MDB DATA 21H MDC DATA 22H MDC DATA 22H MOV SP, #40H MOV SP, #40H MOV A, MDA MOV A, MDA ;入口参数传送;入口参数传送 ACALL SQR ACALL SQR ;调用子程序;调用子程序 MOV R1, A MOV R1, A MOV A, MDB MOV A, MDB ACALL SQR ACALL SQR ADD A, R1 ADD A, R1 MOV MDC, A MOV MDC, A SJMP $ SJ
17、MP $SQRSQR:ADD A, #01 ADD A, #01 ;子程序;子程序 MOVC A, A+PC MOVC A, A+PC RET RET ;单字节指令;单字节指令SQRTABSQRTAB:DB 0,1,4,9,16 DB 0,1,4,9,16 ;平方表;平方表 DB 25,36,49,64,81,100DB 25,36,49,64,81,100 END END练习练习1 1:片外:片外RAMRAM从从0000H0000H到到007FH007FH有一数据块,请编有一数据块,请编出将它们传送到出将它们传送到3000H3000H到到307FH307FH区域的程序。区域的程序。 解:解:
18、 ORG 1000H ORG 1000H MOV R0, #00H MOV R0, #00H MOV DPTR, #3000H MOV DPTR, #3000H MOV R2, MOV R2, 80H80H LP1: MOVX A, R0 LP1: MOVX A, R0 MOVX DPTR, A MOVX DPTR, A INC R0 INC R0 INC DPTR INC DPTR DJNZ R2, LP1 DJNZ R2, LP1 END END练习练习2 2:有:有200200名学生的外语统考成果存放在名学生的外语统考成果存放在80C5180C51片片外外RAMRAM始址为始址为ENGL
19、ISHENGLISH的延续存储单元,请统计成的延续存储单元,请统计成果大于等于果大于等于9090分的学生人数,并把统计结果存入片内分的学生人数,并把统计结果存入片内RAMRAM的的GRADAGRADA单元。单元。练习练习3 3:有两个四字节无符号数分别存放在片内:有两个四字节无符号数分别存放在片内RAMRAM以以FIRSTFIRST和和SECONDSECOND为始址的区域低字节在前,高字节为始址的区域低字节在前,高字节在后,请编程将两数之和设和也为四字节存于在后,请编程将两数之和设和也为四字节存于片内片内RAMRAM以以SUMSUM为始址的区域。为始址的区域。LP: MOV R0,50HLP:
20、 MOV R0,50H MOV A,R0 MOV A,R0 MOV R0,51H MOV R0,51H ADDC A,R0 ADDC A,R0 MOV R1,A MOV R1,A INC 50H INC 50H INC 51H INC 51H INC R1 INC R1 DJNZ R2,LP DJNZ R2,LP SJMP $ SJMP $ END END解:解:ORG 1000HORG 1000HFIRST DATA 20HFIRST DATA 20HSECOND DATA 30HSECOND DATA 30HSUM DATA 40HSUM DATA 40HMOV 50H,#FIRSTMOV
21、 50H,#FIRSTMOV 51H,#SECONDMOV 51H,#SECONDMOV R1,#SUMMOV R1,#SUMMOV R2,#4MOV R2,#4CLR CCLR C练习练习4 4:知片内:知片内RAMRAM的的MDAMDA单元和单元和MDBMDB单元分别存有两个单元分别存有两个数数a a、b b,请用查表子程序实现,请用查表子程序实现C=a2+2ab+b2C=a2+2ab+b2,并把,并把C C存存于片内于片内RAMRAM的的MDCMDC单元。设单元。设a a、b b均为均为5 5以内的自然数。以内的自然数。SQR: ADD A,#1 SQR: ADD A,#1 MOVC A
22、,A+PC MOVC A,A+PC RET RETTAB: DB 0,1,4,9,16,25TAB: DB 0,1,4,9,16,25 DB 36,49,64,81 DB 36,49,64,81 DB 100 DB 100 END END解:解:ORG 1000HORG 1000HMDA DATA 30HMDA DATA 30HMDB DATA 31HMDB DATA 31HMDC DATA 32H MDC DATA 32H MOV SP,#50HMOV SP,#50HMOV A,MDAMOV A,MDAADD A,MDBADD A,MDBACALL SQRACALL SQRMOV MDC,A
23、MOV MDC,ASJMP $SJMP $练习练习5 5:片内:片内RAMRAM从从30H30H单元开场存放有一个正数表,单元开场存放有一个正数表,以以-1-1作为表的终了标志,编程统计该表的长度并作为表的终了标志,编程统计该表的长度并存入片内存入片内RAM70HRAM70H单元。假设表的长度小于单元。假设表的长度小于255255。LP : MOV A,R0 LP : MOV A,R0 CJNE A,#0FFH,CHK CJNE A,#0FFH,CHK INC 70H INC 70H SJMP DONE SJMP DONECHK: INC 70HCHK: INC 70H INC R0 INC
24、R0 SJMP LP SJMP LPDONE:SJMP $DONE:SJMP $ END END解:解:ORG 1000HORG 1000HMOV R0,#30HMOV R0,#30HMOV 70H,#00HMOV 70H,#00H2019机电3-4班练习练习6 6:设晶振频率为:设晶振频率为6MHz6MHz,试编写一能延时,试编写一能延时20ms20ms的子的子程序。提示:采用程序。提示:采用NOPNOP指令延时指令延时解:解:分析:分析:1 1个机器周期为个机器周期为12/(612/(6* *106)=2us106)=2us, 那么那么20ms20ms需耗费需耗费 20 20* *10-3
25、/(210-3/(2* *10-6)=1000 10-6)=1000 个个机器周期机器周期 NOP NOP为单周期指令,所以需循环为单周期指令,所以需循环10001000次,一个次,一个8 8位的存储单元只能最大只能存储位的存储单元只能最大只能存储255255,所以,需求采用,所以,需求采用双重循环。双重循环。 本程序分别采用本程序分别采用R2R2和和R3R3存储内、外循环次数,存储内、外循环次数,内循环内循环5050次,外循环次,外循环2020次。次。DELAY: MOV R3,#100DELAY: MOV R3,#100EXT : MOV R2,#100EXT : MOV R2,#100I
26、NN : NOPINN : NOP DJNZ R2,INN DJNZ R2,INN DJNZ R3,EXT DJNZ R3,EXT RET RET 思索:误差太大,如何准确定时?思索:误差太大,如何准确定时?练习练习7 7:设:设80318031单片机片内单片机片内RAMRAM从从30H30H单元开场存放有单元开场存放有2020个个8 8位二进制数。要求编一子程序能把它们从大到小依次位二进制数。要求编一子程序能把它们从大到小依次存入片外存入片外RAMRAM从从1000H1000H开场的存储区。开场的存储区。 问题:需思索排序的算法问题:需思索排序的算法解:解:ORG 1000HORG 1000
27、HMAX DATA 30HMAX DATA 30HMOV DPTR,#1000HMOV DPTR,#1000HMOV R0,#30HMOV R0,#30HMOV R2,#20 ;MOV R2,#20 ;外循环次外循环次数数EXT:MOV A,R0;EXT:MOV A,R0;内循环初始内循环初始化化 MOV R1,AMOV R1,A MOV MAX,R1 MOV MAX,R1 MOV A,R2; MOV A,R2;设置内循环设置内循环次数次数 MOV R3,AMOV R3,AINC R0INC R0INC DPTRINC DPTRDJNZ R2,EXT DJNZ R2,EXT ENDENDINN: MOVX A,R1INN: MOVX A,R1 CJNE A,MAX,BRCH1 CJNE A,MAX,BRCH
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年护理研究:护理论文的撰写课件
- 文学领域学术交流-研究成果和研究发现
- 博士答辩精准指南-全面解析答辩流程与技巧
- 核心素养背景下初中语文课程资源整合的方法探讨
- 感恩奋进友爱同行-小学主题班会课件
- 合作项目全程信用保证承诺书5篇范文
- 与合作伙伴共享年度市场调研成果的函件(8篇范文)
- 建筑工程施工安全控制要点及案例分析
- 企业财务管理信息化技术探讨
- 环保能源利用及节能减排实施方案
- 行政执法2025年广东省考试题及答案
- 财税政策解读与企业合理避税指南
- 2025年骨干教师选拔笔试试题及答案
- 2025年国际档案日档案知识竞赛试题内附答案
- 2025泌尿外科学(正高)考试试题及答案(6Q)答案和解析
- 电表箱施工方案
- T-CEC 309-2020石墨基柔性接地装置使用导则
- 圆柱、圆锥应用题(专项突破)-小学数学六年级下册人教版(含解析)
- 内科护理副高职称答辩题库及答案
- 专业电机知识培训课件
- 2025年江苏省中职职教高考统考英语试卷真题(含答案详解)
评论
0/150
提交评论