版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、机器语言:机器语言是用二进制代码表示的计算机能直接识别和执行(zhxng)的一种机器指令的集合。 汇编语言:汇编语言(Assembly Language)是面向机器的程序设 计语言。 汇编语言源程序:用汇编语言编写的程序.编译程序:编译程序也叫编译系统,是把用高级语言编写的面向过程的源程序翻译成目标程序的语言处理程序。目标程序:把可在计算机上直接运行的机器语言程序称为目标程序.第4章 80C51单片机汇编语言(hu bin y yn)程序设计1共五十九页4.1 汇编语言(hu bin y yn)的格式 4.1.1伪指令(PseudoInstruction)在汇编语言源程序中用MCS-51指令(
2、zhlng)助记符编写的程序,一般都可以一一对应地产生机器码,这种指令(zhlng)是真正意义上的指令(zhlng)。 如:MOV A,#68H的机器码为74H、68HLJMP 2000H的机器码为02H、20H、00H2共五十九页 但还有一些指令不产生机器码,即没有对应的机器码,也就是说它不是CPU能执行的指令,只是提供汇编控制信息,以便在汇编时执行一些特殊的操作,这种指令称为伪指令。 如:L1: DB 20H 没有对应的机器码,但这条伪指令所要完成的功能是将地址(dzh)为L1的存储单元的内容定义成20H。3共五十九页伪指令的格式 : 标号: 操作码 项或项表;注释其中: 方括号为可选项
3、,标号可要可不要;注释是编程者附加(fji)的说明,也是可要可不要。 尖括号为必选项,可以是单项,也可以是多项 操作码为必选项,该项为ORG、DB、DW、DS、EQU、BIT、END等7项中的任意一项。下面分别介绍这些伪指令的功能:4共五十九页 1设置起始地址ORG(Origin)ORG nn其中,ORG是该伪指令的操作码助记符,操作数nn是16位二进制数,前者表明为后续源程序经汇编后的目标程序(m bio chn x)安排存放位置,后者则给出了存放的起始地址值。ORG伪指令总是出现在每段源程序或数据块的开始,它可以使我们把程序、子程序或数据块存放在存储器的任何位置。若在源程序开始不放ORG指
4、令,则汇编将从0000H单元开始编排目标程序(m bio chn x)。常用(chn yn)的伪指令有如下几种:5共五十九页【例4-】 ORG 2000H MOV SP, 60H MOV R0, 2FH MOV R2, 0FFH ORG伪指令说明(shumng)其后面程序的目标代码在存储器中存放的起始地址是2000H, 即 存储器地址 目标程序 2000H 75H 81H 60H SP的地址=81H 2003H 78H 2FH 2005H 7AH FFH 6共五十九页2汇编终止命令END 标号: END 表达式 END命令通知汇编程序结束汇编。在END之后,所有的汇编语言指令均不予以处理。 每
5、一个完整(wnzhng)的汇编语言源程序的后面必须有END,否则,编译程序在对汇编语言源程序进行编译时,因找不到尾端而无法进行编译。7共五十九页 3赋值EQU(Equate) 标号 EQU 数或者汇编符号 其功能(gngnng)是将操作数段中的地址或数据赋予标号字段的标号,故又称为等值指令。 例4-2】SG EQU R0 ;SG与R0等值 DE EQU 40H ;DE与40H等值 MOV A,SG ;(R0) (A) MOV R7,DE ;(40H) (R7)8共五十九页4定义字节DB(Define Byte) 标号: DB 其中, 是指一个字节的数、字符(z f)串或以引号括起来的ASCII
6、码字符串(一个字符用ASCII码表示,就相当于一个字节)。 该指令的功能是把DB后面的内容存入从标号开始的连续单元中。9共五十九页【例4-4】: ORG 1000H SEGl: DB 53H,78H,2 SEG2: DB DAY END则: (1000H)=53H (1001H)78H (1002H)=32H (1003H)44H (1004H)=41H (1005H)=59H10共五十九页5.定义数据字DW(define word)标号: DW DW的基本含义与DB相同,不同的是DW定义16位数据,常用来建立(jinl)地址表。【例4-3】 2200:DW l234H,08H则: (2200
7、H)=12H (2201H)=34H (2202H)=00H (2203H)=08H11共五十九页6定义存储区DS(Define Storage)标号: DS 该指令的功能是由标号指定单元开始,定义一个存储区,以备源程序使用。存储区内预留的存储单元数由表达式的值决定。 【例4-5】: ORG 3000H SEG;DS 08H DB 30H,40H 上例表示从3000H单元开始,连续预留8个存储单元,然后(rnhu)从3008H单元开始按DB命令给内存单元赋值,即(3008H)=30H,(3009H)=40H。12共五十九页7位地址符号(fho)BIT字符名 BIT 位地址其功能是把位地址赋予字
8、符名称。【例4-6】 MN BIT Pl.7 G5 BIT 02H 则汇编后,位地址P1.7、02H分别赋给变量MN和G5。13共五十九页4.1.2 汇编语言的格式 汇编语言是面向机器的程序设计语言,对于不同CPU的微型机,其汇编语言一般是不同的,但是,它们之间所采用的语言规则有很多相似之处。在此,我们以MCS-51的汇编语言为例来说明汇编语言的规范。 汇编语言源程序是由汇编语句(指令语句)构成的。汇编语句由四个部分(b fen)构成,每一部分(b fen)称为一个字段,汇编程序能够识别它们。14共五十九页 MCS-51汇编语言的语句格式: 标号:操作码 操作数;注释 每个字段之间要用分隔符分
9、开,而每个字段内部不能使用分隔符。可以作为分隔符的符号(fho)有空格、冒号、逗号、分号等。15共五十九页【例4-8】 LOOP:MOV A, R0 ;(R0)A 标号 操作码 目的操作数 源操作数 注释下面分别解释这四个字段的含义:)标号:标号是用户设定的一个符号,表示存放指令的存储单元(dnyun)的地址。标号由以字母开始的18个字母或数字串组成,以冒号结尾。不能用指令助记符、伪指令或寄存器名来作标号。 标号是任选的,并不是每条指令或数据存储单元都要标号,只在需要时才设标号,例如转移指令所要访问的存储单元前面一般要设置标号。 一旦使用了某标号定义一地址单元,在程序的其它地方就不能随意修改这
10、个定义,也不能重复定义。 16共五十九页)操作码:是指令助记符,用来表示指令的性质。对于一 条汇编语言指令,这个字段是必不可少的。)操作数:给出的是参加运算(或其它操作)的数据或数据 的地址。 操作数可以表示为工作寄存器名、特殊功能寄存器名、标号名、常数(chngsh)、表达式等。这一字段为可选项(可有或可没有)。 若有两个操作数(目的操作数和源操作数),两个操作数之间应以逗号分开。 目的操作数指数据要到达的目的地,如A。 源操作数指数据的来源,如R0。)注释:注释字段不是汇编语言的功能部分,只是增加程 序的可读性,良好的注释是汇编语言程序编写中 的重要组成部分。17共五十九页计算机完成某一具
11、体的工作任务,必须按序执行一条条指令。这种按工作要求编排指令序列的过程称为程序设计(或编程)。 用汇编语言编写一个程序的过程大致可分为: 确定(qudng)计算方法,定出运算步骤和顺序,把运算过程画成框图。 确定数据,包括工作单元的数量,分配存放单元。 按所使用计算机的指令系统,把确定的运算顺序(框图)写成汇编语言程序。18共五十九页421 顺序结构程序 顺序结构程序是一种最简单、最基本(jbn)的程序,按照程序编写的顺序依次执行,编写这类程序主要应注意正确地选择指令,提高程序的执行效率和尽可能节省存储空间。4.2 汇编语言(hu bin y yn)程序的基本结构形式19共五十九页【例4-9】
12、:双字节(z ji)二进制数求补。 BINPL: MOV A,R3 JNZ ACC.7, RETURN MOV A, R2 ;低位字节补码送R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 MOV F0,ACC.7 CPL A ADDC A,#00H ; 高位加进位 MOV ACC.7,F0 MOV R3,A ; 高位字节补码送R3 RETURN: RET END20共五十九页4.2.2 分支程序 分支结构程序可根据程序要求无条件或有条件地改变程序执行的顺序,选择程序流向。 编写这类结构的程序关键是要正确(zhngqu)选择和使用转移指令,即无条件转移、条件转移和跳转
13、。21共五十九页【例4-10】:设变量(binling)x存放在VAR单元之中,函数值y存放在FUNC中,按下式给y赋值: 1 X0 Y= 0 X=0 -1 X0转POSI MOV A,#0FFH ;0,1A SJMP COMPPOSI: MOV A,#01HCOMP:MOV FUNC,A END24共五十九页【例4-11】:128种分支转移程序。根据(gnj)入口条 件转移到128个目的地址。 程序框图如下(rxi):25共五十九页入口:(R3)转移(zhuny)目的地址的序号00H7FH。出口:转移到相应子程序人口。程序清单: MOV A,R3 RL A MOV DPTR,#JMPTAB
14、JMP A+DPTR JMPTAB: AJMP ROUT00 AJMP ROUNT7F26共五十九页此程序要求128个转移目的地址 (ROUT00ROUT7F)必须驻留在与绝对转移指令(zhlng)AJMP同一个2KB存储区内。RL指令(zhlng)对变址部分乘以2,是由于每AJMP指令(zhlng)占2个字节。 如改用LJMP指令,目的地址可以任意安排在64KB的程序存储器空间内,但该指令为3字节,所以程序应对变址部分乘以3。27共五十九页4.2.3 循环结构程序 在程序设计中,常遇到反复执行某一段程序,此时可用循环程序结构,这有助于缩短程序,提高程序的质量。 循环结构的程序一般包括下面(x
15、i mian)几个部分: 1置循环初值 置循环初值是设置用于循环过程工作单元的初始值。例如,设置循环次数计数器、地址指针初值、存放和数的单元初值等。 2循环体 重复执行的程序段部分。3循环修改 在单片机中,一般用一个工作寄存器Rn作为计数器,给这 个计数器赋初值作循环次数,每循环一次,对其进行修改。 4循环控制 判断控制变量是否满足终值条件,不满足则转去重复执行 循环工作部分,满足则顺序执行,退出循环。28共五十九页这四个部分有两种组织(zzh)方式,如下图所示:循环(xnhun)程序流程图29共五十九页 若循环程序的循环体中不再包括循环程序,即为单重循环程序。 如果在循环体中还包含有循环程序
16、,那么,这种现象就称为循环嵌套,这样的程序就称为多重循环程序。 在多重循环程序中,只允许外循环嵌套内循环程序,而不允许循环体互相交叉。另外(ln wi),也不允许从循环程序的外部跳人循环程序的内部。【例4-12】:若Xi均为单字节数据,并按i(i=1n)顺序存放在80C51的内部RAM从50H开始的单元中,n放在R2中,现在要求它们的和(双字节)放在R3R4中。30共五十九页 入口(r ku):Xi存放在从50H开始的单元; n放在R2中。 出口:和存放于R3R4中。 程序框图如右图所示。程序清单如下:ADDl: MOV R3,#00H MOV R4,#00H MOV R2,#n MOV R0
17、,#50H LOOP:MOV A,R4 ;取部分和低位 ADD A,R0 ;与Xi相加 MOV R4,A INC R0 ;地址加1 CLR A ADDC A,R3 ;低位字节向高位进位 MOV R3,A DJNZ R2,LOOP;未加完继续重复 END31共五十九页 其中:第条为置初值。第11条为循环体。R2作为控制变量。第12条为循环控制。 注意:R0作为变址单元,用它来寻址Xi。一般来说,循环工作部分中的数据应该(ynggi)用间接方式来寻址。32共五十九页运算类程序 MCS-51系列机中,已设计了单字节的加、减、乘、除指令,而在实际应用程序设计中经常要用到多字节的各种运算,在此举例说明这
18、类程序设计的方法(fngf)。4.3.1 算术运算程序 1. 加减法运算 2. 乘法运算 3. 除法运算4.3 实用程序举例(j l)33共五十九页(1)多个(du )不带符号的单字节数相加 假设有多个单字节数,依次存放在外部RAM 21H开始的连续单元中,要求把计算结果存放在R1和R2中(假定相加的和为2字节数)。其中R1为高位字节,则程序如下: MOV R0,21H ;设置数据指针 MOV R3,#N ;字数(z sh) MOV R1,#00H ;和的高位字节清零 MOV R2,#00H ;和的低位字节清零 LOOP: MOVX A,R0 ;取一个加数 ADD A,R2 ;单字节数相加 M
19、OV R2,A ;和的低8位送R2 JNC LOOP1 INC R1 ;有进位,则和的高8位加1LOOP1: INC R0 ;指向下一个单元 DJNZ R3,LOOP34共五十九页(2)两个(lin )不带符号的多字节数相减两个N字节数分别存放在内部RAM单元中,低字节在前,高字节在后,分别由R0指定被减数单元地址,由R1指定减数单元地址,其差存放在原被减数单元中。 CLR C ;清进位位 MOV R2,#N ;设定字节数LOOP: MOV A,R0 ;从低字节开始逐个(zhg)取被减数字节 SUBB A,R1 ;两数相减 MOV R0,A ;存字节相减的差 INC R0 INC R1 DJN
20、Z R2,LOOP ;减法是否完成 JC QAZ ;若最高字节有借位,则转溢出处理 RET35共五十九页【例4-14】:双字节无符号数乘法。 编程说明:MCS-51指令系统中只有单字节乘法指令,因此,双字节相乘需分解为4次单字节相乘。若被乘数(ab)和乘数(cd)分别(fnbi)表示为(az+zb)(cz+zd),其中a、b、c、d都是8位数,z表示8位0,其乘积表示为:(az+zb) (cz+zd)=aczz+zadz +zbcz+zzbd式中,ac、ad、bc、bd为相应的两个8位数的乘积,占16位,可用4次乘法指令求出,这16位的积分别表示为acH、acL、adH、adL、bcH、bcL
21、和bdH、bdL ,其中,以H为后缀的为积的高8位,以L为后缀的为积的低8位,则接下列排序并按列求和,以便得到4字节乘积。2. 乘法(chngf)运算36共五十九页 acH acL z z z adH adL z z bcH bcL z z z bdH bdL入口(r ku):R2(高)、R3(低),被乘数; R6(高)、R7(低),乘数。出口:R4、R5、R6、R7 存放乘 积。37共五十九页R2R6第4次部分(b fen)积低位R2R3R6R7()R3R7HR3R7LR5R7R2R7HR2R7L(+)R5R4R7R3R6HR3R6L(+)R5R6R7R5R6R7F0R2R6L(+) ACC
22、.0R2R6H(+)R5R6R7R4R3R7第1次部分积R2R7第2次部分积R2R6第4次部分积低位R3R6第3次部分积38共五十九页4.3.2 定时(dn sh)程序 1. 单循环定时程序 MOV R5,#0FH ; t1LOOP: NOP ; t2 NOP ; t2 DJNZ R5,LOOP ; t3 程序执行时间: T=t1+(2t2+t3)0FH39共五十九页2. 较长时间的定时程序(chngx) MOV R5,#37H ; t1LOOP2: MOV R4,#69H ; t2LOOP1: NOP ; t3 NOP ; t3 DJNZ R4,LOOP1 ; t4 DJNZ R5,LOOP
23、2 ; t5 程序执行时间: T=t1+( 2 t3+t4) 69H+t5+t2 37H40共五十九页【例 4-14】 已知 80C51单片机使用的晶振频率6MHz 要求设计一个软件延时程序,延时时间为10ms. 入口:( R0)= 毫秒数; (R1)=1ms延时予定值. 出口:定时到,退出(tuch)程序.程序流程图如图示出。 程序清单如下: ORG 2000H 周期数 MOV R0,#0AH;毫秒数R0 1 DL2: MOV R1,#MT;延时值R1 1 DL1: NOP 1 NOP 1 DJNZ Rl DLl ;lms延时循环 2 DJNZ R0 DL2 ;10ms延时循环 2 延 时毫
24、秒数 R0 R1 1=0? R0 1=0?MT R1 结束41共五十九页4.3.3 查表程序 1. 查表指令(zhlng) MOVC A,A+DPTR MOVC A,A+PC2. 查表程序举例42共五十九页 MOV DPTR,#BS;子程序入口地址(dzh) RL A;键码值乘以2 MOV R2,A;暂存A MOVC A,A+DPTR; 取得入口地址低位 PUSH ACC MOV A,R2 INC A MOVC A,A+DPTR MOV DPH,ACC POP DPL CLR A JMP A+DPTRBS: DB RK0L DB RK0H DB RK1L DB RK1H DB RK2L DB
25、RK2H43共五十九页练习 例1:两个无符号双字节数相加。设被加数存放于内 部RAM的40H(高位字节), 41H(低位字节), 加数(ji sh)存放于50H(高位字节), 51H(低位字 节), 和数存入40H和41H单元中。 44共五十九页程序如下: START: CLR C ; 将Cy清零 MOV R0, 41H ; 将被加数地址送数据指针R0 MOV R1, 51H ; 将加数地址送数据指针R1 AD1: MOV A, R0 ; 被加数低字节的内容送入A ADD A,R1 ; 两个(lin )低字节相加 MOV R0, A ; 低字节的和存入被加数低字节中 DEC R0 ; 指向被加
26、数高位字节 DEC R1 ; 指向加数高位字节 MOV A, R0 ; 被加数高位字节送入A ADDC A, R1 ; 两个高位字节带Cy相加 MOV R0, A ; 高位字节的和送被加数高位字节 RET 45共五十九页 例2:将两个半字节数合并成一个一字节数。设内部RAM 40H、41H单元中分别存放着8位二进制数,要求(yoqi)取出两个单元中的低半字节,并成一个字节后,存入50H单元中。 46共五十九页 程序如下: START: MOV R1, 40H ; 设置R1为数据指针 MOV A, R1 ; 取出第一个单元中的内容 ANL A, 0FH ; 取第一个数的低半字节 SWAP A ;
27、 移至高半字节 INC R1 ; 修改数据指针 XCH A, R1 ; 取第二个单元中的内容 ANL A, 0FH ; 取第二个数的低半字节 ORL A, R1 ; 拼字 MOV 50H, A ; 存放(cnfng)结果 RET 47共五十九页 例3:比较(bjio)两个无符号数的大小。设外部RAM的存储单元 ST1和 ST2中存放两个不带符号的二进制数,找出其中的大数存入外部RAM中的ST3单元中。 48共五十九页 ORG 1000H ST1 EQU 2000H ST2 EQU 2100H ST3 EQU 2200H START: CLR C ; 清零Cy MOV DPTR, ST1 ; 第
28、一个数的指针 MOVX A, DPTR ; 取第一个数 MOV R2, A ; 保存(bocn) MOV DPTR, ST2 ; 第二个数的指针 MOVX A, DPTR ; 取第二个数 CLR C SUBB A, R2 ; 两数比较 JNC BIG1 ; 若第二个数大, 则转 XCH A, R2 ; 第一个数大BIG0: MOV DPTR, ST3 MOVX DPTR, A ; 存大数 RETBIG1: MOVX A, DPTR ; 第二个数大 SJMP BIG0 RET 49共五十九页 例4:工作单元清零。设有50个工作单元,其首址为外部存储器8000H单元,编制(binzh)单元清零程序
29、。50共五十九页CLEAR: CLR A MOV DPTR, 8000H ; 工作(gngzu)单元首址送指 针 MOV R2, 50 ; 置循环次数CLEAR1: MOVX DPTR, A INC DPTR ; 修改指针 DJNZ R2, CLEAR1 ; 控制循环 RET 51共五十九页 例5:一个十六进制数存放在内部RAM的HEX单元的低 4 位中,将其转换成ASCII码并送回 HEX单元。 十六进制:09的ASCII码为30H39H、AF的ASCII码为41H46H,ASCII码表格(biog)的首地址为ASCTAB。52共五十九页 ORG 1000H HEXASC: MOV A, H
30、EX ANL A, 0FH ADD A, 3 ; 修改(xigi)指针 MOVC A, A+PC MOV HEX, A RET ASCTAB: DB 30H, 31H, 32H, 33H, 34H DB 35H, 36H, 37H, 38H, 39H DB 41H, 42H, 43H, 44H, 45H DB 46H53共五十九页 习题(二)第2题:;数据(shj)保存R0首地址,A保存最小的数据(shj)。 MOV R0,#LIST CJNE R0,#81H,SA_1 MOV A,R0 ;第一个数据为1,取第一个数据SA_0: MOV R1,A INC R0 CJNE R0,#81H,SA_1 SJMP SA_3SA_1: CLR C SUBB A,R0 JC SA_2 MOV A,R0 SJMP SA_0SA_2: MOV A,R1 SJMP SA_0SA_3: RET54共五十九页第4题:;A保存(bocn)数据。 MOV R0,byte MOV R1,#08HSA_0: RRC A JC SA_1 MOV A,#30H MOV R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年厨房电器特许经营合同
- 简单的就业合同范本
- 生产自动化升级改造合同
- 2025年度文化创意合同翻译与版权保护合同
- 二零二五年度能源合同审批与节能减排管理协议
- 二零二五年度危险废物处置设施安全生产与应急管理合同
- 二零二五年度劳动合同终止与竞业限制协议
- 二零二五年度医疗机构与保险公司合作健康产业投资服务合同
- 二零二五年度2025年度抚养权变更及监护权转移合同
- 二零二五年度合作社土地入股与农业可持续发展战略合同
- 附表四计划开、竣工日期和施工进度网络图
- 2023服装跟单工作总结
- 儿童哮喘控制测试(C-ACT)
- 福建泉州惠安县2023-2024学年数学四年级第一学期期末质量跟踪监视试题含答案
- DL5168-2023年110KV-750KV架空输电线路施工质量检验及评定规程
- 门诊发生火灾应急预案演练建议5篇,门诊发生火灾的应急预案
- 医疗废物转运工作制度
- 新编建筑施工扣件式钢管脚手架安全技术规范
- 三年级下册小猿口算题1000道
- 《古兰》中文译文版
- 井下机电安装安全教育培训试题及答案
评论
0/150
提交评论