汇编语言程序设计X.ppt

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

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

1、第三章 MCS-51单片机汇编语言程序设计,内容提要:,3-2汇编语言及汇编过程,3-1汇编语言程序设计概述,3-3汇编语言程序的基本结构及应用举例,3-4编程综合举例,高级语言:,3-1 汇编语言程序设计概述,一、汇编语言的特点及其语句格式,汇编语言:,机器语言:,程序设计语言:,用二进制代码表示指令和数据。,用助记符表示指令操作功能,用标号表示操作对象。,独立于机器,面向过程,接近自然语言和数学表达式.,助记符指令和机器指令一一对应,效率高、占用存储空 间小、运行速度快,编制的程序是最优化的程序。使用汇编语言编程比使用高级语言编程困难,要深入了 解硬件。汇编语言能直接管理和控制存储器及接口

2、电路等硬件设 备,也能处理中断。汇编语言无通用性,程序不易移植,各种计算机的汇编 语言不能通用。,标 号语句地址的标志符号,其它语句访问该语句的地址。1-8个ASC字符组成,第一个字符必须是字母。不能使用本汇编语言已经定义了的符号作标号(助记符伪指 令寄存器名等)。标号后为冒号(:)。一个程序中的标号不能重复定义。标号不是必须的,其它语句访问该语句时才定义标号。操作码表示了该指令所能执行的操作功能。操作数表示参加操作的数的本身或操作数所在的地址。,标号:,操作码助记符,第一操作数,,第二操作数,;注释,MCS-51指令格式:,在程序中需对数据的存放、寄存器和工作单元的使用作出具体安排。要对单片

3、机的硬件结构有详细的了解。程序设计的技巧性。,二、汇编语言程序设计的特点,3-2 汇编语言及汇编过程,一、汇编程序功能,源程序(汇编指令程序),目标程序(机器码指令程序),汇编指令与机器码指令有一一对应的关系。汇编程序是一种翻译程序,将源程序翻译成目标程序。,二、汇编程序的汇编过程 汇编有两种方法:手工汇编、机器汇编。,1、手工汇编:第一次汇编:确定地址,翻译成各条机器码,字符标号原样写出;第二次汇编:标号代真,将字符标号用所计算出的具体地址值或偏移量代换。,源程序,目标程序,地址,ORG 1000H START:MOV R0,2FH MOV R2,#00H MOV A,R0 MOV R3,A

4、 INC R3 SJMP NEXT LOOP:INC R0 CJNE R0,#44H,NEXT INC R2 NEXT:DJNZ R3,LOOP MOV 2AH,R2 SJMP$END,第一次汇编,第二次汇编,1000 A82F1002 7A001004 E61005 FB1006 0B1007 80NEXT1009 08100A B644NEXT100D 0A100E DBLOOP1010 8A2A1012 80FE,A82F7A00E6FB0B800508B644010ADBF98A2A80FE,机器汇编是一个两次扫描过程。第一次扫描:检查语法错误,确定符号名字;建立使用的全部符号名字表;

5、每一符号名字后跟一对应值(地址或数)。第二次扫描:是在第一次扫描基础上,将符号地址转换成 地址(代真);利用操作码表将助记符转换 成相应的目标码。,三、伪指令 伪指令是告诉汇编程序,如何汇编源程序的指令。伪指令既不控制机器的操作,也不能被汇编成机器代码,故称为伪指令。,1、起始地址伪指令 ORG(ORiGin)ORG addr16 用于规定目标程序段或数据块的起始地址,设置在程序开始处。2、汇编结束伪指令 END(END of assembly)告诉汇编程序,对源程序的汇编到此结束。一个程序中只出现一次,在末尾。,3、赋值伪指令 EQU(EQUate)告诉汇编程序,将汇编语句操作数的值赋予本语

6、句的标号。格式:标号名称 EQU 数值或汇编符号“标号名称”在源程序中可以作数值使用,也可以作数据地址、位地址使用。先定义后使用,放在程序开头。4、定义字节伪指令 DB(Define Byte)告诉汇编程序从指定的地址单元开始,定义若干字节存储单 元并赋初值。(定义数据)格式:标号:DB 字节数据或字节数据表或引号起来5、定义字伪指令 DW(Define Word)的字符串(ASC)从指定地址开始,定义若干个16个位数据,高八位存入低地址;低八位存入高地址。(定义地址),例、ORG 1000H PIOI:DW 7654H,40H、12、AB,6、数据地址赋值伪指令 DATA 将表达式指定的数据

