第4章 汇编语言程序设计实例
第4章-汇编语言源程序举例-循环程序设计

汇编语言程序设计举例24.4.4 循环程序设计循环程序结构由循环初始化、循环体和循环控制三部分组成。
循环程序结构有两种:先执行后判断和先判断后执行。
设置循环初值设置循环初值满足循环控制条件吗?循环体循环体满足循环控制条件吗?是是否否图4-10循环控制程序结构循环控制应该使循环在有限的次数后结束。
在循环次数确定的情况下,可用循环次数作为控制条件,这时常用LOOP指令实现控制循环。
循环控制的方法有很多,如标记控制循环,开关量控制循环,逻辑尺控制循环等,在不同的场合使用不同的方法。
【例4-10】在数据段中从BUFF单元开始存放100个字节类型的无符号数,编写程序找出其中最大的数并存入MAX单元中。
DATA SEGMENT ‘DATA’BUFF DB 100 DUP(?) ;定义100个数据MAX DB ?DATA ENDSCODE SEGMENT ‘CODE’ASSUME CS:CODE, DS:DATASTART: MOV AX, DATAMOV DS, AXMOV CX, 99 ;设置循环次数LEA SI, BUFF ;数据首地址送SIMOV AL, [SI] ;取第一个数INC SICON: CMP AL, [SI] ;与第二个数比较大小JNC NEXT ;若AL≥[SI],则跳转NEXT处MOV AL, [SI] ;AL< [SI], 替换AL NEXT: INC SI ;修改地址指针LOOP CON ;测试循环条件CX=0?MOV MAX, ALMOV AH, 4CHINT 21HCODE ENDSEND START4.4.5 过程设计如果在一个程序的多个地方或多个程序中都用到相同功能的程序段,这个程序段常常设计为过程。
过程又称为子程序或函数。
过程使程序结构模块化,程序更加清晰、易读易懂,而且节省存储空间。
过程的缺点是连接过程和从它返回时需要花费系统少量的时间。
CALL指令连接到过程,RET指令从过程返回。
第四章 汇编语言程序设计

一、算术运算符
包括:+,-,*,/(取商),MOD(取余),SHL,SHR 特点:①运算对象及结果均为整数 ②地址只能加减 例: DA1 DA2 MOV MOV MOV MOV DB 1,2,3,4 DB 20 AX,30*5 汇编时 AL,31MOD5 AL,31/5 AL,DA2-DA1
MOV MOV MOV MOV
如:加法:1001、1D、2B……
特点:计算机能够直接识别,执行速度快;
但不方便记忆和编程
2、汇编语言(Assembly Language) 用助记符来表示指令,如:加法:ADD…… 特点:机器不能识别,需翻译;但仍然面向硬件, 执行速度较快;多用于编制系统程序、实时控制和通 信程序。 3、高级语言(High-level Language) 用数学语言和自然语言编程; 如:加法:+,输出:Printf… 特点:编程方便简单,无需了解机器硬件;但机器 不能识别,需要庞大的翻译系统,速度较慢。
类型 返回值 1 2 4 类型 返回值 -1 [FFH] -2 [FEH] DB DW DD
变量
标号
NEAR FAR
数值返回运算符(续)
LENGTH:
•对于一般变量,返回1; •对于DUP定义的变量,返回单元数(直接返回第一
个DUP前的N值); 说明:DUP为复制操作符,格式:N DUP(表达式); N表示复制次数,表达式为复制内容 例:2 DUP(1,2) 等价于 1,2,1,2
则:COUNT的值为5
COUNT表示:DA1,DA2占的字节总数(长度之和) 七、优先级(P136 表4-3)
4.3 伪指令语句
在汇编时进行处理,主要完成变量定义,段定义,
段分配,指示程序开始和结束等功能。
第4章汇编语言程序设计及编程实例

