《第3章汇编语言程序设计精选PPT.ppt》由会员分享,可在线阅读,更多相关《第3章汇编语言程序设计精选PPT.ppt(70页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第3章汇编语言程序设计第1页,本讲稿共70页3.1 汇编语言基本概念3.1.1 程序设计语言3.1.2 汇编语言的语句结构3.1.3 伪指令返回本章首页第2页,本讲稿共70页3.1.1 程序设计语言按照语言的结构及其功能可以分为三种:按照语言的结构及其功能可以分为三种:1机机器器语语言言:机机器器语语言言是是用用二二进进制制代代码码0和和1表表示示指指令和数据的最原始的程序设计语言。令和数据的最原始的程序设计语言。2汇汇编编语语言言:在在汇汇编编语语言言中中,指指令令用用助助记记符符表表示示,地地址址、操操作作数数可可用用标标号号、符符号号地地址址及及字字符符等等形形式式来描述。来描述。3高高
2、级级语语言言:高高级级语语言言是是接接近近于于人人的的自自然然语语言言,面面向过程而独立于机器的通用语言。向过程而独立于机器的通用语言。返回本节第3页,本讲稿共70页 汇编语言源程序:用汇编语言编写的程序称为汇编语言源程序,简称源程序。计算机不能直接识别和执行源程序。汇编(过程):将汇编语言源程序翻译成机器码目标程序的过程,称为汇编过程,或简称为汇编。汇编程序:它是计算机的系统软件之一,用于将汇编语言源程序翻译成目标程序。第4页,本讲稿共70页3.1.2 汇编语言的语句结构1汇编语言的指令类型 MCS-51单片机汇编语言,包含两类不同性质的指令。(1)基本指令:即指令系统中的指令。它们都是机器
3、能够执行的指令,每一条指令都有对应的机器码。(2)伪指令:汇编时用于控制汇编的指令。它们都是机器不执行的指令,无机器码。第5页,本讲稿共70页汇编语言及汇编过程 汇编程序功能汇编程序功能 源程序源程序 (汇编指令程序)(汇编指令程序)汇编汇编 目标程序目标程序(机器码指令程序)(机器码指令程序)汇编指令与机器码指令有一一对应的关系。汇编指令与机器码指令有一一对应的关系。汇编程序是一种翻译程序,将源程序翻译成目标序。汇编程序是一种翻译程序,将源程序翻译成目标序。第6页,本讲稿共70页 汇编程序的汇编过程汇编程序的汇编过程 汇编有两种方法:手工汇编、机器汇编。汇编有两种方法:手工汇编、机器汇编。1
4、 1、手工汇编:、手工汇编:第一次汇编:第一次汇编:确定地址,翻译成各条机器码,字符标号确定地址,翻译成各条机器码,字符标号原样写出;原样写出;第二次汇编:第二次汇编:标号代真,将字符标号用所计算出的具体标号代真,将字符标号用所计算出的具体地址值或偏移量代换。地址值或偏移量代换。第7页,本讲稿共70页源程序源程序目标程序目标程序地址地址 ORG 1000HORG 1000H START START:MOV R0MOV R0,2FH 2FH MOV R2 MOV R2,#00H#00H MOV A MOV A,R0 R0 MOV R3 MOV R3,A A INC R3 INC R3 SJMP
5、SJMP NEXT NEXT LOOP LOOP:INC R0 INC R0 CJNE R0 CJNE R0,#44H#44H,NEXTNEXT INC R2 INC R2 NEXT NEXT:DJNZ R3DJNZ R3,LOOPLOOP MOV MOV 2AH2AH,R2 R2 SJMP$SJMP$END END 第一次汇编第一次汇编第二次汇编第二次汇编1000 A82F1002 7A001004 E61005 FB1006 0B1007 80NEXT1009 08100A B644NEXT100D 0A100E DBLOOP1010 8A2A1012 80FEA82F7A00E6FB0B
6、800508B644010ADBF98A2A80FE第8页,本讲稿共70页 两次扫描过程。两次扫描过程。第一次扫描:第一次扫描:检查语法错误,确定符号名字;检查语法错误,确定符号名字;建立使用的全部符号名字表;建立使用的全部符号名字表;每一符号名字后跟一对应值(地址或每一符号名字后跟一对应值(地址或数)。数)。第二次扫描:第二次扫描:是在第一次扫描基础上,将符号地址转是在第一次扫描基础上,将符号地址转换成换成地址(代真);地址(代真);利用操作码表将助记符转换成相应的目利用操作码表将助记符转换成相应的目标码。标码。2、机器汇编、机器汇编第9页,本讲稿共70页2汇编语言的语句格式 汇编语言源程序
7、是由汇编语句(即指令)组成的。汇编语言一般由四部分组成。其典型的汇编语句格式如下:标号:操作码操作数;注释 START:MOV A,30H ;A(30H)各段之间必须用定界符隔开。返回本节第10页,本讲稿共70页1、标号段 标号是用户给指令语句设定的一个符标号是用户给指令语句设定的一个符号,在汇编产生目标程序时,汇编程序号,在汇编产生目标程序时,汇编程序将把标号所指的指令语句目标码首地址将把标号所指的指令语句目标码首地址值赋给该标号。于是,值赋给该标号。于是,标号便可作为地标号便可作为地址或数据在其它语句的操作数段中引用。址或数据在其它语句的操作数段中引用。标号是以标号是以字母开头字母开头的的
8、18个字母或数字个字母或数字串组成,注意,不能使用串组成,注意,不能使用指令助记符指令助记符、伪指令伪指令或或寄存器名寄存器名来作标号,标号不能来作标号,标号不能重复定义。重复定义。第11页,本讲稿共70页2、操作码段 操作码指出指令操作的性质或控制要求,该段可以是指令助记符或伪指令助记符。3、操作数段 操作数是指令操作码操作的对象,它是参加操作的数或是操作数据所在的地址。操作数有三种类型的信息:立即数、寄存器和地址。第12页,本讲稿共70页信息表示方法:二进制(B)十六进制(H)十进制(D或无字尾)PC现行值($)ASCII码()指令标号等。为区分数字和字符,凡数字以09开头。如:MOV A
9、,#0A4H4、注释段 为了便于阅读和交流,对程序进行注释。汇编时对注释部分不予理会。第13页,本讲稿共70页3.1.3 伪指令1ORG:汇编起始地址 用来说明程序段或数据存储区的起始地址。格式为:ORG 十六位地址例如程序:ORG 1000H START:MOV A,#20H MOV B,#30H 说明程序从1000H开始存放。在一个源程序中,可以多次使用ORG指令。但不能重叠。第14页,本讲稿共70页 2EQU:赋值(或等值指令)给变量标号赋予一个确定的数值。其值在整个程序中不改变,且可多次使用。格式为:标号(字符名称)EQU 数或汇编符号例如,COUNT EQU 16H ;COUNT=1
10、6H ADDR EQU 3000H ;ADDR=3000H MOV A,COUNT ;A=16H COUNT赋值后,当作直接地址使用。ADDR被定义为十六位地址。注意:必须先赋值,后使用。返回本节第15页,本讲稿共70页 3DB:定义字节数据(Define Byte)把把数数据据以以字字节节数数的的形形式式存存放放在在存存储储器器单单元元中中。常常用用于于定定义义数数据据常数表。常数表。格式如下格式如下:标号:标号:DB字节常数表字节常数表例如,例如,ORG2000HTAB:DB14H,26,ADB0AFH,BC汇编结果汇编结果:(2000H)=14H(2001H)=1AH=26(2002H)
11、=41H(2003H)=AFH(2004H)=42H(2005H)=43H第16页,本讲稿共70页 4DW:定义字数据(Define Word)按字的形式把数据存放在存储单元中。其中高字按字的形式把数据存放在存储单元中。其中高字节数存入低位地址。节数存入低位地址。格式如下:格式如下:标号:标号:DB字常数表字常数表例如,例如,ORG2000HTAB:DW7423H,00ABH,20汇编结果汇编结果:(2000H)=74H(2001H)=23H(2002H)=00H(2003H)=ABH(2004H)=00H(2005H)=14H 第17页,本讲稿共70页 5DS:定义存储区(Define St
12、ore)从指定的地址单元开始,保留一定数量存储单元。从指定的地址单元开始,保留一定数量存储单元。格式如下:格式如下:标号:标号:DS表达式表达式其中,表达式一般是数值,即要保留的内存单元数。其中,表达式一般是数值,即要保留的内存单元数。例如,例如,ORG1000HDS5DB23H汇编结果汇编结果:从地址从地址1000H开始,保留开始,保留5个字节的内存单元,个字节的内存单元,而(而(1005H)=23H。第18页,本讲稿共70页 6BIT:位定义把位地址赋给确定的字符名称。常用于定义位符号地址。格式如下:字符名称 BIT 位地址例如,AA BIT P1.0 BB BIT P2.0汇编后,把位地
13、址P1.0、P2.0分别赋给变量AA和BB,在程序中它们就是位地址了。第19页,本讲稿共70页7.DATA 数据地址赋值指令 将数据地址或代码赋给所规定的标号。格式如下:标号:DATA 表达式 例如,MN:DATA 1000H汇编后,MN的值为1000H。DATA与EQU的主要区别在于:用DATA定义的标识符在汇编时作为标号登记在符号表中,所以可先使用后定义。而EQU定义的标识符在汇编时不登记在符号表中,因此必须先定义后使用。第20页,本讲稿共70页8END:汇编结束 源程序结束指令。在END以后所写的指令,汇编程序都不予处理。一个源程序只能有一个END指令,放在程序结尾。第21页,本讲稿共7
14、0页小结:小结:1 1、为什么要对汇编程序进行汇编?、为什么要对汇编程序进行汇编?2 2、机器汇编的过程是怎样的?、机器汇编的过程是怎样的?3 3、常用伪指令的功能各是什么?、常用伪指令的功能各是什么?第22页,本讲稿共70页4.2 汇编语言程序设计4.2.1 汇编语方程序设计步骤4.2.2 顺序程序4.2.3 分支程序4.2.4 循环程序4.2.5 子程序4.2.6 位操作程序返回本章首页第23页,本讲稿共70页4.2.1 汇编语言程序设计步骤1分析问题2确定算法3设计程序流程图4分配内存单元5编写汇编语言源程序6调试程序返回本节第24页,本讲稿共70页流程图符号端点框 ;表示程序的起点和终
15、点。处理框 ;表示处理功能。判断框 ;表示判断功能,框内标 明检测条件。子程序框 ;表示被调用的子程序。流程线 ;表示程序的走向。第25页,本讲稿共70页语句 3语句 2顺序结构顺序结构入口入口语句 1出口出口分支结构分支结构入口入口条件满足否?分支 1出口出口YN 分支 2循环结构循环结构入口入口 处理 修改条件条件满足否?Y出口出口N第26页,本讲稿共70页4.2.2 顺序程序 顺序程序是一种最简单,最基本的程序。特点:程序按编写的顺序依次往下执行每一条指令,直到最后一条。【例4.1】将30H单元内的两位BCD码拆开并转换成ASCII码,存入RAM两个单元中。程序流程如图4-1所示。参考程
16、序如下:p71 第27页,本讲稿共70页结束取数据低4位转换成ASCII码存ASCII码取数据高4位转换成ASCII码存ASCII码开始图4-1 拆字程序流程图第28页,本讲稿共70页ORG2000HMOVA,30H;取值;取值ANLA,#0FH;取低;取低4位位ADDA,#30H;转换成;转换成ASCII码码MOV32H,A;保存结果;保存结果MOVA,30H;取值;取值SWAPA;高;高4位与低位与低4位互换位互换ANLA,#0FH;取低;取低4位(原来的高位(原来的高4位)位)ADDA,#30H;转换成;转换成ASCII码码MOV31H,A;保存结果;保存结果SJMP$END第29页,本
17、讲稿共70页4.2.3 分支程序1分支程序的基本形式分支程序有三种基本形式,如图4-3所示。分支程序的设计要点如下:(1)先建立可供条件转移指令测试的条件。(2)选用合适的条件转移指令。(3)在转移的目的地址处设定标号。第30页,本讲稿共70页条件满足?AYN(a)条件满足?ABNY(b)(c)A0A1AnK=0 K=1 K=nK=?图4-3 分支程序结构流程图第31页,本讲稿共70页2双向分支程序设计举例【例4.2】设X存在30H单元中,根据下式 X+2 X0Y=100 X=0 求出Y值,将Y值存入31H单元。X X0解:根据数据的符号位判别该数的正负,若最高位为0,再判别该数是否为0。程序
18、流程如图所示。参考程序如下:第32页,本讲稿共70页A为负数?为负数?取数,取数,A(30H)开始开始结束结束A=0?YNNA|X|A64HAX+2存数,(存数,(31H)A A(3 30H)图图程程序序流流程程图图Y第33页,本讲稿共70页 ORG1000HMOVA,30H;取数;取数JBACC.7,NEG;负数,转;负数,转NEGJZZER0;为零,转;为零,转ZER0ADDA,#02H;为正数,求;为正数,求X+2AJMPSAVE;转转到到SAVE,保保存存数数据据ZER0:MOVA,#64H;数据为零,;数据为零,Y=100AJMPSAVE;转转到到SAVE,保保存存数数据据NEG:D
19、ECA;CPLA;求;求 X SAVE:MOV31H,A;保存数据;保存数据SJMP;暂停;暂停第34页,本讲稿共70页 3多向分支程序设计举例【例4.3】根据R0的值转向7个分支程序。R010,转向SUB0;R020,转向SUB1;R00Y=100 X=0 求出Y值,并将Y值放回原处。X X 4000H,256 字节 mov r0,#30h mov r1,#00h mov r2,#40h mov r3,#00h mov r7,#0Loop:mov dph,r0 mov dpl,r1 movx a,dptr mov dph,r2 mov dpl,r3 movx dptr,a cjne r1,#
20、0ffh,Goon1 inc r0Goon1:inc r1 cjne r3,#0ffh,Goon2 inc r2Goon2:inc r3 djnz r7,Loop ljmp$end第64页,本讲稿共70页软件实验5 数据排序实验说明:有序的数列更有利于查找。本程序用的是“冒泡排序”法,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在数列的最后面。再进行下一轮比较,找出第二大数据,直到全部数据有序。第65页,本讲稿共70页第66页,本讲稿共70页 用冒泡法对数进行排序(由小到大)用冒泡法对数进行排序(由小到大)思路:将相邻两数比较,将小的数调到前
21、面。思路:将相邻两数比较,将小的数调到前面。解:先举四个数排序的例子解:先举四个数排序的例子内内RAM RAM 第一次第一次 第二次第二次 第三次第三次 结果结果 30H 0 9 0 9 0 5 0 5 0 530H 0 9 0 9 0 5 0 5 0 5 31H 0 5 0 5 0 9 0 2 0 2 31H 0 5 0 5 0 9 0 2 0 2 32H 0 2 0 2 0 2 0 9 0 0 32H 0 2 0 2 0 2 0 9 0 0 33H 0 0 0 0 0 0 0 0 0 9 33H 0 0 0 0 0 0 0 0 0 9第一趟第一趟共共41=3次内循环次内循环第67页,本讲稿
22、共70页这就是所谓的这就是所谓的“冒泡法冒泡法”。经第一趟(共经第一趟(共3 3次),已得到最大数次),已得到最大数0909。然后,进行第二趟比较。然后,进行第二趟比较,对余下的前面,对余下的前面3 3个数按上法进行比较。个数按上法进行比较。第一趟要进行两两比较第一趟要进行两两比较3 3次。次。第二趟要进行两两比较第二趟要进行两两比较2 2次。次。如有如有N N个数,则要进行个数,则要进行N-1N-1次比较。次比较。第68页,本讲稿共70页软件实验5 数据排序 S5.ASMSize equ 10;数据个数Array equ 50h;数据起始址Change equ 0;交换标志Sort:mov
23、r0,#Array mov r7,#Size-1 clr ChangeGoon:mov a,r0 mov r2,a inc r0 mov B,r0 cjne a,B,NotEqual sjmp NextNotEqual:jc Next;前小后大前小后大,不交换不交换 setb Change;前大后小前大后小,置交换标志置交换标志 xch a,r0;交换交换 dec r0 xch a,r0 inc r0Next:djnz r7,Goon jb Change,Sort ljmp$end第69页,本讲稿共70页THANK YOU VERY MUCH!本章到此结束,谢谢您的光临!结束放映返回本章首页第70页,本讲稿共70页