最新单片机学习第四章汇编语言程序设计精品课件.ppt
《最新单片机学习第四章汇编语言程序设计精品课件.ppt》由会员分享,可在线阅读,更多相关《最新单片机学习第四章汇编语言程序设计精品课件.ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、本章总体要求: 熟练掌握汇编语言语句的格式、常用的伪指令和程序流程图熟练掌握汇编语言语句的格式、常用的伪指令和程序流程图1掌握汇编语言程序设计的步骤和技巧掌握汇编语言程序设计的步骤和技巧 2熟悉顺序、分支、循环结构和子程序调用等程序的应用特征熟悉顺序、分支、循环结构和子程序调用等程序的应用特征3能够独立完成本章作业能够独立完成本章作业44注释注释注释不是汇编语言的功能部分,它是语句注释不是汇编语言的功能部分,它是语句的说明部分,用于改善程序的可读性,它的说明部分,用于改善程序的可读性,它以分号以分号“;”开始。注释可为一行或多行开始。注释可为一行或多行(每行均以分号开始)。(每行均以分号开始)
2、。 4.1.3 伪指令伪指令 所谓伪指令又称为伪操作,它不象机器指所谓伪指令又称为伪操作,它不象机器指令那样是在程序运行期间由计算机来执行令那样是在程序运行期间由计算机来执行的,它是在汇编程序对源程序汇编时,由的,它是在汇编程序对源程序汇编时,由汇编程序处理的操作,它们可以完成如数汇编程序处理的操作,它们可以完成如数据定义、分配存储器、指示程序结束等功据定义、分配存储器、指示程序结束等功能。能。1汇编起始地址命令汇编起始地址命令 格式:格式:ORG nn 功能:规定此命令之后的程序或数据的存功能:规定此命令之后的程序或数据的存放起始地址。放起始地址。 ORG伪指令总是出现在每段源程序或数据伪指
3、令总是出现在每段源程序或数据块的开始。块的开始。2定义字节伪指令定义字节伪指令格式:格式:标号:标号: DB X1,X2,Xn功能:从指定地址开始,存放若干字节数据。功能:从指定地址开始,存放若干字节数据。注意:在程序存储器空间定义注意:在程序存储器空间定义8位单字节数据,位单字节数据,通常用于定义一个常数表。通常用于定义一个常数表。Xi为单字节数据,为单字节数据,它为二进制、八进制、十进制或十六进制数,它为二进制、八进制、十进制或十六进制数,也可以为一个表达式,还可以是由两个单引也可以为一个表达式,还可以是由两个单引号所括起来的一个字符串,或单引号括起来号所括起来的一个字符串,或单引号括起来
4、的字符。的字符。3字定义伪指令字定义伪指令格式:格式:标号:标号: DW Y1,Y2,Yn功能:从指定地址开始,存放若干字数据。功能:从指定地址开始,存放若干字数据。注意:在程序存储器空间定义双字节数据,注意:在程序存储器空间定义双字节数据,经常用于定义一个地址表。经常用于定义一个地址表。Yi为双字节数为双字节数据,它可以为十进制或十六进制的数,也据,它可以为十进制或十六进制的数,也可以为一个表达式。高位数在前,低位数可以为一个表达式。高位数在前,低位数在后。在后。 例如:例如: ORG 1000H DATA:DW 3241H,1234H,78H 上述程序将对从上述程序将对从1000H单元开始
5、的单元开始的6个单元个单元赋值,赋值情况如何呢?赋值,赋值情况如何呢? (1000H)=32H,(,(1001H)=41H,(1002H)=12H,(,(1003H)=34H,(1004H)=00H,(,(1005H)=78H。4汇编结束伪指令汇编结束伪指令 END 该伪指令指出结束汇编,即使后面还有指令,该伪指令指出结束汇编,即使后面还有指令,汇编程序也不处理。汇编程序也不处理。5赋值伪指令赋值伪指令格式:标号格式:标号 EQU 表达式表达式功能:将表达式的值(数据或地址)赋给标功能:将表达式的值(数据或地址)赋给标 号。号。 注意:标号为字符名称,其后无冒注意:标号为字符名称,其后无冒号。
6、在一个程序中对于某一个标号号。在一个程序中对于某一个标号只能赋一次值,一旦赋值在本程序只能赋一次值,一旦赋值在本程序的任意位置就可以引用该标号。的任意位置就可以引用该标号。 例如:例如:ORG 3000HSTAEQU 80HTABEQU 10MULEQU 4000HMOV A,STAMOV B,TABLCALL MUL定义了三个标号:定义了三个标号:STA=80H,TAB=10,MUL=4000H,在程,在程序中直接引用这三个序中直接引用这三个标号来代替标号来代替80H、10、4000H。6位定义伪指令位定义伪指令格式:格式:标号标号 BIT 位地址位地址功能:将位地址赋给标号。功能:将位地址
7、赋给标号。其中,标号为字符名称,其后无冒号。其中,标号为字符名称,其后无冒号。例如:例如:A1 BIT P0.1A2 BIT PSW.34.2 汇编语言程序设计汇编语言程序设计4.2.1 汇编程序设计基础汇编程序设计基础1汇编语言程序设计的步骤:汇编语言程序设计的步骤: (1)分析问题,明确任务)分析问题,明确任务(2)确定算法)确定算法 (3)画出程序流程图)画出程序流程图 (4)编写源程序)编写源程序(5)汇编和调试)汇编和调试2汇编语言程序的格式汇编语言程序的格式ORG 起始地址起始地址 ;数据存放;数据存放 ;程序代码;程序代码SJMP $ ;原地踏步;原地踏步END3汇编语言源程序的
8、汇编汇编语言源程序的汇编 汇编语言源程序必须转换成计算机能过识汇编语言源程序必须转换成计算机能过识别的目标程序后才能执行,汇编方法通常别的目标程序后才能执行,汇编方法通常有有机器汇编机器汇编和和手工汇编手工汇编两种方法。两种方法。4汇编语言程序设计的技巧汇编语言程序设计的技巧(1)尽量采用模块化、结构化的程序设计方)尽量采用模块化、结构化的程序设计方法。法。 (2)合理地绘制程序流程图)合理地绘制程序流程图 (3)少用无条件转移指令,尽量采用循环结)少用无条件转移指令,尽量采用循环结构和子程序结构。构和子程序结构。(4)充分利用累加器。)充分利用累加器。 (5)精心设计主要程序段。)精心设计主
9、要程序段。 (6)对于中断要注意保护和恢复现场。)对于中断要注意保护和恢复现场。4.2.2 顺序程序设计顺序程序设计 顺序结构程序又称为简单结构程序,是指顺序结构程序又称为简单结构程序,是指一种顺序执行的程序,程序从第一条指令一种顺序执行的程序,程序从第一条指令到最后一条指令的整个执行过程中既无分到最后一条指令的整个执行过程中既无分支又无循环。支又无循环。【例例4.1】两个两个8位无符号数相加,和仍为位无符号数相加,和仍为8位。位。分析:假设两个无符号数分析:假设两个无符号数X、Y分别存放于内部分别存放于内部RAM的的60H、61H单元中,求和并存于单元中,求和并存于62H单元单元中。中。 程
10、序如下:程序如下:ORG 2000HMOVR0,#60H;设;设R0为数据指针为数据指针MOVA, R0;将;将X值送入值送入A中中INCR0ADDA,R0;X+YINCR0MOVR0,A;保存结果;保存结果SJMP $ ;原地踏步;原地踏步END【例例4.2】假设两个双字节无符号数,分别存假设两个双字节无符号数,分别存放在放在R1R0和和R3R2中,高字节在前,低字中,高字节在前,低字节在后。编程使两数相加,用节在后。编程使两数相加,用R2R1R0存放存放和。和。 对多字节的加法,存在最高位的进位问题。对多字节的加法,存在最高位的进位问题。如果最高位有进位,则和的字节数要比加如果最高位有进位
11、,则和的字节数要比加数或被加数的字节数多一个。数或被加数的字节数多一个。ORG 1000HCLR CMOV A,R0;取被加数低字节;取被加数低字节AADD A,R2;与加数低字节相加;与加数低字节相加MOV R0,A;存和数低字节;存和数低字节MOV A,Rl;取被加数高字节;取被加数高字节AADDC A,R3;与加数高字节相加;与加数高字节相加MOV R1,A;存和数高字节;存和数高字节MOV A,#0ADDC A,#0;加进位位;加进位位MOV R2,A ;存和数进位位;存和数进位位SJMP $ ; END【例例4.3】16位二进制数求补,设两个字节原位二进制数求补,设两个字节原码数存在
12、码数存在R1R0中,求补后结果存在中,求补后结果存在R3R2中。中。分析:二进制数求补操作,可采用分析:二进制数求补操作,可采用“原码求原码求反反+1”的方法来实现,可使用求反指令和加的方法来实现,可使用求反指令和加法指令来实现。法指令来实现。程序如下:程序如下:ORG 1000HMOVA,R0 ;低;低8位送位送ACPLA;ADDA,#01H;MOVR2,A;送结果低位;送结果低位MOVA,R1 ;高;高8位送位送ACPLA;ADDCA,#00H;加进位;加进位MOVR3,A;送结果高位;送结果高位SJMP$END【例例4.4】将内部将内部RAM的的60H单元中的无符号单元中的无符号二进制数
13、转换为二进制数转换为3位位BCD码,并将结果按由码,并将结果按由高位到低位的顺序存放到高位到低位的顺序存放到63H、62H、61H单元中。单元中。分析:分析:8位无符号二进制数表示的数据范围位无符号二进制数表示的数据范围0255,所以用,所以用BCD码,最多码,最多3位。可将被位。可将被转换的数除以转换的数除以100,商即百位数;余数再除,商即百位数;余数再除以以10得十位数;最后余数即为个位数。得十位数;最后余数即为个位数。编程如下:编程如下:ORG 1000HHBCD: MOV A,60H;取原数据;取原数据MOV B,#100;除数;除数100BDIV AB ;除;除100MOV 63H
14、,A ;百位;百位BCDMOV A,BMOV B,#10 ;除数;除数10BDIV AB ;MOV 62H,A ;存十位;存十位BCD MOV 61H,B;存个位;存个位BCDSJMP $END4.2.3 分支程序设计图图4-1 4-1 分支程序流程图分支程序流程图【例例4.5】设内部设内部RAM 60H和和61H单元中存放单元中存放两个无符号数,试比较它们的大小。将较两个无符号数,试比较它们的大小。将较小的数存放在小的数存放在60H单元,较大的数存放在单元,较大的数存放在61H单元中。单元中。分析:这是一个简单分支程序,可以使两数分析:这是一个简单分支程序,可以使两数相减,用相减,用JC指令
15、进行判断。若指令进行判断。若CY=1,则被,则被减数小于减数。减数小于减数。 ORG1000HSTART:CLR C ;0CY MOVA,60H SUBBA,61H;做减法比较两数;做减法比较两数 JC NEXT;若;若(60H)小,则转移小,则转移 MOVA,60H XCH A, 61H;交换两数;交换两数 MOV 60H,A NEXT: NOP SJMP $ END【例例4.6】将将R2中的一位十六进制数转换为中的一位十六进制数转换为ASCII码,结果仍存放于码,结果仍存放于R2中。中。分析:数字分析:数字09的的ASCII码分别是码分别是30H39H,英文大写字母英文大写字母AF的的AS
16、CII码分别是码分别是4146H。因此,若该十六进制数小于。因此,若该十六进制数小于10,要转换为要转换为ASCII码应加码应加30H,若该十六进制,若该十六进制数大于数大于10,则加,则加37H。 ORG 1000HMOV A,R2CJNE A,#0AH,L1L1:JNC ADD37ADD30:ADD A,#30HMOV R2,ASJMP FINISHADD37:ADD A,#37HMOV R2,AFINISH:SJMP $END【例例4.7】设变量设变量x存入存入30H单元,求得函数单元,求得函数y存入存入31H单元。按下式要求给单元。按下式要求给y赋值:赋值: x+1 (10 x) y=
17、 0 (5x10) x-1 (x10时,采用时,采用CJNE和和JC以及以及CJNE和和JNC指令进行判断。指令进行判断。程序如下:程序如下:ORG 1000HMOV A,30H ;取;取XCJNE A,#5,NEXTl;与;与5比较比较NEXT1:JC NEXT2 ;X5,则转,则转NEXT2MOV R0,A ;INC R0 ;设;设1010,则转,则转NEXT4 MOV R0, #0 ;5X10,Y=0 SJMP NEXT4NEXT2:MOV R0,A DEC R0 ;X5,Y=X-1NEXT4:MOV 31H,R0 ;存结果;存结果SJMP $END4.2.4 循环程序设计循环程序设计循
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 单片机 学习 第四 汇编语言 程序设计 精品 课件
限制150内