标号
标号是用户定义的符号地址。 一条指令的标号是该条指令的符号名字,标号的值是汇编这 条指令时指令的地址。 标号由以英文字母开始的1~8个字母或数字组成,以冒号 “:”结尾。 标号可以由赋值伪指令赋值,如果没有赋值,汇编程序把存 放该指令目标码第一字节的存储单元的地址赋给该标号,所 以,标号又叫指令标号。
ORG 汇编起始命令
格式:ORG 16位地址 功能:规定该伪指令后面程序的汇编地址,即汇编后生成目 标程序存放的起始地址。例如: ORG 2000H START:MOV A,#64H ┇ 规定了START的地址是2000H,又规定了汇编后的第一条指 令码从2000H开始存放。
END 汇编结束指令
二、机器汇编
三、反汇编
一、手工汇编
通过手工方式查指令编码表,逐个把助记符指令 “翻译”成机器码,然后把得到的机器码程序键入 单片机,进行调试和运行。 手工汇编的缺点: 1、偏移量的计算容易出错 2、程序的修改会引起后面指令地址的变化,转移 指令的偏移量也要重新计算。
二、机器汇编
机器汇编是在计算机上使用交叉汇编程序进行源程 序的汇编。汇编工作由机器自动完成,最后得到以 机器码表示的目标程序。
3、对于通用的子程序,考虑到其通用性,除了用于存放子程 序入口参数的寄存器外,子程序中用到的其他寄存器的内容 应压入堆栈(返回前再弹出),即保护现场。 4、在中断处理程序中,除了要保护处理程序中用到的寄存器 外,还要保护标志寄存器。 5、用累加器传递入口参数或返回参数比较方便,在子程序中, 一般不必把累加器内容压入堆栈。
便于分工,从而可使多个程序员同时进行程序的编写和调试 工作,加快软件研制进度。
四章汇编语言程序设计ppt课件

ENDS,ASSUME,END ,…. 保留字:SEGMENT ENDS OFFSET SIZE DB
DW DD MOV PUSH ADD SUB MUL DIV INC DEC LOOP PROC ENDP CALL RET END
类别名
CODE、DATA、STACK(同名同类别段连续存放)
第4章 汇编语言程序设计
伪操作命令之三:段定义伪指令
段寄存器说明伪指令ASSUME
ASSUME 段寄存器名:段名[段寄存器名:段名[…..]]
例:
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN:
……
CODE ENDS ENDS MAIN
;指定第一条要执行的指令标号
注:1、该伪指令用于明确用SEGMENT定义的段的类型, 使编译程序能生成目标代码程序。
2、在源程序中,该伪操作放在可执行程序的前面。 3、该指令没有给段寄存器赋予实际的初值。这项工作要通
过写指令来完成,其中代码段不需要赋值。
+、-、*、/、MOD、SHL、SHR 都可应用于数字运算。 +、- 可以用于表示存储器操作数的地址,或两个存储器
单元(同一段内)的地址偏移量之差。 例:SUM - 2
CYCLE - GO
第4章 汇编语言程序设计
运算符之二:逻辑运算符
AND、OR、XOR、NOT 按位的逻辑运算 例:IN AL,PORT_VAL
DATA2 DB 0C1H,36H,9EH,0D5H,20H;加数
DATA ENDS;数据段结束
CODE SEGMENT;定义代码段
单片机第4章汇编语言程序设计

4.2 伪指令
伪指令是在机器汇编中告诉汇编程序 如何汇编、对汇编过程进行控制的命令。 伪指令与汇编语言指令不同,只在源程序 中出现,不产生任何机器代码,在程序的 运行过程中不起作用,故称为“伪指令”。
处理 判断 连接
2.绘制程序流程图 简单的问题可由文字说明, 当问题复杂时,将文字说明的步骤以图形符号表示, 称流程图。
3.编写源程序 用汇编语言把流程图所表明的 步骤描述出来,实现流程图中每一框内的要求,从 而编制出一个有序的指令流,即汇编语言源程序。
4.汇编、调试 汇编语言是用指令助记符代替机 器码的编程语言,所编写的程序是不能在计算机上 直接执行的,因此利用它所编写的汇编语言程序必 须转换为单片机能执行的机器码形式的目标程序才 能运行,我们把这一过程称为汇编,进行汇编的程 序称为汇编程序。
4. 定义字伪指令DW
[标号:] DW 16位字数据表
该指令的功能与DB相似, 区别仅在于从指定地
址开始存放的是指令中的16位数据, 而不是字节串。
每个16位数据要占两个存储单元, 高8 位先存(低位
地址), 低 8 位后存(高位地址)。
1403H 3CH
ORG 1400H DATA1:DW 324AH,3CH
散转程序是分支程序的一种, 它可根据运算结果或输入数 据将程序转入不同的分支。MCS - 51 指令系统中有一条跳转指 令JMP@A+DPTR,用它可以很容易地实现散转功能。该指令 把累加器的8位无符号数与16位数据指针的内容相加, 并把相加 的结果装入程序计数器PC,控制程序转向目标地址去执行。
第4章__89C51汇编语言程序设计(2)

