[工学]单元4 汇编语言程序设计1.doc

上传人:sccc 文档编号:4532505 上传时间:2023-04-26 格式:DOC 页数:8 大小:53.50KB
返回 下载 相关 举报
[工学]单元4 汇编语言程序设计1.doc_第1页
第1页 / 共8页
[工学]单元4 汇编语言程序设计1.doc_第2页
第2页 / 共8页
[工学]单元4 汇编语言程序设计1.doc_第3页
第3页 / 共8页
[工学]单元4 汇编语言程序设计1.doc_第4页
第4页 / 共8页
[工学]单元4 汇编语言程序设计1.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《[工学]单元4 汇编语言程序设计1.doc》由会员分享,可在线阅读,更多相关《[工学]单元4 汇编语言程序设计1.doc(8页珍藏版)》请在三一办公上搜索。

1、单元四 汇编语言程序设计一、学习目标与要求1、了解汇编语言程序结构2、掌握分支程序、循环程序、子程序、查表程序的设计方法3、了解常用伪指令及其使用方法二、本章重点内容1、单片机程序设计中常用伪指令伪指令不是真正的指令,它只向编译程序提供编译信息,而不产生机器代码。常用伪指令有:(1)标号等值伪指令EQU格 式:标号:EQU表达式指令的含义为本语句的标号等值于表达式,亦即将表达式值赋予标号。这里的标号和表达式是必不可少的。(2)数据存储说明伪指令数据存储说明伪指令的作用是将数据存储在程序存储器单元中。 定义字节数据伪指令DB格 式:标号:DB表达式或表达式串 定义字数据伪指令DW格 式:标号:D

2、W表达式或表达式串(3)程序起始地址伪指令ORG格 式:ORG表达式(4)汇编结束伪指令END格 式1:标号:END表达式格 式2:标号:END或者 END2、程序设计(1)分支程序条件转移指令是指分支程序产生的原因,条件转移指令执行时,如果转移条件(yes)程序转向一个分支,如果不转移条件(no)程序转向是一个分支。(2)循环程序任何计算机程序都不可能是无限长的顺序程序,程序总是根据不同的条件不断循环的转移执行的。将循环程序从结构上分成循环初始化,循环体,循环修改和循环结构四个部分,是为了便于理解。实际应用时应视具体问题灵活应用。(3)子程序采用子程序结构的程序设计最大的好处是优化了程序设计

3、,将可局部独立处理的问题编写成子程序,可供主程序反复多次调用,它将复杂的运标或检制问题,细分成许多小的事件进行处理,这种主程序调用子程序的结构形式被称为模块式的结构形式。(4)查表程序数学变量与函数之间的关系是一种确定的关系,可以用数学表达式表示,计算机编程时,可根据变量及与函数的关系式计算出函数值。但有的变量与函数之间的关系不能用数学表达式表示,如七段数码显示代码(函数)与显示字符(变量)就是这样。它们之间只能用表格形式建立函数关系,单片机程序设计中的查表程序就是解决这类问题。当然有确定数学关系的数学变量也可以用查表程序求函数值。三、本章内容的前后联系1、与前面内容的联系(1)单片机指令系统

4、是学习本章的基础,也就是说,要想编好程序首先必须学好指令。(2)单片机的内部结构也是本章的基础,单片机的工作是建立在程序存储的基础上,但是程序的执行还必须依赖单片机的硬件资源,这就涉及到了单片机的内部结构。2、与后面内容的联系单片机的汇编语言程序设计,是单片机应用系统程序设计的基础,所以,在学习本章时,应该以应用系统程序开发为目的。认真掌握典型结构化程序设计方法。四、学习方法指导1、单片机汇编语言程序设计,对初学者来说,不是很容易掌握,特别是它的编程和单片机内部资源密切相关,所以,在学习编程之前,一定要掌握单片机的内部资源及其单片机结构。2、为了真正理解程序执行过程,必须先理解指令的执行过程,