7、地址赋予规定的字符名称 格式:字符名称 DATA 表达式注:该指令与EQU指令相似,只是,可先使用后定义,放于程序开头、结尾均可。,7、定义空间伪指令 DS 从指定地址开始,保留由表达式指定的若干字节空间作 为备用空间。格式:标号:DS 表达式例2、ORG 1000H DS 0AH DB 71H,11H,11H;从100BH开始存放;71H11H、11H。,注:DB、DW、DS 只能用于程序存储器;而不能用于数据存储器。,8、位地址赋值伪指令 BIT将位地址赋予规定的字符名称。格式:字符名称 BIT 位地址,例3、X1 BIT P1.2 相当于 X1 EQU 92H,3-3 汇编语言程序的基本

8、结构及应用举例,程序编写做到:占用存储空间少;运行时间短;程序的编制、调试及排错所需时间短;结构清晰,易读、易于移植。,按结构化程序设计思想,任何复杂程序都可由顺序结构、分支结构、循环结构 子程序结构,语句 3,语句 2,顺序结构,入口,语句 1,出口,分支结构,入口,条件满足否?,分支 1,出口,Y,N,分支 2,循环结构,入口,处理,修改条件,条件满足否?,Y,出口,N,一、顺序程序举例例1、设在片内RAM的60H单元存有1个字节代码,要求将其分解成两个4位字段,高4位存入原单元的低4位,其低4位存入61H单元的低4位,且要求这两个单元的高4位均为0,试编制完整程序。,分析:,#¥,解:核

9、心指令 ANL ORL 1000H MODE:MOV R0,#60H MOV A,R0 MOV B,A ANL A,#0F0H SWAP A MOV R0,A ANL B,#0FH MOV A,B INC R0 MOV R0,A END,二、分支结构与分支程序设计1 单分支程序结构:根据不同的条件,进行相应的处理。通常用条件转移指令形成简单分支结构。如:判(A)=Z 或 NZ,转移(JZ,JNZ)判(CY)=1 或 0,转移(JC,JNC)判(bit)=1 或 0,转移(JB,JNB,JBC)CJNE 比较不相等转移 DJNZ 减1条件转移,单分支程序举例例1、设在外RAM的ST1、ST2和S

10、T3共三个连续单元,其中ST1、ST2存放着两个8位无符号二进制数,要求找出其中大数存入ST3中。,START:CLR C;进位位清”0“MOV DPTR,#ST1;设置数据指针 MOVX A,DPTR;取第一个数 MOV R2,A;第一个数存R2 INC DPTR;数据指针加1 MOVX A,DPTR;取第二个数 SUBB A,R2;两数比较 JNC BIG1;第二个数大转BIG1 XCH A,R2BIG0:INC DPTR MOVX DPTR,A;存大数 RET BIG1:MOVX A,DPTR SJMP BIG0,例2、设a存放在累加器A中,b存放在寄存器B中,要求按下式 计算Y值,并将

11、结果Y存于累加器A中,试编写程序。a-b(a0)Y=a+b(a 0),解:本题关键是判a是正数,还是负数;由ACC.7便知。ORG 1000H BR:JB ACC.7,MINUS CLR C SUBB A,B SJMP DONE MINUS:ADD A,B DONE:SJMP END,多分支程序结构,指令系统中没有多分支转移指令,无法使用单条指令完成多分支转移,多分支程序举例(1)使用多条CJNE指令,连续比较,实现多分支转移,CJNE A,55H,LOOP1;TaT55,转LOOP1 AJMP FH;Ta=T55,返回LOOP1:JNC JW;若(CY)=0,则TaT55,转JW CJNE

12、A,54H,LOOP2;TaT54,转LOOP2 AJMP FH;Ta=T54,返回LOOP2:JC SW;若(CY)=1,则TaT54,转SWFH:RET,多分支程序举例(2)使用查转移指令表的方法实现多分支转移,也是以查表实现多分支程序转移,但表中放转移指令,转移指令用AJMP,转移范围是2KB(128分支),用LJMP是64K,例5 假定键盘上有3个操作键,键值已读入A中,其功能为:,.MOV DPTR,#BRTAB CLR C RLC A JMP A+DPTRBRTAB:NOP NOP AJMP DS AJMP XS AJMP CR.,三、循环程序,循环是为了重复执行一个程序段,汇编语

13、言没有专用循环指令,只能用条件转移指令通过条件判断来控制循环是继续还是结束,循环结构不但使程序简练,而且大大节省存储空间。循环程序包含四部分:、初始化部分(循环计数器、变量置初值)、循环处理部分(主体,需要重复执行的部分)、循环控制部分(修改地址指针、修改变量、检测循环结束条件)、循环结束部分(对结果分析、处理,存放结果),先处理,后判断:,开始,初始化部分,处理部分,修改变量,循环结束?,结束部分,结束,先判断,后处理:,开始,初始化部分,修改变量,循环结束?,结束部分,结束,处理部分,循环有:单循环、多重循环。循环次数已知,可用计数器控制循环次数;循环次数未知,按问题条件控制循环是否结束。