┇
;MAIN为主程序或调用程序标
第 4章
89C51汇编语言程序设计 89C51汇编语言程序设计
SUB:
PUSH PSW PUSH ACC
;现场保护 ;
子程序处理程序段 POP ACC POP PSW RET ;现场恢复 ; ;最后一条指令必须为RET
5
第 4章
89C51汇编语言程序设计 89C51汇编语言程序设计
⑴ MOVC ⑵ MOVC
A,@A+DPTR A,@A+PC
MOVC A,@A+DPTR 完成把A中的内容作为一个无符号数与DPTR中的内容相加,所 得结果为某一程序存储单元的地址,然后把该地址单元中的内容 送到累加器A中。 MOVC A,@A+PC 以PC作为基址寄存器,PC的内容和A的内容作为无符号数,相加 后所得的数作为某一程序存储器单元的地址,根据地址取出程序 存储器相应单元中的内容送到累加器A中。
12
第 4章
89C51汇编语言程序设计 89C51汇编语言程序设计
例6:多字节二进制加法程序:2个4字节无符号二进制数求和, 分别存放于33H,32H,31H,30H及43H,42H,41H,40H中,和存放于 34H,33H,32H,31H,30H。 ORG 1000H DADD: MOV R0,#30H MOV R1,#40H MOV R7,#04H CLR C LOOP: MOV A,@R0 ADDC A,@R1 MOV @R0,A
例5:21H单元开始存放数据块(每单元有16进制数0-F),长度 存放于20H单元中,将它们转化为ASCII码,存放于41H开始单元。 0-9:ASCII:30H-39H=0-9+30H A-F: ASCII:41H-46H=A-F+37H ORG 0030H MAIN: MOV SP,#60H MOV R1,#41H MOV R0,#21H MOV R2,20H LOOP: MOV A,@R0 LCALL ZHCX MOV @R1,A INC R0 INC R1 DJNZ R2,LOOP SJMP $ ORG 1000H ZHCX: CJNE A,#0AH,NEXT NEXT: JC ASC1 ADD A,#37H SJMP ASC2 ASC1: ADD A,#30H ASC2: RET
第4章 MCS-51汇编语言程序设计

n
第4章 MCS-51汇编语言程序设计
当i=n时,yn+1即为所求n个数据之和y。这种形式的 公式叫递推公式。在用单片机的汇编程序实现时,yi 是一个变量,这可用式(4-3)表示:
0 y 1 i y xi yi i 1 i
in
根据这个公式,可以画出程序框图,如图4.1所示。
第4章 MCS-51汇编语言程序设计
4.3.1 程序总体结构 • MCS-51单片机的汇编程序由主程序、若干个子程序、中 断服务程序等组成。 • 由于MCS-51单片机复位后PC=0000H,也就是程序从程 序存储器的0000H开始执行,由于MCS-51单片机程序存 储器的0003H、000BH、0013H、001BH、0023H分别是 外部中断0、定时器0、外部中断1、定时器1、串行口的中 断入口地址,所以主程序开始的地址一般安排在0030H之 后的程序存储器中。一般在程序存储器的0000H开始放一 条无条件转移指令(AJMP、LJMP、SJMP)转到主程序的 开始处。如果要使用某些中断,则在相应的中断入口地址 也放一条无条件转移指令,多数情况下用LJMP指令,这 是因为使用LJMP指令可使中断服务程序在单片机程序存 储器中的任意位置编写。图4.3是MCS-51单片机的程序总 体结构图。
第4章 MCS-51汇编语言程序设计
2. 汇编 • 汇编语言必须经过机器汇编或人工汇编才能得到相应的机 器程序,即目标程序,以供单片机识别和执行。由于人工 汇编工作量大,容易出错,现已不用。机器汇编一般是在 PC上利用一些汇编软件进行。目前几乎所有的单片机仿 真器配的开发软件都有汇编程序,在源程序编写完成后使 用汇编功能菜单即可进行对源程序汇编。在汇编时若发现 源程序有语法错误或跳转超出范围等情况,系统会将错误 显示给用户。用户在改正错误后,需再对源程序进行汇编, 直到源程序完全没有语法错误。此时汇编程序会生成与其 对应的目标文件。一般情况下是生成HEX(十六进制)和 BIN(二进制)文件。没有语法错误并不等于程序开发成功, 一般来说还要对程序进一步调试、修改,运行无误后,程 序才算最终完成。这时才可将目标文件写入到程序存储器 中。
第4章 MCS-51单片机汇编语言程序设计(2)

