汇编语言程序设计4-1汇编语言基本概念

上传人:tia****nde 文档编号:68068650 上传时间:2019-01-09 格式:PPT 页数:25 大小:385.81KB
返回 下载 相关 举报
汇编语言程序设计4-1汇编语言基本概念_第1页
第1页 / 共25页
汇编语言程序设计4-1汇编语言基本概念_第2页
第2页 / 共25页
汇编语言程序设计4-1汇编语言基本概念_第3页
第3页 / 共25页
汇编语言程序设计4-1汇编语言基本概念_第4页
第4页 / 共25页
汇编语言程序设计4-1汇编语言基本概念_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《汇编语言程序设计4-1汇编语言基本概念》由会员分享,可在线阅读,更多相关《汇编语言程序设计4-1汇编语言基本概念(25页珍藏版)》请在金锄头文库上搜索。

1、第四章 汇编语言程序设计,4-1 汇编语言基本概念,4-2 汇编语言程序设计,4-1 汇编程序基本概念,4-1-1 程序设计语言 用于编制计算机程序的语言称为程序设计语言。按照语言的结构及其功能可以分为三种:机器语言、汇编语言、高级语言。,一、机器语言,二、汇编语言 用汇编语言编写的、完成特定功能的指令序列。 特点有:,用二进制代码0和1表示指令和数据的最原始的程序设计语言。其直接取决于计算机的结构,响应速度最快,但程序繁琐、难认、难记。,1)汇编语言指令与机器语言指令相对应,有效地利用存储空间。 2)指令直接访问CPU的寄存器、存储单元和I/O端口,可以充分发挥CPU的功能,满足实时控制的要

2、求。 3)是面向机器的语言,使用者必须对机器的硬件结构、指令系统都要熟悉。汇编语言程序的通用性差,程序移植起来不方便。,汇编,三、高级语言 高级语言是以接近于人的自然语言,面向过程而独立于机器的通用语言。必须经编译程序或解释程序进行翻译生成目标程序,机器才能执行。 特点:简单、易学、通用性好,便于移植。但是,其目标程序占存储单元多,执行时间长;在MCS-51系列单片机开发应用中,单片机的C语言C51正得到越来越广泛的应用。,汇编语言程序到机器语言程序的转换过程称为汇编。 1.手工汇编:人工查指令表汇编。用于设计短小程序或调试程序的场合。 2.机器汇编:用汇编程序进行汇编。,4-1-2 汇编语言

3、的语句结构,二、汇编语言的语句格式 汇编语言一般由四部分组成。格式如下: 标号: 操作码 操作数 ; 注释 START: MOV A, 30H ;A(30H) 各部分之间须用分隔符,即在标号之后要加冒号“:”;在操作 码与操作数之间用空格间隔;在操作数内部用逗号“,”将源操作 数和目的操作数隔开;注释段用分号(;)隔开。,一. 汇编语言指令类型 1.机器指令: 指令系统中的全部指令,每条指令有对应的机器代码。 2. 伪指令: 汇编控制指令,仅提供汇编信息,没有指令代码。,4-1-3 伪指令 常用伪指令及其功能:,1. ORG起始地址指令:指明程序和数据块起始地址。 指令地址 机器码 源程序 O

4、RG 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6 MOV A,R0 ORG 3000H 3000H 23 DB 23H,100,A 3001H 64 3002H 41,2. DB 定义字节型常数指令。 例: DB 12H,100,A,4. EQU 赋值。为标号或标识符赋值。 X1 EQU 2000H X2 EQU 0FH MAIN: MOV DPTR,#X1 ADD A,#X2,5. BIT 位定义。 例:FLAG BIT 30H,3. DW 定义字型常数指令。 例: DW 1234H,5678H,6. END 结束汇编指令。,4-2 汇编语言程序设