14、,1、单循环程序(1)循环次数是已知的程序例1、已知片外RAM的1000H单元存放一8位二进制数,要求将其转移成相应的ASCII码,并以高位在前,低位在后的顺序,依次存放到片内RAM以40H为首地址的连续单元中,试编程。解:先将中间单元置成30H,然后判欲转换位是否为1,若是,则将中间单元内容加1;否则,中间单元内容保持不变。通过左移指令实现由高到低的顺序进行转换。,START:MOV R2,#08H;循环计数初值(循环次数已知)MOV DPTR,#1000H;地址指针初值 MOV R0,#3FH;地址指针初值 MOVX A,DPTR;取数 MOV B,A;暂存B中 LOOP:MOV A,#3

15、0H;将中间单元(A)置成30H JNB B.7,NA;判断转换的二进制位为0否?INC A;若为1,则变成1的ASCII码“31H”NA:INC R0;修改地址指针 MOV R0,A;存放转换的结果 MOV A,B RL A;作好准备,判断下一位 MOV B,A;暂存 DJNZ R2,LOOP;判断转换结束否?未完继续 SJMP,(2)循环次数未知的程序例2、设用户用键盘输入长度不超过100字节的字符串放在8031单片机外部RAM以2000H为首地址的连续单元,该字符串用回车符CR(CR=0DH)作为结束标志,要求统计此字符串的长度并存入内部RAM的1FH单元中。解:从首单元开始取数,每取一

16、数判断其是否为CR,是则结束。,ORG 1000HSTADA DATA 1FFFHSLANG DATA 1FHCMCR2:MOV DPTR,#STADA MOV B,#0FFH,CRLOP:INC DPTR INC B MOVX A,DPTR CJNE A,#0DH,CRLOP MOV SLANG,B SJMP END,3-4 编程综合举例,一、加减法运算,两个N字节无符号数分别存放在内RAM的单元中,低字节在前,高字节在后,R0指定被减数单元地址,R1指定减数单元地址,差放原被减数单元,CLR C;清进位位 MOV R2,#N;设定字节数 LOOP:MOV A,R0;从低位取被减数的一个字节

17、 SUBB A,R1;两数相减 MOV R0,A;存字节相减的差 INC R0 INC R1 DJNZ R2,LOOP;两数相减完否 JC QAZ;最高字节有借位转溢出处理 RET,二、乘法运算,进行两个双字节无符号数乘法运算,被乘数和乘数分别放在内RAM的R2、R3单元和R6、R7单元中,其中R2、R6为高字节,相乘结果(积)依次放在R4、R5、R6、R7中,DBMUL:MOV A,R3 MOV B,R7 MUL AB;R3*R7(得到第一次部分积)XCH A,R7;原R7内容送A,R7R3R7L(在R7中得到 乘积的第四字节)MOV R5,B;R5R3R7H MOV B,R2 MUL AB

18、;R2*R7(得到第二次部分积)ADD A,R5;R2R7L+R3R7H MOV R4,A;R4 和 CLR A ADDC A,B;R2R7H+(R2R7L+R5时产生的进位)MOV R5,A;R5 和 MOV A,R6 MOV B,R3 MUL AB;R3*R6(得到第三次部分积)ADD A,R4;R3R6L+R4 XCH A,R6;A R6,R6 R3R6L+R4(在R6中 得到乘积的第三字节),XCH A,B;AR3R6H,B R6ADDC A,R5;R3R6H+R5+(R3R6L+R4时产生的进位)MOV R5,A;R5 和MOV F0,C;F0 进位MOV A,R2MUL AB;R2

19、*R6(得到第四次部分积)ADD A,R5;R2R6L+(R3R6H+R5时产生的进位)MOV R5,A;在R5中得到乘积的第二字节CLR AMOV ACC.0,C;累加器最高位进位MOV C,F0ADDC A,B;R2R6H+F0+ACC.0MOV R4,A;在R4 中得到乘积的第一字节RET,三、除法运算,除法指令DIV AB 是对单字节的,多字节除法不能直接使用,需要编程实现。常用的一种方法是“移位相减”,即按位进行:从被除数高位逐位减去除数,够减商加1,依次一直循环到最后一位。,移位方法:被除数向余数单元左移,而被除数腾出的低位用于存放商数,这样,除法完成后,被除数已经全部移到余数单元

