(微机课07汇编程序1福建工程学院版本)_第1页
(微机课07汇编程序1福建工程学院版本)_第2页
(微机课07汇编程序1福建工程学院版本)_第3页
(微机课07汇编程序1福建工程学院版本)_第4页
(微机课07汇编程序1福建工程学院版本)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 89C51汇编语言程序设计 汇编语言是面向机器硬件的语言,要求程序设计者对89C51单片机具有很好的“软、硬结合”的功底。 4.1 汇编语言程序设计概述 4.1.1 机器语言、汇编语言和高级语言 1.机器语言 用二进制(“0”、“1”)代码表示指令、数字, 用机器指令代码编写的程序机器语言目标 程序。 不易懂,难记忆,易出错。 机器语言目标程序是唯一能 被CPU识别并执行的程序形式,P.53,2汇编语言 采用指令助记符(符号指令)表示指令称为符号语言或汇编语言 用汇编语言编写的程序称为汇编语言源程序。 汇编语言特点: 面向机器的语言,程序设计员须对硬件有相当深入的了解。 指令助记符和机

2、器指令一一对应,用汇编语言编写的程序(比高级语言)效率高,占存储空间小,运行速度快,能编写出最优化的程序。 能直接管理和控制硬件设备(功能部件),它能处理中断,也能直接访问存储器及I/O接口电路。 汇编语言和机器语言都脱离不开具体机器的硬件,均是面向“机器”的语言,缺乏通用性。,P.53,汇编,汇编语言 源程序,机器语言目标程序,汇编程序(汇编软件),机器汇编,人工,人工汇编,3高级语言 不受具体机器的限制,接近于人的自然语言及学科语言,常用的如BASIC、FORTRAN以及C、VB语言等。可视化、面向对象 高级语言优点:通用性强,直观、易懂、易学,可读性好。 计算机不能直接识别和执行高级语言

3、,需要将其 “翻译”成机器语言才能识别和执行,进行“翻译”的专用程序称为编译程序。 可用C语言(C51)来进行AT89C51的应用程序设计。对于程序的空间和时间要求很高的场合,汇编语言仍是必不可缺的。 C语言和汇编语言混合编程 在很多需要直接控制硬件的场合,则更是非用汇编语言不可, 使用汇编语言编程,是单片机程序设计的基本功之一,P.53,4.1.2 汇编语言语句的种类和格式 两种基本类型:指令语句和伪指令语句 (1)指令语句 (CPU指令,可执行指令,真指令) 已在第3章介绍 每一条指令语句在汇编时都产生一个指令代码:机器指令代码 (2)伪指令语句 (命令语句,非执行指令,汇编命令) 是为汇

4、编工作服务的。在汇编时除了定义的数据之外没有机器指令代码与之对应。,P.54,【例4-1】AT89C51的汇编语言的四分段格式如下: 标号 操作码 操作数 注释 字段 字段 字段 字段 ORG 2000H ;起始地址伪指令 START:MOV A,#00H ;0A MOV R1,#10 ;10R1 MOV R2,#00000011B ;3R2 LOOP:ADD A,R2 ;A+R2A DJNZ R1,LOOP ;R1减1,非零则循环 NOP ;空操作 HERE:SJMP HERE ;自循环 END ;汇编终止伪指令 程序功能:R2内容自加10次:R210A,P.54,十进制,二进制,十六进制,

5、地址 机器码 2000 74 00 2002 79 0A 2004 7A 03 2006 2A 2007 D9 FD 2009 00 200A 80 FE,操作码, ,操 作 数,4.1.3 伪指令 伪指令也称为汇编程序控制命令,是向汇编程序发出的指示信息,告诉它如何完成汇编工作。伪指令没有相应的机器指令代码产生 常用的伪指令: 1.ORG(ORiGin)汇编起始地址命令 指定后续程序的起始地址。可多次使用ORG指令,但是,地址必须由小到大排列,地址不能交叉、重叠。 ORG 2000H 2000 74 00 START:MOV A,#00H 2. END(END of assembly)汇编终

6、止命令 汇编语言源程序的结束标志,用于终止源程序的汇编工作。在整个源程序中只能有一条END命令,且位于整个程序的最后。,P.55-56,3DB(Define Byte)定义字节命令 例: ORG 20A0H 20A0 30 40 18 43 42 DB 30H,40H,24,“C”,“B” DB功能是从当前地址开始定义(存储)若干个单字节数据, 十进制数自然转换成16进制数,字母按ASCII码存储。 4DW(Define Word)定义数据字命令 定义16位的数据字。 例: ORG 20D0H 20D0 12 46 00 7B 00 0A DW 1246H,7BH,10 DB功能是从当前地址开

7、始定义(存储)若干个双字节数据,高字节在低地址单元 5EQU(EQUate)赋值命令 用于给标号赋值。赋值以后,其标号值在整个程序有效。 例如: TEST EQU 208AH 表示标号TEST=208AH,在汇编时,凡是遇到标号TEST时,均以208AH来代替。,P.56,【例4-3改】设计一个程序,功能为:根据30H单元中的数x(09之间)查平方表,求出x相应的平方值y存50H单元。x和y均为单字节数。 用DPTR作基址的方法: 地址 机器码 汇编语言源程序 ORG 0300H 0300 E5 30 PFSUB:MOV A ,30H ;取自变量x 0302 90 03 09 MOV DPTR