5、计,一.分析问题,建立数学模型 二.确定算法 三.画程序流程图,四.分配内存单元 五.编制源程序 六.调试程序,4-2-1 汇编语言程序设计步骤,常用程序结构 顺序程序、分支程序、循环程序、子程序,4-2-2 顺序程序 顺序程序又称简单程序,程序走向只有一条路径。,例1:双字节求补程序(设数据在R4R5中): MOV A,R5 ;取低字节 CPL A ADD A,#01H ;低字节变补 MOV R5,A MOV A,R4 ;取高字节 CPL A ADDC A,#00H ;高字节变补 MOV R4,A,例2:将30H单元内的两位BCD码拆开并转换成ASCII码,存入RAM两个单元中。,ORG 2

6、000H MOV A ,30H ;取值 ANL A,#0FH ;取低四位 ADD A,#30H, ;转换成ASCII码 MOV 32H ,A ;保存结果 MOV A ,30H ;取值 SWAP A ;高4位与低四位互换 ANL A,#0FH ;取低四位(原高4位) ADD A,#30H, ; 转换成ASCII码 MOV 31H ,A ;保存结果 SJMP $ END,4-2-3 分支程序 由条件转移指令构成程序判断框部分,形成程序分支结构。,单重分支程序 一个判断决策框,程序有两条出路。 两种分支结构:,例1: 求R2中补码绝对值,正数 不变,负数变补。 ORG 1000H MOV A,R2

7、JNB ACC.7,NEXT;为正数? CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束,多重分支程序 一多次使用条件转移指令,形成两个以上判断框。,例2: 求符号函数Y=SGN(X) +1 当 X0 SGN(X)= 0 当 X=0 -1 当 X0,ORG 0100H SYMB: MOV A,40H ;取X JZ STOR ;X=0,Y=X JB ACC7,MINUS;X0 MOV A,# 1 ;X0,Y=+1 SJMP STOR MINUS:MOV A,#0FFH;X0,Y= -1 STOR: MOV 41H,A ;保存Y RET,二按分支号转移,如

8、:分支号=0,程序转移到ADDR0处;当分支号=1,程序转移到ADDR1处; 。,(1)用地址表法。 例3:设分支号已存入A。 MTJS:MOV DPTR,#TAB ;取表首地址 CLR C ;分支号2 RLC A MOV R2,A MOVC A,A+DPTR;取分支地址低位 PUSH ACC ;入栈保存 MOV A,R2 INC A MOVC A,A+DPTR;取分支地址高位 PUSH ACC ;入栈保存 RET ;分支地址PC,转移 TAB: DW ADDR0 ;分支地址表 DW ADDR1 ADDR0: ;程序段0 ,(2)转移表法。用分支转移指令 JMP A+DPTR。,例4: 根据R

9、0的值转向6个分支程序。 R010,转向SUB0; R020,转向SUB1; R060,转向SUB5;,ORG 2000H MOV DPTR,#TAB;转移指令表首地址 MOV A, R0 ;取数 MOV B, #10 DIV AB ;A除10,商在A中 CLR C RLC A ;A2A JMP A+DPTR ;PC A+DPTR TAB: AJMP SUB0 ;转移指令表 AJMP SUB1 AJMP SUB2 AJMP SUB5,4-2-4 循环程序 包含多次重复执行的程序段,循环结构使程序紧凑。,循环程序的构成,一初始化部分 循环准备工作。如:清结果单元、设指针、设循环控制变量初值等。,

10、二循环体 需多次重复处理的程序段。 三.循环控制部分 1.修改指针和循环控制变量。 2.检测循环条件:满足循环条件,继续循环,否则退出循环。 四.结束部分 处理和保存循环结果。,循环程序按结构形式,分为单重循环与多重循环。,单重循环 简单循环结构:循环体中不套循环。,例1:求n个单字节数据的累加,设数据串已在43H起始单元,数据串长度在42H单元,累加和不超过2个字节。,SUM: MOV R0,#42H;设指针 MOV A,R0 MOV R2,A ;循环计数器n CLR A ;结果单元清0 MOV R3,A ADD1:INC R0 ;修改指针 ADD A,R0 ;累加 JNC NEXT ;处理