5、所以,学习本章时首先应该建立一个概念:程序是指令的集合。3、要注意一开始学习编程就养成一个比较好的习惯:先画流程图、后写指令;程序按结构化设计。五、典型例题分析【例题4.1 】 拆字程序。将一个字节的两个BCD码十进制数拆开并变成相应的ASCII码,并存入两个RAM单元中。设两个BCD码(一个字节)已存入在内部RAM的30H单元中,变换后的ASCII 码分别存放在31H和32H单元,且高位BCD码的ASCII码的ASCII码存于31H单元。数字09的ASCII为30H39H,完成拆字转换只需将一个字节的两个BCD码拆开存放在另两个单元的低4位,并在其高4位赋以0011即可。程序段清单如下:MO

6、V R0,#32H ;将32H单元地址送R0MOV R0,#00H ;32H单元清0MOV A,30H ;将30H单元中的BCD送AXCHD A,R0 ;将低位BCD码送32H单元ORL 32H,#30H ;完成低位BCD码转换SWAP A ;将高位BCD码交换到低位ORL A,#30H ;完成高位BCD码转换MOV 31H,A ;将高位BCD的ASCII码存入31H上述程序段完成了将一个字节的BCD码转换成两个ASCII码的功能。共需占用15个程序存储器字节单元,用9个机器周期执行完毕。【例4.2 】 双字节加法程序段。设被加数存放在内部矛盾RAM的31H、32H单元,低位字节在前,加数存入

7、于34H、35H单元(低字节在前),结果和存放于31H、32H、33H单元中。其程序段清单如下;STRT:PUSH A ;将A内容进栈保护MOV R0,#31H ;将地址码送R0和R1MOV R1,#34HMOV 33H,#00H ;将33H单元清0,存放和的最高字节数MOV A, R0 ;两低字节数相加ADD A,R1MOV R0,A ;低字节和存于31H单元INC R0 ;地址数分别加1INC R1MOV A,R0 ;连用低位进位进行高字节数ADDC A,R1 ;相加MOV R0,A ;高字节和存于32H单元INC R0 ;R0指针指向33H单元MOV A,#00H ;清A为0ADDC A

8、,#00H ;求高字节和的进位MOV R0,A ;将高字节进位存于33H单元POP A ;恢复A原内容【例题4.3 】 由累加器A在动态运行中给出的结果值选择对应的转移指令,其对应关系为:(A)=0,转向分反处理程序0(A)=1,转向分支处理程序1(A)=n,转向分支处理程序n一般转移指令均无条件转移指令,而AT89S52有两条无条件转移指令:AJMP和LJMP。前者为双字节指令,后者为三字节指令,因此,需视选用何种跳转指令而应对A中值作相应变换。如选用AJMP指令,则应对A值变换成偶数值;如选用LJMP指令,则应对A值乘3的变换。每个分支处理程序均为各自独立的等程序段,分散在各自的程序存储器

9、区段。要皮,必须有一个中转站,轩向各自的分支处理程序。这个无条件转移指令串的首地址由DPTR指示。现以AJMP为例,其程序段如下:START: MOV DPTR,#addr16 ;跳转指令串首址送DPTR CLR C ;清C为0 RLC A ;将A值变换成偶数 JNC TABEL ;判(C)=0?不为0则转 INC DPH ;(C)=1,则DPH内容+1TABEL: JMP A+DPTR ;散转ADDR16: AJMP LOOP0 ;无条件转移指令串 AJMP LOOP1 AJMP LOOPnLOOP0: ;分支程序段0LOOP1: ;分支程序段1由于上例选用绝对值转移指令AJMP是双字节指令

10、,因此,要求A中内容必须换算成偶数。换算方式可以乘2,而这里采用左移一位的办法来实现。如果n值等于或大于128,则左移一位将产生高位进位,将进位值加到DPH中去,等于将转移指令串首址延伸256个存储单元,所以在程序段中对C进行测判。这样,保证分支处理程序段可以在0-255个中任选。如果选用长调用LJMP,它是怎么样三字节指令,在进A值换算时应乘3处理,将积的高字节值加到DPH中去。一般,DPTR+A的最终值应不超过64KB范围。【例题4.4 】 数据块搜索设外部RAM从BLOCK单元开始有一个无符号数据块,其长度(即数据块个数)存于LEN单元,试求出数据块最大值数据,并存于MAX单元中。寻找最