XCH A,R3 INC A MOVC A,@A+DPTR MOV DPL,A MOV DPH,R3 CLR A JMP @A+DPTR TAB DW DW A0 A1
…………. DW AN
INC
DPTR
MOVX A,@DPTR SUBB A,R7 JNC XCH BIG1 A,R7
BIG0:INC DPTR
实现程序如下: 实现程序如下
START:CLR C : MOV DPTR,#ST1 , MOVX A,@DPTR , MOV R7,A
MOVX @DPTR,A RET BIG1:MOVX A,@DPTR SJMP BIG0
实现程序如下: 实现程序如下 MOV 30H, 20H ANL 30H,#00011111B MOV A,21H SWAP A RL A ANL A,#11100000B ORL 30H,A
第4章 MCS-51单片机汇编语言程序设计
实现程序如下: 实现程序如下 例 A,@R1 ADDC4.3 做3个字节的 无符号的加法. 无符号的加法.设一个加 MOV R0,#52H , MOV @R0,A 数存放在内部RAM 50H、 RAM的 数存放在内部RAM的50H、 MOV R1,#55H , DEC R0 51H、52H单元中 单元中, 51H、52H单元中,另一 DEC R1 RAM的53H、 MOV A,@R0 个加数存放在RAM 个加数存放在RAM的53H、 MOV A,@R0 54H、55H单元中 单元中, 54H、55H单元中,相加 ADD A,@R1 结果存内部RAM的50H、 结果存内部RAM的50H、 RAM ADDC A,@R1 51H、52H单元 单元, 51H、52H单元,均从高 MOV @R0,A 字节开始存放, 字节开始存放,进位存放 MOV 00H,C 在位寻址区的00H位中。 00H位中 在位寻址区的00H位中。 MOV @R0,A DEC DEC R0 R1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1位数码管显示出4位开关状态
• 如下图所示,要求编程实现:将4位开关状 态输出到数码管显示。如4位开关全闭合, 数码管显示“0”,4位开关全断开,数码管 显示“F”,共16种状态。注意:图中数码 管(PROTEUS仿真平台中元器件型号为 7SEG-COM-AN-GRN)是带公共端的共阳 七段绿色数码管。
LED数码管的显示原理
LED(Light Emitting Diode)发光二极管缩写。LED 数码管是由发光二极管构成的。 1. LED数码管的结构 常见的LED数码管为“8”字型的,共计8段。每一段
对应一个发光二极管。有共阳极和共阴极两种,如图10-1
所示。共阴极发光二极管的阴极连在一起,通常公共阴极 接地。当阳极为高电平时,发光二极管点亮。 同样,共阳极LED数码管的发光二极管的阳极连接在 一起,公共阳极接正电压,当某个发光二极管的阴极接低
电平时,发光二极管被点亮,相应的段被显示。
6
图10-1
8段LED数码管结构及外形
7
为了使数码管显示不同的符号或数字,要把某些段发光
二极管点亮,就要为LED数码管提供段码(字型码)。 LED数码管共计8段。正好是一个字节。习惯上是以“a” 段对应段码字节的最低位。各段与字节中各位对应关系如 表10-1所示。
按照上述格式,显示各种字符的8段LED数码管的段码
如表10-2所示。
8
9
ORG 0000H AJMP START ORG 0030H START:MOV A,P2 ANL A,#0FH MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P1,A AJMP START TABLE:DB 0C0H,0F9H,0A4H,0B0H ;共阳极7段段码 DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H DB 0C6H,0A1H,86H,8EH END
ห้องสมุดไป่ตู้ 待续!
汇编语言程序设计实例
例1(4个开关4个LED灯):在下图所示电路中, P3.0~P3.3接4个LED管,P1.0~P1.3接4个开关, 编程序将开关的状态反映到LED上。
例2 (4个开关4个LED灯) (和例2-2类似) 在下图所示电路中,P3.4~P3.7接4个LED管, P1.0~P1.3接4个开关,编程序将开关的状态 反映到LED上。