第4章__汇编语言程序设计知识1

合集下载

单片机学习第四章汇编语言程序设计

单片机学习第四章汇编语言程序设计
整理课件
ORG START:CLR
MOV SUBB JC MOV XCH MOV NEXT: NOP SJMP END
1000H C A,60H A,61H NEXT A,60H A, 61H 60H,A
$
;0→CY
;做减法比较两数 ;若(60H)小,则转移
;交换两数
整理课件
【例4.6】将R2中的一位十六进制数转换为 ASCII码,结果仍存放于R2中。
MOV R0, #0 SJMP NEXT4 NEXT2:MOV R0,A DEC R0 NEXT4:MOV 31H,R0 SJMP $ END
;取X ;与5比较
;X<5,则转NEXT2 ; ;设10<X,Y=X十1
;与1l比较 ;x>10,则转NEXT4
;5≤X≤10,Y=0
;X<5,Y=X-1 ;存结果
MOV
@R0,A
;保存结果
SJMP $
;原地踏步
END
整理课件
【例4.2】假设两个双字节无符号数,分别存 放在R1R0和R3R2中,高字节在前,低字 节在后。编程使两数相加,用R2R1R0存放 和。 对多字节的加法,存在最高位的进位问题。 如果最高位有进位,则和的字节数要比加 数或被加数的字节数多一个。
经常用于定义一个地址表。Yi为双字节数据, 它可以为十进制或十六进制的数,也可以 为一个表达式。高位数在前,低位数在后。
整理课件
• 例如: ORG 1000H DATA:DW 3241H,1234H,78H 上述程序将对从1000H单元开始的6个单元 赋值,赋值情况如何呢? (1000H)=32H,(1001H)=41H, (1002H)=12H,(1003H)=34H, (1004H)=00H,(1005H)=78H。

汇编语言程序设计(第四版)【课后答案】

汇编语言程序设计(第四版)【课后答案】

汇编语言程序设计第四版【课后习题答案】第1章汇编语言基础知识〔习题1.1〕简述计算机系统的硬件组成及各部分作用。

〔解答〕CPU:包括运算器、控制器和寄存器组。

运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为处理单元提供所需要的数据。

存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。

外部设备:实现人机交换和机间的通信。

〔习题1.2〕明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB。

〔解答〕主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。

辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速度慢。

RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电后能保存信息。

存储器由大量存储单元组成。

为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常称做I/O端口。

KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。

〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序?〔解答〕用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编译通过的程序就是目标程序。

〔习题1.4〕汇编语言与高级语言相比有什么优缺点?〔解答〕汇编语言与高级语言相比的优点:由于汇编语言本质就是机器语言,它可以直接地、有效地控制计算机硬件,因而容易产生运行速度快,指令序列短小的高效目标程序,可以直接控制计算机硬件部件,可以编写在“时间”和“空间”两方面最有效的程序。

第4章 汇编语言程序设计

第4章  汇编语言程序设计

因此, 因此,对例子中的存储器地址作如下运 算: SUM+2 CYCLE-5 NOT_DONE-GO 是有效的表达式。 是有效的表达式。而 SUM-CYCLE
(2)逻辑运算符 逻辑运算符是按位操作的AND、OR、 、 逻辑运算符是按位操作的 、 XOR和NOT。 和 。 1010 1010 1010 1010B AND 1100 1100 1100 1100B=1000 1000 1000 1000B 1100 1100 1100 1100B OR 1111 0000 1111 0000B=1111 1100 1111 1100B NOT 1111 1111 1111 1111B=0000 0000 0000 0000B
ASSUME CS:MY_CODE, ;规定 和DS 规定CS和 : 的内容 DS:MY_DATA : PORT_VA1 EQU 3 ;端口的符号名 GO: MOV AX, MY_DATA ;DS : 初始化为MY_DATA 初始化为 MOV DS, AX MOV SUM, 0 ;清SUM单元 单元
变量可以具有以下几种寻址方式: 变量可以具有以下几种寻址方式: ① 直接寻址 ② 基址寻址 变址(索引) ③ 变址(索引)寻址 ④ 基址变址寻址
2.运算符(Operators) .运算符( ) 算术运算符( Operators) ① 算术运算符(Arithmetic Operators) 逻辑运算符( Operators) ② 逻辑运算符(Logical Operators) 关系运算符( Operators) ③ 关系运算符(Relational Operators) 分析运算符( Operators) ④ 分析运算符(Analytic Operators) 合成运算符( Operators) ⑤ 合成运算符(Synthetic Operators)

第四章-汇编语言程序的设计

第四章-汇编语言程序的设计

第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。