11、大值的方法很多,最基本的方法是比较和交换依次进行,即先读取第一个数与第二个数相比较,并把前一个数作为基准。比较结果:若基准数在,则不作交换,再取下一个数进行比较;若基准数小,则将大数取代原基准数,即作一次交换,然后再以新的基准数与下一个数作比较,直到全部比较完毕。基准数始终保持为最大数值。图7.6为数据块搜索流程图。设R1中存放基准数,R3为数据长度,R2中存放每次读出的新的数据块。其循环程序段如下;START:CLR A ;A清0CLR R1 ;清R1为0MOV R3,LEN ;数据块长度送R3作控制计数LOOP:MOVX A,DPTR ;读数据块INC DPTR 指向下一个单元MOV R2

12、 ,A ;将读出的灵敏据块送R2CLR C ;清C为0MOV A ,R1 ;基准值送ASUBB A,R2 ;基准数一读出数JNC NEXT ;(C)=0,即(A)(R2),跳转MOV R1,A NEXT:DJNZ R3LOOP ;判搜索完否MOV MAX,R1 ;最大数据存入MAX单元END ;结束六、自我检查题1、下列程序段经汇编后,从2000H开始的各有关存储单元的内容将是什么? ORG 2000H TAB: DS 5 DB 10H,10 DW 2100H ORG 2050H DW TAB DB WORK” 2、下列程序段经汇编后,从1000H开始的各有关存储单元的内容将是什么? ORG

13、1000H TABl: EQU 1234H TAB2: EQU 3000H DB “START” DW TABl,TAB23、若在片内RAM 30H单元中有2位压缩的BCD码95H,问执行下列程序后,片内RAM 30H单元的内容是什么?31H、32H的内容又是什么? MOV R0,#30H MOV A,R0 ANL A,#OFH MOV R3,A MOV A,R0 SWAP A ANL A,#0FH ADD A,R3 DA A MOV R0,A MOV R3,A INC R0 ANL A,#0FH MOV R0,A INC R0 MOV A,R3 ANL A, #0FOH SWAP A MOV

14、 R0,A RET 4、试编程:有两双字节压缩的BCD码数相加,设该两待加数分别按先低后高原则存放在30H、31H和40H、4lH单元,和要求放回30H、3lH单元。 5、试编程:将累加器A内容低4位送片外RAM 7AH单元,高4位送片外RAM 7BH单元,?AH、7BH单元的高4位均清零。6、由累加器A在动态运行中给出的结果数值选择对应的转移指令,其对应关系为:(A)=0,转向分反处理程序0(A)=1,转向分支处理程序1(A)=n,转向分支处理程序n七、自我检查题答案1、在程序存储器中从2000H单元开始到2004H单元分别存放5、10H、10、21H、00H。在程序存储器中从2050H单元

15、开始到2055H单元分别存放5、10H、“”、“”、“”、“”。2、在程序存储器中从1000H单元开始到1008H单元分别存放“S”、“T”、“A”、“R”、“T”、12H、34H、30H、00H。3、(30H)=14H、(31H)=04H、(32H)=01H。4、START:MOV R0,#30H MOV R1,#31H MOV A,R0 ADD A,R1 DA A MOV R0,A INC R0 INC R1 MOV A,R0 ADDC A,R1 DA A MOV R0,A RET5、 START: MOV B,A MOV R0,#7AH ANL A,#0FH MOVX R0,A INC R0 MOV A,B SWAP A ANL A,#0FH MOVX R0,A RET6、START: MOV DPTR,#TAB ;跳转指令表首址送DPTR CLR C ;清C为0 RLC A ;将A值变换成偶数 JNC TABEL ;判(C)=0?不为0则转 INC DPH ;(C)=1,则DPH内容+1TABEL: JMP A+DPTR ;散转ADDR16: AJMP LOOP0 ;无条件转移指令串 AJMP LOOP1 AJMP LOOPnLOOP0: ;分支程序段0LOOP1: ;分支程序段1

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

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号