8、 ,#TAB ;指向平方表首址 0305 93 MOVC A , A + DPTR ;查表得相应函数值y 0306 F5 50 MOV 50H ,A ;存结果y 0308 02 03 08 LS:LJMP LS 030B 00 01 04 09 10 TAB:DB 00H,01H,04H,09H,10H ;平方表0 1 4 9 16 0310 19 24 31 40 51 DB 19H,24H,31H,40H,51H ; 25 36 49 64 81 0315 END,(x + 030BH),【PFDPTR.ASM】,【引用前例】,0 , 1 , 4 , 9 , 16,25 , 36 , 49

9、 , 64 , 81,可用十进制,效果一样,4.2 汇编语言源程序的汇编 汇编语言源程序 “翻译”成机器代码(指令代码)的过程称为“汇编”。汇编可分为手工汇编和机器汇编两类: 4.2.1 手工汇编 人工查表翻译指令。但遇到的相对转移指令的偏移量的计算,要根据转移的目标地址计算偏移量,不但麻烦,且容易出错。 4.2.2 机器汇编 用编辑软件进行源程序的编辑。编辑完成后,生成一个ASCII码文件,扩展名为“.ASM”。然后在微计算机上运行汇编程序,把汇编语言源程序翻译成机器代码。 交叉汇编-汇编后的机器代码是在另一台(种)计算机(这里是单片机)上运行。 反汇编分析已有的可执行目标程序,要将二进制的

10、机器代码语言程序反向翻译成汇编语言源程序,以便分析、修改。,P.57,4.3 AT89C51单片机汇编语言程序设计举例 4.3.6 分支转移程序设计 1单分支转移结构: 仅有两个出口,两者选一,图4-4,图4-5,P.65,属循环结构!,图4-3,程序段1,条件满足?,单分支典型结构1,单分支典型结构2,【例4-B1】请编程序使48H、49H单元所存储的二个数中较小者送20H单元。 ORG 0000H BIG:MOV A ,48H ;取甲数 CLR C;清Cy SUBB A ,49H;减去乙数 JZ LP1 ;相等转 LP0: JNC LP2;无借位则甲乙,转 LP1: MOV A ,48H

11、;甲数小:取甲数 SJMP LP3 ;转保存结果 LP2: MOV A ,49H ;乙数小:取乙数 LP3: MOV 20H,A ;存结果 SJMP $ ;自循环 END 【思考】 请编程序使5CH、5DH单元所存储的二个数中较大者在前。 请编程序判断若34H、35H单元所存储的二个数相等则置F0位为0,否则置1。,MOV A ,48H CJNE A,49H,LP0 SJMP LP1 ;相等 LP0:JNC LP2 ;甲乙,【二分支典型程序例】,JZ LP1 ;相等转(本题可略去),2多分支转移结构: 程序的判别部分有两个以上的出口。,【例4-10】 求符号函数的值。 X存放在40H单元,Y存

12、放在41H单元。 SIGNFUC:MOV A,40H CJNE A,#00H,NZEAR SJMP ZEAR ;为0则转 NZEAR:JB ACC.7,POSI ;为负则转 MOV A,#01H ;为正:赋+1原码 SJMP NEGT POSI:MOV A,#81H ;为负:赋-1的原码 SJMP NEGT ZEAR:MOV A,#00H ;为零:赋0的原码 NEGT:MOV 41H,A ;存结果 SJMP $ END,图4-6,P.66,NZEAR,POSI,若用补码:-1补=FFH,教材题意为用原码表示带符号数X、Y,ZEAR,JZ ZEAR,【三分支典型程序例】,NEGT,负,正,非零,

13、零,图4-7,在实际的应用中,经常遇到的图4-7结构形式的分支转移程序的设计,需根据某一单元的内容是0,1,n,来分别转向处理程序0,处理程序1,处理程序n。,P.65,类似于开关语句,A=1,A=n,4.3.7 循环程序设计,图4-8 计数循环控制结构,循环计数,P.67,结果处理,循环,循环准备: 初始地址指针 循环计数初值 单元变量初值,为下一次循环 调整有关指针,循环控制,存储结果数据 或其他处理,每次循环都执行,(后续程序),(未完继续),【例4-12改】 有一批单字节无符号数,依次存放在51单片机片内RAM从50H开始的单元中,数据个数n放在4FH单元中,求这批数据的和(双字节)放

14、在R3、R4中,程序如下: ORG 0000H ADD1: MOVR2,4FH ;取数据个数n,作为循环累加次数,送R2 MOV R3,#0 ;部分和高字节单元清0 MOV R4,#0 ;部分和低字节单元清0 MOV R0,#50H;R0指向第一个数 LOOP: MOV A,R4 ;取部分和低字节原有的值 ADD A,R0 ;加上当前数低字节(本例原始数据只有低字节) MOV R4,A ;回存部分和低字节结果 MOV A,R3 ;取部分和高字节原有的值 ADDC A, #00H ;加上当前数高字节(00H)及低字节的进位 MOV R3,A ;回存部分和高字节结果 INC R0 ;R0指向下一个数 DJNZ R2,LOOP;未加完,转回继续进行下一个数的累加 SJMP $ END,【求数组和程序】,循环准备,循环体,调整指针,循环控制,作业三 : P.70 4 补充4-1: 请编程序使40H、41H单元所存储的二个数中的大数减去小数,差值存58H单元(即求两数差的绝对值)。 补充4-2:有8个双字节BCD数存放在片内RAM 40

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论