汇编语言程序设计课件.ppt

上传人:小飞机 文档编号:2159231 上传时间:2023-01-21 格式:PPT 页数:36 大小:4.20MB
返回 下载 相关 举报
汇编语言程序设计课件.ppt_第1页
第1页 / 共36页
汇编语言程序设计课件.ppt_第2页
第2页 / 共36页
汇编语言程序设计课件.ppt_第3页
第3页 / 共36页
汇编语言程序设计课件.ppt_第4页
第4页 / 共36页
汇编语言程序设计课件.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《汇编语言程序设计课件.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计课件.ppt(36页珍藏版)》请在三一办公上搜索。

1、汇编语言程序设计,2,学习内容,4-1 汇编程序的约定,4-2 程序设计步骤,4-3 直线程序,4-4 分支程序,4-5 循环程序,4-6 子程序,3,4-1 汇编程序约定,汇编语言程序:用汇编语言编写的、完成特定功能的指令序列。汇编程序:能将汇编语言源程序转换成机器语言目标程序的系统软件。,汇编语言程序到机器语言程序的转换过程称为汇编。1.手工汇编:人工查指令表汇编。用于设计短小程序或调试程序的场合。2.机器汇编:用汇编程序进行汇编。交叉编译的概念;,汇编语言的特点:1 程序效率高,占存储空间小,运行速度快;2 使用汇编语言比高级语言难,需对硬件有相当了解;3 缺乏通用性,不易移植;,4,源