(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。

在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。

(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。

汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。

①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。

②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。

(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。

)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。

操作数:给指令的操作提供数据或地址。

注释:是对语句或程序段的解释说明。

(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。

冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。

第4章 单片机汇编语言程序设计

第4章  单片机汇编语言程序设计

RO 20HBCMDH BCDL
SWAP A ORL A, #30H MOV 21H, A SJMP $
;BCDH数送A的低4位 21 0011
;完成转换 @R0 ;存数
H22HB0C001D0HBCD 01000L
END
回目录 上页 下页
方法1小结:
以上程序用了8条指令,15个内存字节,执行时间为9个 机器周期。
21 0011BCDH H22H0011BCDL
回目录 上页 下页
程序:
ORG 1000H
MOV R0, #22H ;R0 22H MOV @R0,#0 ; 22H 0 MOV A, 20H ;两个BCD数送A
A
B00C01D01H0BB0CC0D0DHL
XCHD A, @R0 ;BCDL数送22H ORL 22H, #30H ;完成转换
例4-7:设30H单元存放的是一元二次方程ax2+bx+c = 0
根的判别式△= b2 – 4ac的值。
试根据30H单元的值,编写程序,
判断方程根的三种情况。
在31H中存放“0”代表无实根,
存放“1”代表有相同的实根,
存放“2”代表两个不同的实根。
解:△为有符号数,有三种情况,这是一多重分支程序
即小于零,等于零、大于零。
R3
R2
回目录 上页 下页
程序:
ORG 1000H CLR C CLR A SUBB A, R0 MOV R2, A CLR A
SUBB A, R1 MOV R3 , A SJMP $ END
;CY 0
;A 0
;低字节求补
;送R2
;A清零 R3 0000
;高字节求补 0000

第4章 MCS-51单片机汇编语言程序设计

第4章 MCS-51单片机汇编语言程序设计
开始
程序清单:
送转移地址序号
A,R3 ;取序号 A ;序号乘2 DPTR, #JTAB ;32个子程序 首地址送DPTR JMP @A+DPTR ;根据序号转移 JTAB: AJMP ROUT00 ;32个子程序首地址 AJMP ROUT01 … MP: MOV RL MOV AJMP ROUT31
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
【例4-1】
双字节二进制数求补。
程序说明:对R3(高8位)、R2(低8位)中的二进制定 点数取反加1即可得到其补码。
开始
程序清单:
BINPL:MOV A,R2 CPL A ADD A,#01H MOV R2,A MOV A,R3 CPL A ADDC A,#00H MOV R3,A RET ;低位字节取反 ;加1 ;低位字节补码送R2 ;高位字节取反 ;加进位 ;高位字节补码送R3
散转生成正确偏移号
置换指令地址表首址
转入R3指示的程序
AJMP
……
AJMP
第 四 章 MCS-51 单 片 机 汇 编 语 言 程 序 设 计
3.循环程序
包括:循环初始化、循环处理、循环控制
开始 置初值 循环体 循环结束? Y 循环修改 N 循环体 循环结束? N Y 结束 循环修改 结束 开始 置初值
;调用查表子程序 ; 暂存R1中 ;调查表子程序 ;平方和存A中 ;等待
取第一个数→A 调查表子程序 结果存入R1 取下一个数→A 调查表子程序 两数平方相加 存结果
子程序清单:
SQR: INC A ;加RET占的一个字节 MOVC A,@A+PC ;查平方表 RET TAB: DB 0,1,4,9,16 DB 25,36,49,64,81 END

第4章汇编语言程序设计知识

第4章汇编语言程序设计知识

图4-1 分支程序结构
例4-1
JMP_128:MOV RL MOV JMP JMPTAB:AJMP AJMP ┇ AJMP A,R3 A DPTR,#JMPTAB @A+DPTR ROUT00 ROUT01 ┇ ROUT7F
128个子程序首址
二、分支程序

说明:此程序要求128个转移目的地址(ROUT00 ~
三、反汇编

将二进制机器语言程序翻译成汇编语言程序的过程 称反汇编。

汇编和反汇编的过程如图4-3所示。
汇编(汇编程序)
源程序 (汇编语言)
反汇编(汇编程序)
目标码 (机器语言)
图4-3 汇编和反汇编过程
§4.2.3 伪指令

伪指令不是真正的指令,无对应的机器码,在汇编 时不产生目标程序,只是用来对汇编过程进行某种 控制。
格式:字符名称
DATA
表达式
功能:与EQU类似,但有以下差别:
1、EQU定义的字符名必须先定义后使用,而DATA定义的 字符名可以后定义先使用。
ORG START
2000H MOV R0,#21H ;21H→(R0) MOV A,20H ; (20H)→(A) ANL A,#0FH ;A^#0FH→(A),取低位 MOV @R0,A ; (A)→((R0))),低 位置 21H 中 INC R0 ;R0+1→(R0) MOV A,20H ; (20H)→(A) SWAP A, ;A0~3-((A4~7),低位 与高位交换 ANL A,#0FH ;A^#0FH,取高位 MOV @R0,A ; (A)→((R0)),高位 置 22H
序执行程序。

分支程序又分为单分支和多分支结构。 多分支程序是首先把分支程序按序号排列,然后按序号值进 行转移。

微机原理与接口技术(第三版) 龚尚福章 (4)

微机原理与接口技术(第三版)  龚尚福章 (4)
类型属性:变量的类型属性定义该变量所保留的字节数, 如BYTE(DB,1个字节长)、WORD(DW,2个字节长)、DWORD(DD, 4个字节长)、FWORD(DF,6个字节长)、QWORD(DQ,8个字节长)、 TBYTE(DT,10个字节长)。
在同一个程序中,同样的标号或变量的定义只允许出现一 次,否则汇编程序会指示出错。
第4章 汇编语言程序设计
4.2.1 定义符号的伪指令 有时程序中多次出现同一个表达式,为方便起见,可以用
赋值伪操作给表达式赋予一个名字。 1. 等值伪指令EQU 格式: <符号名> EQU <表达式> 功能:给符号名定义一个值,赋予一个符号名、表达式或
助记符。
第4章 汇编语言程序设计
此后,程序中凡需要用到该表达式之处,就可以用表达式 名来代替了。可见,EQU的引入提高了程序的可读性,也使其 更加易于修改。上式中的表达式可以是任何有效的操作数格式, 可以是任何可以求出常数值的表达式,也可以是任何有效的助 记符。举例如下:
第4章 汇编语言程序设计
(3) 符号常数。用符号名来代替的常数就是符号常数,如 COUNT EQU 3或COUNT=3定义后COUNT就是一个符号常数,与数 值常数3等价。
第4章 汇编语言程序设计
2) 表达式
由运算对象和运算符组成的合法式子就是表达式。表达式
分为数值表达式、关系表达式、逻辑表达式和地址表达式等。
类型(TYPE)属性:类型表示该标号所代表的指令的转移范 围,分为NEAR和FAR两种。如果为NEAR型,则标号只能在段内 引用;如果为FAR型,则标号可以在段间引用。
第4章 汇编语言程序设计
(2) 变量。变量在数据段、附加数据段或堆栈段中定义, 后面不跟冒号。它也可以用LABEL或EQU伪操作来定义。变量经 常在操作数字段出现。它也有段、偏移及类型三种属性。

mcs-51第四章答案汇编语言程序设计

mcs-51第四章答案汇编语言程序设计

mcs-51第四章答案汇编语言程序设计第四章汇编语言程序设计1 题若晶振为12MHz,试编制延时2ms和1s子程序。

答:延时2ms:DELY: MOV R7, #10DLY0: MOV R6, #98NOPDLY1: DJNZ R6, DLY1DJNZ R7, DLY0RET延时1s:DELY: MOV R0, #50LP11: MOV R1, #100LP22: MOV R2, #100LP33: DJNZ R2, LP33DJNZ R1, LP22DJNZ R0, LP11RET4 题试求20H和21H单元中16位带符号二进制补码数的绝对值,并送回20H和21H单元,高位在先,低位在后。

答:方法一:先判断符号位,若为0则不作任何处理(因为正数的补码数与原数相同,而0的补码数就是0)。

若符号位为1,则用0减去该数即可。

编程如下:ORG 1000HMOV A, 20HJNB ACC.7, DONECLR CCLR ASUBB A, 21HMOV 21H, ACLR ASUBB A, 20HMOV 20H, ADONE: SJMP $END方法二:可用变反加“1”来完成。

ORG 1000HMOV A, 20HJNB ACC.7, DONECPL AMOV 20H, AMOV A, 21HCPL AMOV 21H, ACLR CMOV A, 21HADD A, #1MOV 21H, AMOV A, 20HADDC A, #0MOV 20H, ADONE: SJMP $END5题试求内部RAM 30~37H单元8个无符号数的算术平均值,结果存入38H单元。

答:方法一:相加后和放在R3:38H中,然后将结果整体右移3位,得数放在38H单元中。

ORG 1000HSTART: MOV R7, #07HMOV R3, #00HMOV A, 30HMOV R0, #31HLOOP: ADD A, @R0JNC NEXTINC R3NEXT: INC R0DJNZ R7, LOOPMOV 38H, AMOV R7, #3LOOP1: CLR CMOV A, R3RRC AMOV R3, AMOV A, 38HRRC AMOV 38H, ADJNZ R7, LOOP1SJMP $END方法二:相加后和放在R3:38H中,然后将R3中的数乘以25,将38H中的数除以23,然后将两个结果相加,放入38H单元中。

第4章 汇编语言程序设计

第4章 汇编语言程序设计

例: 三字节无符号数相加,其中被加数在内部RAM 的50H、51H和52H 单元中;加数在内部RAM的53H、 54H和55H单元中;要求把相加之和存放在50H、 51H和52H单元中,进位存放在位寻址区的00H位中。
内部RAM
50H 51H 52H
高字节 低字节
53H 54H 55H
R1→55H
结 束
常用程序结构:
顺序程序、分支程序、循环程序。
4-3
顺序程序
顺序程序又称简单程序,程序走向只有一条路径。 例:双字节求补程序(设数据在R4R5中): 开 始 CLR C MOV A,R5 ;取低字节 处 理 CPL A ADD A,#01H ;低字节变补 处 理 MOV R5,A MOV A, R4 ;取高字节 处 理 CPL A ADDC A,#00H ;高字节变补 结 束 MOV R4,A
片内 RAM 42H 0 十 41H 0 个 40H 十 个
4 -- 4
分支程序(参见书P49-57)
分支程序就是在程序执行过程中要判 断某些条件,当条件成立后程序转移到不 同的功能处运行。在MCS-51单片机中条件 转移指令都可以用在分支程序中。 (复习、参见书P38---39) (1)测试条件符合转移,如: JZ、JNB …等
汇编的主要任务:
1)确定程序中每条汇编语言指令的指令机器码。 2)确定每条指令在存储器中的存放地址。 3)提供错误信息。 4)提供目标执行文件(*.OBJ/*.HEX)和 列表文件(*.LST)。
一、汇编语言指令类型:
1. 机器指令: 指令系统中的全部指令,每条指令有对应的机器代码。 2. 伪指令: 汇编控制指令,仅提供汇编信息,没有指令代码。
在源程序中只能有一条END指令

第4章. 8086 8088汇编语言程序设计_软件调试技术

第4章. 8086 8088汇编语言程序设计_软件调试技术
27
4.4 软件调试技术
例10:将利用DOS功能2 显示字符a的一段小程序汇编到 2180: 100H开始的内存中。
由于A命令不支持字符方式,当在0102地址后输入指令 MOV DL, ’a’ 后,显示出错信息,然后仍然提示当前汇编地址 2180: 0102,此时可重新输入指令 MOV DL,61,其中61H为a的 ASCII码。
1上海交通大学网络学院2theprincipleapplicationofmicrocomputer微机原理与应用王春香副教授wangcxsjtueducn3主要内容41程序设计语言概述4280868088汇编语言的基本语法4380868088汇编语言程序设计基本方法44软件调试技术章第四章汇编语言程序设计4掌握软件技术不仅应具有很强的抽象能力分析能力与综合能力还应具有较强的调试能力及排错能力
标志寄存器各标志位的显示字符
标志位 溢出位 方向位 中断位 符号位 零值位 辅助进位位 奇偶位 进位位 置位 OV DN EI NG ZR AC PE CY 复位 NV UP DI PL NZ NA PO NC
OF DF IF SF ZF AF PF CF
18
4.4 软件调试技术
例5:-r ;显示CPU内所有寄存器内容和标志位状态
30
4.4 软件调试技术
4.4.1 调试软件
常用的DEBUG命令。 8. 指定文件名命令 格式:N文件名及扩展名 指出即将调入内存或从内存中存盘的文件名。 这条命令要配合L或W命令一起使用。
31
4.4 软件调试技术
4.4.1 调试软件
常用的DEBUG命令。 9. 装入命令 格式1:L起始地址 驱动器号 起始扇区 扇区数
4.4.1 调试软件
常用的DEBUG命令。 10. 写磁盘命令 格式1:W起始地址 驱动器号 起始扇区 扇区数

汇编语言程序设计教程(第二版)习题参考答案

汇编语言程序设计教程(第二版)习题参考答案

汇编语言程序设计教程(第二版)习题参考答案第1章计算机基础知识1.计算机的应用分哪几个方面,请举例说明书中未提到的领域的计算机应用。

科学计算、数据处理、计算机控制、计算机辅助设计、人工智能、企业管理、家用电器、网络应用。

书中未提及的如:远程教育、住宅小区控制、飞行系统控制与管理等。

2.简述计算机的发展过程,请查阅相关资料,列出微机的发展过程。

电子管、晶体管、集成电路、大规模集成电路以IBM为例,微机的发展:4004、8008、8080、8086/8088、80286、80386、80486、Pentium 系列3.计算机的字长是怎么定义的,试举例说明。

计算机能同时处理二进制信息的位宽定义为计算机的字长。

如8086能同时进行16位二进制数据的运算、存储和传输等操作,该机器的字长为16位。

4.汇编语言中的基本数据类型有哪些?数值型数据和非数值型数据。

非数值数据如字符、字符串、逻辑值等。

(1)7BCH=011110111100B=1980D(2)562Q=101110010B=370D(3)90D=01011010B=5AH(4)1110100.111B=164.7Q=74.EH30H~39H 41H~5AH 61H~7AH9.在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值?用相应进制的数值加上进制标记即可。

二进制用B,如10101010B八进制用Q,如437Q。

十进制用D或不用,如54D,或54。

十六进制用H,如27A8H10.完成下列二进制数的加减运算。

(1)10101010 + 11110000 (2)11001100 + 01010100=110011010 =100100000(3)11011010 - 01010010 (4)11101110 - 01001101=10001000 =1010000111.完成下列十六进制数的加减运算。

(1)0FEA9 - 8888=7621H (2)0FFFF - 1234=EDCBH(3)0EAC0 + 0028=EAE8H (4)3ABC + 1678=5134H12.完成下列BCD码的运算。

第4章AT89S51汇编语言程序设计

第4章AT89S51汇编语言程序设计
机上用编辑软件进行源程序编辑,然后生成一个ASCII码文件, 扩展名为 “.ASM”。在微机上运行汇编程序,译成机器码。
机器码通过微机的串口(或并口)传送到用户样机(或在 线仿真器),进行程序的调试和运行。
有时,在分析某些产品的程序的机器代码时,需将机器代 码翻译成汇编语言源程序,称为“反汇编”。
24
5
优点:用汇编语言编写程序效率高,占用存储空间小,运行 速度快,能编写出最优化的程序,
缺点:可读性差,离不开具体的硬件,是面向“硬件”的语 言通用性差。
2.高级语言 不受具体“硬件”的限制,优点:通用性强,直观、易懂、 易学,可读性好。 目前多数的51单片机用户使用C语言(C51)来进行程序设 计,已公认为高级语言中高效简洁而又贴近51单片机硬件的编 程语言。 将C语言向单片机上移植,始于20世纪80年代的中后期。
9
【例4-1】下面是一段程序的四分段书写格式。
标号字段 操作码字段 操作数字段 注释字段
START:MOV A,#00H
;0→A
MOV R1,#10
;10→R1
MOV R2,#00000011B
;03H→R2
LOOP: ADD A,R2
;(A)+(R2)→A
DJNZ R1,LOOP ;R1减1不为零,则跳LOOP处
标号字段 (LABLE)
操作码字段 (OPCODE)
操作数字段 (OPRAND)
注释字段 (COMMENT)
标号字段和操作码字段之间要有冒号“:”分隔; 操作码字段和操作数字段间的分界符是空格; 双操作数之间用逗号相隔; 操作数字段和注释字段之间的分界符用分号“;”。 任何语句都必须有操作码字段,其余各段为任选项。
2.子程序的基本结构

第4章 单片机汇编语言程序设计

第4章 单片机汇编语言程序设计

功能:从标号指定的地址单元开始,将8位二进制 数据按顺序依次存入形成数据表。数据表可以是 一个或多个字节数据、字符串或表达式,各项数 据用“,”分隔,一个数据项占一个字节单元。
ORG 1000H
TAB:DB -2,-4,100,30H,‘A’, ‘C’
用单引号括起来的字符存其ASCII码,负数存其 补码。
第4章 单片机汇编语言程序设计
4.1.2 伪指令
1.设置起始地址伪指令 ORG 格式: [标号:] ORG nn 该指令总是出现在每段源程序或数据块的开始。
汇编时,nn确定了后面第一条指令或数据的地 址,此后的源程序或数据块就依次连续存放在 以后的地址内,直到遇到另一个ORG指令为止。 如:
第4章 单片机汇编语言程序设计
第4章 单片机汇编语言程序设计
第4章 单片机汇编语言程序设计
4.1 汇编语言程序设计的基础知识 4.2 汇编程序设计方法 4.3 综合编程举例
第4章 单片机汇编语言程序设计
4.1 汇编语言程序设计的基础知识
4.1.1 汇编语言的语句格式
MCS-51单片机汇编语言的语句格式表示如下: [标号:] <操作码> [操作数] [;注释]
MOV A, R4 MOV R0, A M1: RET
第4章 单片机汇编语言程序设计
多分支程序,还可根据运算结果或输入数据将程 序转入不同的分支。
在多分支程序中,因为可能的分支会有 N个,若 采用多条 CJNE 指令逐次比较,程序的执行效率 会降低很多,特别是分支较多时更加明显。
一般采用跳转表的方法,通过两次转移来实现多 分支结构。
第4章 单片机汇编语言程序设计
ORG 2500H BR2: MOV R0, #00H MOV A, R1 ACALL COMP ;R0 清零 ;第一个数(R1)送A ; 比较(R1)与(R0)大小

第4章_1数据段定义

第4章_1数据段定义

代码段
4
4.1.2 汇编语言的语句与格式
汇编语言的语句有两种:
指令性语句——由8086指令助记符构成的语句 指示性语句——由伪指令构成的语句
指令性语句的格式为:
标号: 指令助记符 目的操作数,源操作数 ;注释
指示性语句的格式为:
名字 伪指令 操作数1,操作数2,…,操作数n ;注释
注:各部分之间至少要用一个空格作为分隔符。
19
作业:
P193 4.1, 4.2, 4.12, 4.15
20
举例1:显示单个字符A到显示器
code segment assume cs:code start:mov dl,'A' mov ah,2 int 21H mov ah,4cH int 21H code ends end start
21
举例2:显示字符串
名字
data Hello data prog
标号
SEGMENT DB ‘Hello, world!’,0DH,0AH,’$’ ENDS SEGMENT ASSUME CS:prog,DS:data start: MOV AX,data MOV DS,AX LEA DX,hello ;取字符串首地址 MOV AH,9 INT 21H ;显示字符串 MOV AH,4CH INT 21H ;退回DOS prog ENDS END start
则 TYPE VAR = 2 LENGTH VAR = 5 SIZE VAR = 10
13
4.2.1 变量定义伪指令
用于定义变量,即内存单元或数据区。数 据定义伪指令的格式为:
变量名 数据定义伪指令 操作数,操作数,…
常用的数据定义伪指令有如下几种:

第四章 51汇编语言程序设计

第四章 51汇编语言程序设计

DPH, A A, B ;乘积的低8位 @A+DPTR;间接转移 CASE_0 CASE_1
CASE_N
例、设a存放在累加器A中,b存放在寄存器B中,要求
按下式计算Y值,并将结果Y存于累加器A 中,试编写
程序。(同学先做)
a-b Y = a+b (a < 0 ) (a≥0)
解:本题关键是判a是正数,还是负数;由ACC.7便知。
·逻辑运算
包括逻辑或、与、异或和非,分别用符号OR、
AND、XOR和NOT表示,实现的是按位运算; ·特殊运算 包括SHR、SHL、HIGH、LOW、(),分别表示 右移、左移、取高字节、取低字节和优先求值;
·关系运算
关系运算符有EQ、NE、LT、LE、GT和GE,也 不等、小于、小于或等于、大于、大于或等于;
机器语言
·二进制编码的指令 ·74H 34H 24H 45H F5H 09H 74H 12H 34H 23H F5H 08H ·如果不对照指令系统的机器码,很 难看出这段程序要实现什么功能
汇编语言
·使用助记符、符号地址、标号等符
号来编写程序的系统
RES_LOW DATA RES_HIGH DATA MOV ADD MOV MOV ADDC MOV 09H 08H A, #34H A, #45H RES_LOW, A A, #12H A, #23H RES_HIGH, A
要求某程序段多次重复执行,需要采用循环
结构。
循环结构不但使程序简练,而且大大节省存储空间。 循环程序包含四部分: 1、初始化部分 (循环计数器、变量置初值)
第四章 51单片机程序设计
4.1 4.2 4.3 4.4 51单片机程序设计概述 51汇编语言 汇编语言基本程序设计 数制转化程序

第4章-汇编语言程序设计教案

第4章-汇编语言程序设计教案

第四章教学实施计划3课堂教学实施计划第 8 课教学过程设计:复习 0 分钟;授新课 100 分钟讨论 0 分钟;其它 0 分钟授课类型(请打√):理论课√讨论课□实验课□习题课□其它□教学方式(请打√):讲授√讨论□示教□指导□其它□教学手段(请打√):多媒体√模型□实物□挂图□音像□其它□4.1 汇编语言程序设计概述程序实际上是一系列计算机指令的有序集合。

我们把利用计算机的指令系统来合理地编写出解决某个问题的程序的过程,称为程序设计。

程序设计是单片机应用系统设计的重要组成部分,单片机的全部动作都是在程序的控制下进行的。

随着芯片技术的发展,很多标准的或功能型的硬件电路都集成到了芯片中,所以,软件设计在单片机应用系统开发中占的比重越来越大。

一、汇编语言和高级语言汇编语言:用助记符表示的指令称为汇编语言,用汇编语言编写的程序称为汇编语言源程序汇编语言也是面向机器的,它仍是一种低级语言。

汇编语言离不开具体计算机的硬件,与硬件紧密相关。

高级语言:高级语言不受具体“硬件”的限制,具有通用性强,直观、易懂、易学,可读性好等优点。

多数的51单片机用户使用C语言来进行程序设计。

C语言已经成为人们公认的高级语言中高效、简洁而又贴近51单片机硬件的编程语言。

二、汇编语言的特点•助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。

•使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。

•汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。

•汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用。

三、汇编语言的语句格式•指令语句:每一条指令语句在汇编时都产生一个指令代码(也称机器代码),执行该指令代码对应着机器的一种操作。

第4章单片机汇编语言程序设计

第4章单片机汇编语言程序设计
A←X
Y A=0? N A>0? N A←-1 Y N A←X
Y
A=0? N R1←-1
A←1
A>0? Y R1←1 存数
存数
2012-6-5 电气与自动化学院 18
第四章汇编语言程序设计
§2 MCS-51单片机汇编语言设计 2、分支程序设计
程序:
ORG 2000H VAR DATA 40H FUN DATA 41H START:MOV A,VAR JZ SAVE JNB ACC.7,ZHENG MOV A,#0FFH SJMP SAVE ZHENG:MOV A,#01H SAVE: MOV FUN,A SJMP $ END
第四章汇编语言程序设计 第四章汇编语言程序设计 本章重点: §4.1 汇编语言程序设计基础
4.1.3 伪指令
§4.2 MCS-51汇编语言程序设计
4.2.1 顺序结构程序设计 4.2.2分支结构程序设计 4.2.3循环结构程序设计 4.2.4查表程序设计 4.2.5 子程序设计
§习题分析及解答
第四章汇编语言程序设计 4.1.3 伪指令
2012-6-5 电气与自动化学院 9
第四章汇编语言程序设计
§2 MCS-51单片机汇编语言设计 1、顺序结构程序设计
2012-6-5
例4-3:将两个三字节无符号数相加,其中一个加数在内部RAM的 32H、31H和30H单元;另一个加数在内部RAM的35H、34H和33H单 元,要求相加后的和存入32H、31H和30H单元,进位存入位寻址区 的20H单元中 程序: ORG 2000H CLR C MOV @R0,A MOV R0,#32H MOV R1,#35H DEC R0 MOV A,@R0 DEC R1 ADD A,@R1 MOV A,@R0 MOV @R0,A ADDC A,@R1 DEC R0 MOV @R0,A DEC R1 MOV A,@R0 MOV 20H,C ADDC A,@R1 SJMP $ END

第四章 汇编语言程序设计基础

第四章  汇编语言程序设计基础

4.2.2 分支程序的设计方法 ★条件控制 ★逻辑尺控制 ★地址跳转表控制
1. 条件控制——利用比较和条件转移指令实现分支,是最常用的 程序设计方法。
பைடு நூலகம்
例如,求解函数:
练习题2. 编写程序,比较两个字符串STRING1和STRING2所 含字符是否完全相同,若相同则显示“MATCH”,若不同则显示 “NO MATCH”。 答案: datarea segment string1 db ‘asfioa’ ;定义字符串STRING1 string2 db ‘xcviyoaf’ ;定义字符串STRING2 mess1 db ‘MATCH’,’$’ ;定义显示字串“MATCH” mess2 db ‘NO MATCH’,’$’ ;定义显示字串“NO MATCH” datarea ends prognam segment main proc far assume cs:prognam,ds:datarea start: push ds ;将ds:00入栈 sub ax,ax push ax mov ax,datarea ;装填数据段及附加段 mov ds,ax mov es,ax
程序流程图
mov ch,4 rotate: mov cl, 4 rol bx,cl mov al,bl and al,0fh add al,30h ;’0’-’9’ ASCII 30H-39H cmp al,3ah jl printit add al,7h ;’A’-’F’ ASCII 41H-46H printit: mov dl,al mov ah,2 int 21h dec ch jnz rotate
例4.3 将首地址为A的N字数组按照从小到大的次序整序(气 泡算法,多重循环) A dw 32,85,16,15, 8
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


19:13
27
3、修改控制变量

在循环程序中,不许给出循环结束条件。 常见的是计数循环,当循环了一定的次数 后,就停止循环。 在单片机中,一般用一个工作寄存器Rn作 为计数器,对该计数器赋初值作为循环次 数。每循环一次,计数器的值减1,即修改 循环控制变量,当计数器的置件为0时,就 停止循环。
19:13
31
---循环结构实例

例4-6 设89C51单片机使用12MHz晶振(机器 周期T为lµs),试计算延时时间。
ORG 4000H R5, #80H ;1个机器周期
DEYPRG: MOV
LOOP1:
LOOP2:
MOV
DJNZ DJNZ NOP RET
R6, #0FFH ;1个机器周期
R6, LOOP2 R5, LOOP1 ;2个机器周期 ;2个机器周期 ;1个机器周期 ;2个机器周期
19:13 22
---分支结构实例 例4-4 128种分支转移程序。 功能:根据入口条件转移到128个目的地址。 入口:(R3)=转移目的地址的序号00H→7FH。 出口:转移到相应于程序入口。
散转指令 K=0 K=1 ┅ ┅
K=n-1
K=n
转向0分支
转向1分支

转向n-1分支
转向n分支
19:13
19:13 20

---分支结构实例 例4-3 设变量x以补码形式存放在片内RAM的30H单元中, 变量y与x的关系是:
编写程序,根据x的值求y的值,并放回原单元中。
19:13
21
---分支结构实例 程序如下:
START: MOV A, 30H JZ NEXT ;x=0,转移 ANL A, #80H ;保留符号位 JZ ED ;x > 0 ,转移 MOV A, #05H ;x < 0,不转移 ADD A, 30H MOV 30H, A SJMP ED NEXT: MOV 30H, #20H ED: SJMP $
单片机原理与接口技术
第4章
汇编语言程序设计知识
19:13
1
本章教学要求
第4章
汇编语言程序设计知识
1. 了解汇编语言编程的基础知识;
2. 了解汇编语言程序设计的基本步骤和方法;
3. 了解汇编语言的特点:目标程序效率高、占存 储空间少、运行速度快、实时性强等; 4. 掌握89C51汇编语言的几种结构:顺序、分支、 循环、查表及子程序的结构;
14

19:13
2、模块划分的原则

每个模块应具有独立的功能,能产生一个明确的
结果,即单模块的功能高内聚性。

模块之间的控制耦合应尽量简单,数据耦合应尽 量少,即模块间的低耦合性。控制耦合是指模块 进入和退出的条件及方式,数据耦合是指模块间 的信息交换方式、交换量的多少及交换频繁程度。

模块长度适中。20条~100条的范围较合适。
具体要求:初学一定要加注释!
19:13
13
4.1.2
编程的方法和技巧
一、模块化程序设计方法
1、程序功能模块化的优点

单个模块结构的程序功能单一,易于编写、调试和修改。

便于分工,从而可使多个程序员同时进行程序的编写和 调试工作,加快软件研制进度。
程序可读性好,便于功能扩充和版本升级。 对程序的修改可局部进行,其它部分可以保持不变。 对于使用频繁的子程序可以建立子程序库,便于多个模 块调用。
例:MAIN:MOV A,#00H;立即数00H→A
19:13 8
标号:

标号是用户定义的符号地址。 一条指令的标号是该条指令的符号名字,标号的值
是汇编这条指令时指令的地址。

标号由以英文字母开始的1~8个字母或数字组成,
以冒号“:”结尾。

标号可以由赋值伪指令赋值,如果没有赋值,汇编 程序把存放该指令目标码第一字节的存储单元的地 址赋给该标号,所以,标号又叫指令标号。



工作过程?
现有的条件,已知数据,对运算的精度和 速度方面的要求? 设计的硬件结构是否方便编程?
4

19:13
2、确定算法

算法是如何将实际问题转化成程序模块来 处理。
在编程以前,先要对几种不同的算法进行 分析、比较,找出最适宜的算法。

19:13
5
3、画程序流程图

程序流程图是使用各种图形、符号、有向线 段等来说明程序设计过程的一种直观的表示。
5、用累加器传递入口参数或返回参数比较方便,在子程 序中,一般不必把累加器内容压入堆栈。
19:13 16
4.1.3
汇编语言程序的基本结构
一、顺序程序


顺序程序是最简单的程序结构,即顺序结构。 程序按顺序一条一条地执行指令。
19:13
17
---顺序程序实例
例4-1 将片内RAM的20H单元中的压缩BCD 码拆成两个ACSII码存入21H、22H单元。 低4位存在21H单元,高4位存在22H单元。 MOV A, 20H 压缩BCD码与非压缩BCD码的区别: MOV 压缩BCD码的每一位用4位二进制表示,一 B, #10H ;除以10H 个字节表示两位十进制数。例如10010110B表示十 DIV AB 进制数96D; ORL 非压缩BCD码用1个字节表示一位十进制数, B, #30H;低4位BCD码转换为ASCII码 高四位总是0000,低4位的0000~1001表示0~9.例如 MOV 21H, B 00001000B表示十进制数8. ORL A, #30H;高4位BCD码转换为ASCII码 MOV 22H, A
19:13
32
四、 查表程序

----其它应用程序实例
查表程序是一种常用的程序,它广泛使用于LED显示器控 制、打印以及数据补偿、计算、转换等功能程序中,具有 程序简单、执行速度快等优点。查表,就是根据变量x在表 格中查找y,使y=f (x)。 例4-7 试编写程序,将16进制数(0-F)转换成ASCII码。 分析:16进制0~9的ASCII码为30~39H,A~F的ASCII码为 41H~46H,ASCII码表的首地址为ASCTAB。 入口:HEX单元的低四位存放16进制数。 出口:转换后的ASCII码送回HEX单元。
28
19:13
4、循环控制部分

根据循环结束条件,判断是否结束循环。 89C51可采用DJNZ指令来自动修改控制变 量并能结束循环。
19:13
29
置初值 置初值 循环体 循环修改 循环控制

退出循环
未完
循环体
未完
循环控制

退出循环
循环修改
(a)
19:13
(b)
循环组织方式流程图
30
---循环结构实例


例4-5 将内部RAM中起始地址为data的数据串传送到外部RAM 中起始地址为buf的存储区域内,直到发现“$”字符停止传送。 本例结束条件为找到“$”停止传送。程序如下:
MOV R0, #DATA MOV DPTR, #BUF LOOP0: MOV A, @R0 CJNE A, #24H, LOOP1 SJMP LOOP2 LOOP1: MOVX @DPTR, A INC R0 INC DPTR SJMP LOOP0 LOOP2: SJMP $ ;源数据区首地址 ;目的数据区首地址 ;取数据 ;判断是否为$字符 ;是$,转结束 ;不是$,执行传送 ;修改源地址 ;修改目的地址 ;传送下一个数据
11
19:13
(4)常数:可用二进制(B)、十进制、十六进 制(H),若常数以字符开头,前面加0。 (5)$:用来表示程序计数器的当前值。 (6)表达式:汇编时,计算出表达式的值填入目 标码。
19:13
12
注释

注释部分不是汇编语言的功能部分,只是用语增 加程序的可读性。

良好的注释是汇编语言程序编写中的重要组成部 分。
;高8位向左环移1位
19:13
19
二、分支程序

程序分支是通过条件转移指令实现的,即根据条件对程序的 执行进行判断、满足条件则进行程序转移,不满足条件就顺 序执行程序。


分支程序又分为单分支、双分支和多分支结构。
多分支程序是首先把分支程序按序号排列,然后按序号值进 行转移。 在89C51指令系统中,通过条件判断实现单分支程序转移的指 令有:JZ、JNZ、CJNE、DJNZ等。此外还有以位状态作为 条件进行程序分支的指令,如JC、JNC、JB、JNB、JBC等。 使用这些指令可以完成0、1、正、负,以及相等、不相等作 为各种条件判断依据的程序转移。
19:13
9
操作码

操作码是必不可少的。


它用一组字母符号表示指令的操作码。
在89C51中,由89C51的指令助记符组成。
19:13
10
操作数




汇编语言指令可能要求或不要求操作数,所以这一 字段可能有也可能没有。 若有两个操作数,操作数之间用逗号“,”分开。 操作数包括的内容有: (1)工作寄存器:由PSW.3和PSW.4规定的当前工 作寄存器区中的R0~R7。 (2)特殊功能寄存器:21个SFR的名字。 (3)标号名:赋值标号—由汇编指令EQU等赋值 的标号;指令标号—指令标号指示的指令的第一字 节地址是该标号的值。
33


19:13
4.2.4 查表程序
----其它应用程序实例
ORG 0200H HEX EQU 33H HEXASC:MOV A, HEX ANL A, #0FH ADD A, #03H ;变址调整 MOVC A, @A+PC MOV HEX, A RET ASCTAB: DB 30H, 31H, 32H, 33H DB 34H, 35H, 36H, 37H DB 38H, 39H, 41H, 42H DB 43H, 44H, 45H, 46H END 在这个程序中,查表指令MOVC A, @A+PC到表格首地址有 两条指令,占用3个地址空间,故变址调整为加3。
相关文档
最新文档