20、并逐次减掉除数得到余数,而且被除数单元已经被商数代替。在大部分程序中,运算结束后,进行对余数的“四舍五入”处理,两个双字节无符号数的除法数据单元分配:R7R6:被除数,程序执行后存商数R5R4:除数R3R2:存每次相除的余数,完成后为最终余数3AH:溢出标志单元,除数为0,置3AH单元为”0FFH“R1:循环次数计数器(16次),WDIV:MOV 3AH,#00H;清溢出标志单元 MOV A,R5 JNZ ZERO;除数高位不为0转 MOV A,R4 JZ OVER;除数为0转溢出处理ZERO:MOV A,R7 JNZ START;被除数高字节不为0开始运算 MOV A,R6 JNZ STAR

21、T;被除数低字节不为0开始运算 RET;被除数字节为0结束程序START:CLR A;开始除法运算 MOV R2,A;余数单元清”0“MOV R3,A MOV R1,#10H;置循环次数为10HLOOP:CLR C;进行一位除法运算 MOV A,R6 RLC A MOV R6,A MOV A,R7 RLC A MOV R7,A MOV A,R2;移出的被除数高位移入余数单元,R7R6:被除数R5R4:除数,RLC A MOV R2,A MOV A,R3 RLC A MOV R3,A MOV A,R2;余数减除数 SUBB A,R4;低位先减 JC NEXT;不够减转移 MOV R0,A MOV

22、 A,R3 SUBB A,R5;再减高位 JC NEXT;不够减转移 INC R6;够减商为1 MOV R3,A;相减结果送回余数单元 MOV A,R0 MOV R2,ANEXT:DJNZ R1,LOOP;不够16次返回;四舍五入处理OVER:MOV 3AH,#0FFH;除数为0置溢出标志 RET,R7R6:被除数R5R4:除数,四、十六进制数转换为ASC码,ORG 2000HH2ASC:MOV A,R2;取待转换的数据(入口)ADD A,#0F6H;判此数是否10?若10,则C=1;10,则C=0 MOV A,R2;重取待转换的数据 JNC AD30H;小于10就跳去加30H ADD A,#

23、07H;10就先加7 再去加30H AD30H:ADD A,#30H MOV R2,A;存结果(出口)RET,例:16进制数(00H0FH)转ASCII码子程序,算法:凡10的十六进制数加37H;凡10的十六进制数加 30H。(参见 ASCII码表)ie.09 30H39H,AF 41H46H,五、ASC码转换为16进制数,在片内RAM的30H3FH单元中的ASC码依次转换为16进制数(高位在前),存放在内RAM的60H67H单元中,转换算法:计算法,把ASC码减30H,其结果:若小于0,为非16进制数;若为0 9即为转换结果;若大于等于0AH,应再减7,减7后:若在0AH 0FH之间即为转换

24、结果 若小于0AH或大于0FH,也是非16进制数,入口参数:R0间址,出口参数:A,MAIN:MOV R0,#30H;设置ASC码地址指针 MOV R1,#60H;设置16进制数地址指针 MOV R7,#08H;拼装的16进制数字节个数AB:ACALL TRAN;调用转换子程序 SWAP A;A高低4位交换 MOVX R1,A;存放外部RAM INC R0 ACALL TRAN;调用转换子程序 XCHD A,R1;16进制数拼装 INC R0 INC R1 DJNZ R7,AB;继续HALT:AJMP HALTTRAN:CLR C;清进位位 MOVX A,R0;取 ASC码 SUBB A,#3

25、0H;减30H JCERROR CJNE A,#0AH,BBBB:JCDONE SUBB A,#07H CJNE A,#0AH,BC BC:JCERROR CJNE A,#10H,BDBD:JNCERROR RET;返回,ERROR:MOVA,#0FFH RET,六、布尔处理机的应用,此方程可用硬件求解也可用软件求解,下图是用TTL硬件求解的方案,软件求解方法:利用字节型逻辑指令的方法利用位测试指令的方法利用布尔处理机逻辑操作指令子集的方法,假定:U和V是输入引脚P1.1和P1.2,W和X是2个外设控制器的状态位TF0(TCON.5)和IE1(TCON.3),Y和Z是程序中设置的软件标志20H.0和21H.1,Q是输出口引脚P3.3。,布尔处理机逻辑操作指令求解程序,U BIT P1.1V BIT P2.2W BIT TF0X BIT IE1Y BIT 20H.0Z BIT 21H.1Q BIT P3.3 MOV C,VORL C,WANL C,UMOV F0,CMOV C,XANL C,/YORL C,F0ORL C,/ZMOV Q,C,上述三种程序的效益比较:,占用存储器字节数 执行周期数字节型逻辑指令 50 65位测试指令 24 16布尔处理机指令集 18 18 由此可见:布尔处理机在求解逻辑 方程的应用中十分简单并且有效,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号