2、程序使用机器汇编要考虑汇编程序的约定,1)按指令格式和语法规则编写程序。常数的表示:十进制数:20十六进制数:87H,0F0H二进制数:01011001B字符:H字符串:“Hello”。2)使用伪指令提供汇编信息。,5,汇编的主要任务:,1)确定程序中每条汇编语言指令的指令机器码。2)确定每条指令在存储器中的存放地址。3)提供错误信息。4)提供目标执行文件(*.OBJ/*.HEX)和列表文件(*.LST)。,一.汇编语言指令类型1.机器指令:指令系统中的全部指令,每条指令有对应的机器代码。2.伪指令:汇编控制指令,仅提供汇编信息,没有指令代码。,6,一.汇编语言指令类型,3.宏指令:宏汇编功能

3、:将需要多次反复执行的程序段定义成一个宏指令名(宏定义),编程时,可在程序中使用宏指令名来替代一段程序(宏调用)。,宏定义过程:宏指令名 MACRO 形式参数;定义程序段 ENDM宏调用过程:宏指令名 实际参数 宏指令名 实际参数,7,二汇编控制指令(伪指令)常用伪指令及其功能:,1.ORG起始地址指令:指明程序和数据块起始地址。指令地址 机器码源程序ORG 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6MOV A,R0 ORG 3000H 3000H 23DB 23H,100,A 3001H 64 3002H41,2.DB 定义字节型常数指令。例:DB

4、 12H,100,A,8,4.EQU 等值。为标号或标识符赋值。X1 EQU 2000HX2 EQU 0FH MAIN:MOV DPTR,#X1 ADD A,#X2,5.END 结束汇编指令。例:START:END START,3.DW 定义字型常数指令。例:DW 1234H,5678H,9,6 DS 定义存储区命令。从指定地址开始保留指定数目的字节单元作为存储区。例如:ADDRTABL:DS 20即从标号ADDRTABL代表的地址开始,保留20个连续的地址单元。7.BIT 位定义命令。例:AQ BIT P1.0(也可以是绝对地址),10,汇编语言程序设计步骤,一.确定方案和计算方法二.了解应

5、用系统的硬件配置、性能指标。三.建立系统数学模型,确定控制算法和操作步骤。四.画程序流程图 表示程序结构和程序功能,五.编制源程序1.合理分配存储器单元和了解I/O接口地址。2.按功能设计程序,明确各程序之间的相互关系。3.用注释行说明程序,便于阅读和修改调试和修改。,11,4-2 常用程序结构:直线程序、分支程序、循环程序、子程序,4-2-1 直线程序直线程序又称简单程序,程序走向只有一条路径。,双字节变补程序(设数据在R4R5中):MOV A,R5;取低字节CPL AADD A,#1;低字节变补MOV R5,AMOV A,R4;取高字节CPL AADDC A,#0;高字节变补MOV R4,

6、A,12,例 4-2-1-1 压缩式BCD码分解成为单字节BCD码。,MOV R0,#40H;设指针MOV A,R0;取一个字节MOV R2,A;暂存ANL A,#0FH;清0高半字节INC R0MOV R0,A;保存数据个位MOV A,R2SWAP A;十位换到低半字节ANL A,#0FHINC R0MOV R0,A;保存数据十位,十 个,13,4-2-2 分支程序由条件转移指令构成程序判断框部分,形成程序分支结构。,4-2-2-1单重分支程序一个判断决策框,程序有两条出路。两种分支结构:,例 求R2中补码绝对值,正数不变,负数变补。MOV A,R2 JNB ACC.7,NEXT;为正数?C

7、PL A;负数变补 INC A MOV R2,ANEXT:SJMP NEXT;结束,14,行李计价:当G5,M=G3;当G5,M=G3+(G-5)(5-3),FRT:MOV A,40H;取行李重量计价单位G MOV R3,A MOV B,#03H;M=G3 MUL AB MOV R2,A;暂存3G MOV A,R3;取回G CJNE A,#05H,L1;G5?SJMP WETCL1:JC WETC;是,转至WETC SUBB A,#05H;否则M=3G+2(G-5)RLC A ADD A,R2WETC:MOV 41H,A;存结果M RET,15,4-2-2-2 多重分支程序一多次使用条件转移指

8、令,形成两个以上判断框。,例 求符号函数Y=SGN(X)+1 当 X0SGN(X)=0 当 X=0-1 当 X0,SYMB:MOV A,40H;取X JZ STOR;X=0,Y=X JB ACC7,MINUS;X0 MOV A,#1;X0,Y=+1 SJMP STORMINUS:MOV A,#0FFH;X0,Y=-1STOR:MOV 41H,A;保存Y RET,16,二按分支号转移,如:分支号=0,程序转移到ADDR0处;当分支号=1,程序转移到ADDR1处;。,(1)用地址表法。设分支号已存入A。MTJS:MOV DPTR,#TAB;取表首地址 CLR C;分支号2 RLC A MOV R2

9、,A INC A MOVC A,A+DPTR;取分支地址低位 PUSH ACC;入栈保存 MOV A,R2 MOVC A,A+DPTR;取分支地址高位 PUSH ACC;入栈保存 RET;分支地址PC,转移TAB:DW ADDR0;分支地址表 DW ADDR1 ADDR0:;程序段0,17,(2)转移表法。用分支转移指令 JMP A+DPTR。设R7R6=分支号,MTJS:MOV DPTR,#TAB;指向表首地址 MOV A,R7;分支号高字节3 MOV B,#03H MUL AB;乘积不超过1字节 ADD A,DPH MOV DPH,A MOV A,R6;分支号低字节3 MOV B,#03H

10、 MUL AB XCH A,B ADD A,DPH;DPHDPH+(R7、R6)3)高字节 MOV DPH,A XCH A,B;A(R7、R6)3)低字节 JMP A+DPTR;实现多分支转移TAB:LJMP ADDR0;转移表 LJMP ADDR1 LJMP ADDRNADDR0:;程序段0,18,4-2-3 循环程序包含多次重复执行的程序段,循环结构使程序紧凑。,4-2-3-1循环程序的构成,各个环节任务:一初始化部分循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。,二循环体循环工作部分:需多次重复处理的工作。循环控制部分:1.修改指针和循环控制变量。2.检测循环条件:满足循环

11、条件,继续循环,否则退出循环。三.结束部分 处理和保存循环结果。允许0次循环的循环结构:在循环工作之前检测循环条件。,19,4-2-3-2 单重循环简单循环结构:循环体中不套循环。,例:求n个单字节数据的累加,设数据串已在43H起始单元,数据串长度在42H单元,累加和不超过2个字节。,SUM:MOVR0,#42H;设指针MOVA,R0MOVR2,A;循环计数器nCLRA;结果单元清0MOVR3,AADD1:INCR0;修改指针ADDA,R0;累加JNC NEXT;处理进位INCR3;有进位,高字节加1NEXT:DJNZ R2,ADD1;循环控制:数据是否加完?MOV40H,A;循环结束,保存结

12、果MOV41H,R3RET,20,循环控制方法:计数控制、特征标志控制。,一.计数控制:设循环计数器,控制循环次数。正计数和倒计数两种方式。例:为一串7位ASCII码数据的D7位加上奇校验,设数据存放在片外RAM的2101H起始单元,数据长度在2100H单元。,MOV DPTR,#2100HMOVX A,DPTRMOV R2,ANEXT:INC DPTRMOVX A,DPTRORL A,#80HJNB P,PASSMOVX DPTR,APASS:DJNZ R2,NEXTDONE:SJMP DONE,21,二.特征控制:设定循环结束标志实现循环控制。,例:找正数表最小值。正数表存在片外RAM中以

13、LIST为起始单元,用-1作为结束标志。,START:MOVDPTR,#LIST;数表首地址 MOVB,#127;预置最小值NEXT:MOVX A,DPTR;取数 INCDPTR;修改指针 CJNE A,#-1,NEXT1;是否为数表结尾?SJMP DONE;循环结束NEXT1:CJNE A,B,NEXT2;比较NEXT2:JNCNEXT MOVB,A;保存较小值 SJMP NEXTDONE:SJMP DONE,习题统计一班考试为100分和不及格人数,成绩单在41H起始单元。,22,4-2-3-3 多重循环循环体中套循环结构。以双重循环使用较多。,例将内存一串单字节无符号数升序排序。步骤:每次

14、取相邻单元的两个数比较,决定是否需要交换数据位置。第一次循环,比较N-1次,取到数据表中最大值。第二次循环,比较N-2次,取到次大值。第N-1次循环:比较一次,排序结束。,23,SORT:MOV A,#N-1;N个数据排序 MOV R4,A;外循环次数LOOP1:MOV A,R4 MOV R3,A;内循环次数 MOV R0,#TAB;设数据指针LOOP2:MOV A,R0;取二数 MOV B,A INC R0 MOV A,R0 CJNE A,B,L1;比较L1:JNC UNEX;AB,不交换 DEC R0;否则交换数据 XCH A,R0 INC R0 MOV R0,AUNEX:DJNZ R3,

15、LOOP2;内循环结束?DJNZ R4,LOOP1;外循环结束?RET,24,软件延时程序。用循环程序将指令重复多次执行,实现软件延时。,试计算延时程序的执行时间。源程序指令周期(M)指令执行次数,习题DELAY:MOV R6,#1001D1:MOV R7,#101D2:NOP1 DJNZ R7,D22 DJNZ R6,D12 RET2计算延时程序的执行时间(设时钟f=12MHz,M=1s)。,延时时间计算:(设时钟f=12MHz)t=(11+1100+310010+2100+21)M=3303s,110010010100101001,25,4-2-4 子程序子程序:能完成某项特定功能的独立程

16、序段,可被反复调用。,4-2-4-1 子程序设计一子程序入口用标号作为子程序名。二调用子程序之前设置好堆栈。三用返回指令RET结束子程序,并保 证堆栈栈顶为调用程序的返回地址。四.子程序嵌套须考虑堆栈容量。五.提供足够的调用信息:如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。,26,4-2-4-2 子程序的类型按子程序与主程序之间传递参数的方式分类。,入口参数:调用子程序之前,需要传给子程序的参数。出口参数:子程序送回调用程序的结果参数。,选用不同的参数传递方式。1.寄存器传送参数2.存储器传送参数3.堆栈传送参数,设计子程序应满足通用性的要求

17、,不针对具体数据编程。如:1.子程序功能为求单字节数的立方:AA3,入口参数和出口参数为A。2.子程序功能为求单字节数的n次方:(41H)(42H)(40H)A,入口参数为(40H)和A,出口参数为(42H)(41H)。,27,例:将R4R5R6中三个字节数据对半分解,变成6个字节,存入显示缓冲区(DISMEM0DISMEM5)。,1)子程序UFOR1的功能:将A累加器中单字节数据,对半分解成两个字节,存入R0所指向的相邻两个单元UFOR1:MOV R0,#0 XCHD A,R0;保存低半字节 INC R0;修改指针 MOV R0,#0 SWAP A XCHD A,R0;保存高半字节 RET2

18、)调用子程序UFOR1之前,将待分解的内容送A,存放地址送R0。,28,例 比较两个数据串是否完全相等,若完全相等,A=0;否则A=FFH。,PMT:MOVR2,A;设数串长度CHC:MOVA,R0;各取数串中的一个数MOV42H,R1CJNE A,42H,NOM;是否相等?不相等转移INCR0;相等,修改指针INCR1DJNZ R2,CHC;全部比较完?MOVA,#0;完全相等SJMP PENDNOM:MOVA,#0FFH;不完全相等PEND:RET,29,例:查表求出数据的ASCII码,再以字符形式输出。,1)子程序HEXASC功能:取出堆栈中数据,查表将低半字节转换成ASCII码送累加器

19、A。2)分别将待转换数据入栈,然后调用子程序HEXASC。,MOV SP,#30H PUSH 40H;入口参数入栈 LCALL HEXASC POP AHEXASC:DEC SP;跳过返回地址 DEC SP POP A;取入口参数;查表求ASCII码 PUSH A;保存出口参数 INC SP;指向返回地址 INC SP RET DB 0,1,;ASCII码表,30,4-3 程序设计举例,一.多字节加法子程序,Z=X+Y。ADDS:CLRCLOOP:MOVA,R0ADDC A,R1;加一字节MOVR0,A;存和一字节INCR0;修改指针INCR1DJNZ R2,LOOP;全部字节加完?RET,习

20、题1编写十进制多字节加法子程序,Z=X+Y。习题2编写多字节减法子程序,Z=X-Y。思考题修改程序使运算结果保存到其他存储单元。,4-3-1 算术运算程序,31,二 多字节无符号数乘除运算,相加计算多字节乘法程序,步骤:1.部分积清零。2.检测乘数各位,为1则部分积对位加被乘数,否则加0。3.对位方法:被乘数左移或部分积右移。,初值:0 00 Cy R4R5 右移R6R7并检测Cy+R2R3 当Cy=1 Cy R4R5 得部分积并右移对位 乘积最后右移一次,110 101 110 000+110 11110,例:双字节相乘 R2R3R6R7R4R5R6R7解:部分积清零,右移检测乘数,决定部分

21、积是否加被乘数,部分积右移对位。,循环16次,32,相减计算多字节除法程序,步骤:1.对齐高位被除数试减除数。2.若够减商上1,不够减商上0且恢复余数。3.余数左移或除数右移对位。4.循环重复前3步,直至取够相应位数的商。,例R2R3R4R5R6R7R4R5(余数R2R3)解1.判断R2R3R6R7?使商不大于16位。2.被除数左移1位,试减除数。3.若够减,商加1并保留余数。,101110101/0101 0100 0101 1001 0101 1001 0101 1000 0101 011,CyR2R3R4R50-R6R7+1 够减 R2R3 不够减恢复余数,循环16次,33,4-3-2

22、数制转换程序(一)十六进制数转换为ASCII码,(二)ASCII码转换为十六进制数,09的ASCII码:3039H,AF的ASCII码:4146H。,HASC:CJNE A,#0AH,NAHEX:CLR CN:JNC N1SUBBA,#30HADD A,#30HCJNEA,#0AH,NSJMPSEN:JC N1N1:ADD A,#37HSJMP AESE:RETN1:SUBB A,#11HCJNE A,#06H,N2N2:JNCERRADDA,#0AHSJMP AEERR:MOVA,#0FFHAE:RET,34,(三)BCD码与二进制数之间的转换有乘法和除法两种转换方式。,1BCD码转换为二进

23、制数 D=dn-110n-1+dn-210n-2+d1101+d0100=(dn-110+dn-2)10+dn-3)10+d1)10+d0“整数十翻二”:从最高位开始,按二进制运算法则循环“乘十加次低位”:B=B10+bi。,35,2二进制数转换为BCD码B=bn-12n-1+bn-22n-2+b121+b020=(bn-12+bn-2)2+bn-3)2+b1)+b0,“整数二翻十”:从最高位开始,按十进制运算法则循环“乘二加次低位”:D=D2+di。,除法转换式:bn-12n-1+bn-22n-2+b0=dm-110m-1+dm-210m-2+d0两边同时除基数,两边的整数或小数应该分别相等。除基数,取出1位余数,得到的商继续除基数取余数。循环“除基取余”操作,得到转换进制的各位系数。,感谢您的聆听!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号