11、进位 INC R3 ;有进位,高字节加1 NEXT: DJNZ R2,ADD1 ;循环控制:数据是否加完? MOV 40H,A ;循环结束,保存结果 MOV 41H,R3 RET,循环控制方法:计数控制、特征标志控制。,一.计数控制: 设循环计数器,控制循环次数。正计数和倒计数两种方式。 例2:为一串7位ASCII码数据的D7位加上奇校验,设数据存放在片外RAM的2101H起始单元,数据长度在2100H单元。,MOV DPTR,#2100H MOVX A,DPTR MOV R2,A NEXT:INC DPTR MOVX A,DPTR ORL A,#80H JNB P,PASS MOVX DPT

12、R,A PASS:DJNZ R2,NEXT DONE:SJMP DONE,二.特征控制:设定循环结束标志实现循环控制。,例3:找正数表最小值。正数表存在片外RAM中以LIST为起始单元,用-1作为结束标志。,START:MOV DPTR,#LIST ;数表首地址 MOV B,#127 ;预置最小值 NEXT: MOVX A,DPTR ;取数 INC DPTR ;修改指针 CJNE A,#-1,NEXT1;是否为数表结尾? SJMP DONE ;循环结束 NEXT1:CJNE A,B,NEXT2 ;比较 NEXT2:JNC NEXT MOV B,A ;保存较小值 SJMP NEXT DONE:

13、SJMP DONE,习题:统计一班考试为100分和不及格人数,成绩在41H起始单元。,多重循环 循环体中套循环结构。以双重循环使用较多。,例4:将内存一串单字节无符号数升序排序。 步骤: 每次取相邻单元的两个数比较,决定是否需要交换数据位置。 第一次循环,比较N-1次,取到数据表中最大值。 第二次循环,比较N-2次,取到次大值。 第N-1次循环:比较一次,排序结束。,SORT: MOV A,#N-1 ;N个数据排序 MOV R4,A ;外循环次数 LOOP1: MOV A,R4 MOV R3,A ;内循环次数 MOV R0,#TAB ;设数据指针 LOOP2: MOV A,R0 ;取二数 MO

14、V B,A INC R0 MOV A,R0 CJNE A,B,L1 ;比较 L1: JNC UNEX ;AB,不交换 DEC R0 ;否则交换数据 XCH A ,R0 INC R0 MOV R0,A UNEX: DJNZ R3,LOOP2 ;内循环结束? DJNZ R4,LOOP1 ;外循环结束? RET,软件延时程序 用循环程序将指令重复多次执行,实现软件延时。,试计算延时程序的执行时间。 源程序 指令周期(M) 指令执行次数,习题: DELAY:MOV R6,#100 1 D1: MOV R7,#10 1 D2: NOP 1 DJNZ R7,D2 2 DJNZ R6,D1 2 RET 2

15、计算延时程序的执行时间(设时钟f=6MHz,M=1s)。,DELAY:MOV R6,#64H 1 I1: MOV R7,#0FFH 1 I2: DJNZ R7,I2 2 DJNZ R6,I1 2 RET 2,延时时间计算:(设时钟f=12MHz) t=(11+1100+2100255+2100+21)M=51.3 ms,1 100 100255 100 1,4-2-5 子程序 子程序:能完成某项特定功能的独立程序段,可被反复调用。 调用子程序:就是暂时中断主程序的执行,而转到子程序的入口地址去执行子程序。子程序执行完毕,自动返回主程序,主程序再继续往下执行。,子程序设计 一子程序入口用标号作为子程序名。 二调用子程序之前设置好堆栈。 三用返回指令RET结束子程序,并保 证堆栈栈顶为调用程序的返回地址。 四.子程序嵌套须考虑堆栈容量。 五.提供足够的调用信息: 如:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。,子程序的类型 按子程序与主程序之间传递参数的方式分类。,入口参数:调用子程序之前,需要传给子程序的参数。 出口参数:子程序送回调用程序

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号