第4章汇编语言程序设计及知识_第1页
第4章汇编语言程序设计及知识_第2页
第4章汇编语言程序设计及知识_第3页
第4章汇编语言程序设计及知识_第4页
第4章汇编语言程序设计及知识_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

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

文档简介

1、目 录第第1 1章章 微机基础知识微机基础知识第第2 2章章 89C5189C51单片机硬件结构和原理单片机硬件结构和原理第第3 3章章 指令系统指令系统第第4 4章章 汇编语言程序设计知识汇编语言程序设计知识第第5 5章章 中断系统中断系统第第6 6章章 定时器及应用定时器及应用第第7章章 89C51串行口及串行通信技术串行口及串行通信技术第第8章章 单片机小系统及扩展单片机小系统及扩展第第9章章 应用系统配置及接口技术应用系统配置及接口技术第第10章章 系统实用程序系统实用程序第4章 汇编语言程序设计及知识4.1 编程的步骤、方法和技巧编程的步骤、方法和技巧4.2 汇编语言源程序的编辑和汇

2、编汇编语言源程序的编辑和汇编4.1 4.1 编程的步骤、方法和技巧编程的步骤、方法和技巧4.1.1 4.1.1 编程的步骤编程的步骤4.1.2 4.1.2 编程的方法和技巧编程的方法和技巧4.1.3 4.1.3 汇编语言程序的基本结构汇编语言程序的基本结构一、分析问题一、分析问题二、确定算法二、确定算法三、画程序流程图三、画程序流程图四、编写程序四、编写程序p8990流程图各个符号流程图各个符号程序字段程序字段椭圆框椭圆框或桶形框或桶形框:表示程序的开始或结束。矩形框矩形框:表示要进行的工作。:表示要进行的工作。菱形框菱形框:表示要判断的事情,菱形框内:表示要判断的事情,菱形框内的表达式表示要

3、判断的内容。的表达式表示要判断的内容。圆圈圆圈:表示连接点:表示连接点指向线指向线:表示程序的流向:表示程序的流向编写程序 用用89C51汇编语言编写的源程序行(一条汇编语言编写的源程序行(一条语句)包括四个部分,也叫四个字段:语句)包括四个部分,也叫四个字段:标号标号:操作码操作码操作数操作数;注释注释 每个字段之间要用分隔符分隔,而每个字段内部每个字段之间要用分隔符分隔,而每个字段内部不能使用分隔符。可以用作分隔符的符号:空格不能使用分隔符。可以用作分隔符的符号:空格“ ”、冒号、冒号“:”、逗号、逗号“,”、分号、分号“;”等。等。例:例:LOOP:MOV A,#00H;立即数;立即数0

4、0HA跳过跳过标号 标号是用户定义的符号地址。标号是用户定义的符号地址。 一条指令的标号是该条指令的符号名字,标号的值是一条指令的标号是该条指令的符号名字,标号的值是汇编这条指令时指令的地址。汇编这条指令时指令的地址。 标号由以英文字母开始的标号由以英文字母开始的18个字母或数字组成,以个字母或数字组成,以冒号冒号“:”结尾。结尾。 标号可以由赋值伪指令赋值,如果没有赋值,汇编程标号可以由赋值伪指令赋值,如果没有赋值,汇编程序把存放该指令目标码第一字节的存储单元的地址赋序把存放该指令目标码第一字节的存储单元的地址赋给该标号,所以,标号又叫指令标号。给该标号,所以,标号又叫指令标号。操作码 操作

5、码是必不可少的。操作码是必不可少的。 它用一组字母符号表示指令的操作码。在它用一组字母符号表示指令的操作码。在89C51中,由中,由89C51的指令助记符组成。的指令助记符组成。操作数 汇编语言指令可能要求或不要求操作数,所以汇编语言指令可能要求或不要求操作数,所以这一字段可能有也可能没有。这一字段可能有也可能没有。 若有两个操作数,操作数之间用逗号若有两个操作数,操作数之间用逗号“,”分分开。开。 操作数包括的内容有:操作数包括的内容有:(1)工作寄存器:由)工作寄存器:由PSW.3和和PSW.4规定的当前工作规定的当前工作寄存器区中的寄存器区中的R0R7。(2)特殊功能寄存器:)特殊功能寄

6、存器:21个个SFR的名字。的名字。(3)标号名:赋值标号)标号名:赋值标号由汇编指令由汇编指令EQU等赋值的标等赋值的标号;指令标号号;指令标号指令标号指示的指令的第一字节地址指令标号指示的指令的第一字节地址是该标号的值。是该标号的值。(4)常数:可用二进制()常数:可用二进制(B)、十进制、十六进制)、十进制、十六进制(H),若常数以字符开头,前面加),若常数以字符开头,前面加0。(5)$:用来表示程序计数器的当前值。:用来表示程序计数器的当前值。(6)表达式:汇编时,计算出表达式的值填入目标码。)表达式:汇编时,计算出表达式的值填入目标码。注释 注释部分不是汇编语言的功能部分,只是注释部

7、分不是汇编语言的功能部分,只是用语增加程序的可读性。用语增加程序的可读性。 良好的注释是汇编语言程序编写中的重要良好的注释是汇编语言程序编写中的重要组成部分。组成部分。4.1 4.1 编程的步骤、方法和技巧编程的步骤、方法和技巧4.1.1 4.1.1 编程的步骤编程的步骤4.1.2 4.1.2 编程的方法和技巧编程的方法和技巧4.1.3 4.1.3 汇编语言程序的基本结构汇编语言程序的基本结构一、模块化方法一、模块化方法二、编程技巧二、编程技巧一、模块化的程序设计方法1、程序功能模块化的优点、程序功能模块化的优点2、划分模块的原则、划分模块的原则1、程序功能模块化的优点 单个模块结构的程序功能

8、单一,易于编写、调试和修单个模块结构的程序功能单一,易于编写、调试和修改。改。 便于分工,从而可使多个程序员同时进行程序的编写便于分工,从而可使多个程序员同时进行程序的编写和调试工作,加快软件研制进度。和调试工作,加快软件研制进度。 程序可读性好,便于功能扩充和版本升级。程序可读性好,便于功能扩充和版本升级。 对程序的修改可局部进行,其它部分可以保持不变。对程序的修改可局部进行,其它部分可以保持不变。 对于使用频繁的子程序可以建立子程序库,便于多个对于使用频繁的子程序可以建立子程序库,便于多个模块调用。模块调用。2、划分模块的原则 每个模块应具有独立的功能,能产生一个明确的结果,每个模块应具有

9、独立的功能,能产生一个明确的结果,即单模块的功能高内聚性。即单模块的功能高内聚性。 模块之间的控制耦合应尽量简单,数据耦合应尽量少,模块之间的控制耦合应尽量简单,数据耦合应尽量少,即模块间的低耦合性。控制耦合是指模块进入和退出即模块间的低耦合性。控制耦合是指模块进入和退出的条件及方式,数据耦合是指模块间的信息交换方式、的条件及方式,数据耦合是指模块间的信息交换方式、交换量的多少及交换频繁程度。交换量的多少及交换频繁程度。 模块长度适中。模块长度适中。20条条100条的范围较合适。条的范围较合适。二、编程技巧1、尽量采用循环结构和子程序。、尽量采用循环结构和子程序。2、尽量少用无条件转移指令。、

10、尽量少用无条件转移指令。3、对于通用的子程序,考虑到其通用性,除了用于存放子程、对于通用的子程序,考虑到其通用性,除了用于存放子程序入口参数的寄存器外,子程序中用到的其他寄存器的内容序入口参数的寄存器外,子程序中用到的其他寄存器的内容应压入堆栈(返回前再弹出),即保护现场。应压入堆栈(返回前再弹出),即保护现场。4、在中断处理程序中,除了要保护处理程序中用到的寄存器、在中断处理程序中,除了要保护处理程序中用到的寄存器外,还要保护标志寄存器。外,还要保护标志寄存器。5、用累加器传递入口参数或返回参数比较方便,在子程序中,、用累加器传递入口参数或返回参数比较方便,在子程序中,一般不必把累加器内容压

11、入堆栈。一般不必把累加器内容压入堆栈。4.1.1 4.1.1 编程的步骤编程的步骤4.1.2 4.1.2 编程的方法和技巧编程的方法和技巧4.1.3 4.1.3 汇编语言程序的基本结构汇编语言程序的基本结构4.1 4.1 编程的步骤、方法和技巧编程的步骤、方法和技巧( )顺序程序顺序程序分支程序分支程序循环程序循环程序第4章 汇编语言程序设计及知识4.1 编程的步骤、方法和技巧编程的步骤、方法和技巧4.2 汇编语言源程序的编辑和汇编汇编语言源程序的编辑和汇编4.2 4.2 汇编语言源程序的编辑和汇编汇编语言源程序的编辑和汇编4.2.1 4.2.1 源程序编辑源程序编辑4.2.2 4.2.2 源

12、程序的汇编源程序的汇编4.2.3 4.2.3 伪指令伪指令4.2.1 4.2.1 源程序编辑源程序编辑 在微型计算机上,借助编辑软件,编在微型计算机上,借助编辑软件,编写或修改汇编语言源程序。如行编辑写或修改汇编语言源程序。如行编辑或屏幕编辑软件。或屏幕编辑软件。4.2.2 4.2.2 源程序的汇编源程序的汇编 汇编:将汇编语言源程序转换为机器码表汇编:将汇编语言源程序转换为机器码表示的目标程序的过程。对单片机有:示的目标程序的过程。对单片机有: 一、手工汇编一、手工汇编 二、机器汇编二、机器汇编 三、反汇编三、反汇编一、手工汇编 通过手工方式查指令编码表,逐个把助记符指令通过手工方式查指令编

13、码表,逐个把助记符指令“翻译翻译”成机器码,然后把得到的机器码程序键成机器码,然后把得到的机器码程序键入单片机,进行调试和运行。入单片机,进行调试和运行。 手工汇编的缺点:手工汇编的缺点: 1、偏移量的计算容易出错、偏移量的计算容易出错 2、程序的修改会引起后面指令地址的变化,转、程序的修改会引起后面指令地址的变化,转移指令的偏移量也要重新计算。移指令的偏移量也要重新计算。二、机器汇编 机器汇编是在计算机上使用交叉汇编程序进行源机器汇编是在计算机上使用交叉汇编程序进行源程序的汇编。汇编工作由机器自动完成,最后得程序的汇编。汇编工作由机器自动完成,最后得到以机器码表示的目标程序。到以机器码表示的

14、目标程序。三、反汇编将二进制机器语言程序翻译成汇编语言程序的过程称反汇编。将二进制机器语言程序翻译成汇编语言程序的过程称反汇编。汇编和反汇编的过程如图汇编和反汇编的过程如图4-3所示。所示。源程序(汇编语言)目标码(机器语言)汇编(汇编程序)反汇编(汇编程序)图图4-3 汇编和反汇编过程汇编和反汇编过程4.2.3 4.2.3 伪指令伪指令 伪指令不是真正的指令,无对应的机器伪指令不是真正的指令,无对应的机器码,在汇编时不产生目标程序,只是用码,在汇编时不产生目标程序,只是用来对汇编过程进行某种控制。来对汇编过程进行某种控制。 介绍介绍89C51的的8个伪指令:个伪指令: ORG / END /

15、 EQU / DATA / DB DW / DS / BITORG 汇编起始命令 格式:格式:ORG 16位地址位地址 功能:规定该伪指令后面程序的汇编地址,即功能:规定该伪指令后面程序的汇编地址,即汇编后生成目标程序存放的起始地址。例如:汇编后生成目标程序存放的起始地址。例如: ORG 2000HSTART:MOV A,#64H 规定了规定了START的地址是的地址是2000H,又规定了汇,又规定了汇编后的第一条指令码从编后的第一条指令码从2000H开始存放。开始存放。END 汇编结束指令 格式:格式:END 功能:通知汇编程序结束汇编。在功能:通知汇编程序结束汇编。在END之之后所有的汇编

16、指令均不予以处理。后所有的汇编指令均不予以处理。EQU 赋值命令 格式:字符名称格式:字符名称 EQU 项(数或汇编符号)项(数或汇编符号) 功能:把功能:把“项项”赋给赋给“字符名称字符名称”。 注意:字符名称不等于标号(其后没有冒注意:字符名称不等于标号(其后没有冒号);其中的项,可以是数,也可以是汇编号);其中的项,可以是数,也可以是汇编符号。符号。EQU赋值过的符号名可以用作数据、赋值过的符号名可以用作数据、代码地址、位地址或一个立即数。可以是代码地址、位地址或一个立即数。可以是8位位的,也可以是的,也可以是16位的。位的。EQU 赋值命令例例1: AA EQU R1 MOV A,AA

17、;AA代表工作寄存器代表工作寄存器R1例例2: A10 EQU 10 DELY EQU 07EBH MOV A,A10 ;A10作为片内的一个直接地址作为片内的一个直接地址 LCALL DELY ;DELY作为一个作为一个16位子程序的入口地址位子程序的入口地址DATA 数据地址赋值命令 格式:字符名称格式:字符名称 DATA 表达式表达式 功能:与功能:与EQU类似,但有以下差别:类似,但有以下差别:1、EQU定义的字符名必须先定义后使用,而定义的字符名必须先定义后使用,而DATA定义的字符名可以后定义先使用。定义的字符名可以后定义先使用。2、用、用EQU伪指令可以把一个汇编符号赋给一个伪指

18、令可以把一个汇编符号赋给一个名字,而名字,而DATA只能把数据赋给字符名。只能把数据赋给字符名。3、DATA语句可以把一个表达式的值赋给字符名语句可以把一个表达式的值赋给字符名称,其中的表达式应是可求值的。称,其中的表达式应是可求值的。DB 定义字节命令 格式:格式:DB(项或项表)(项或项表) 功能:通知汇编程序从当前功能:通知汇编程序从当前ROM地址地址开始,保留一个字或字节串的存储单元,开始,保留一个字或字节串的存储单元,并存入并存入DB后的数据。后的数据。 注意:项或项表可以是一个字节,用逗注意:项或项表可以是一个字节,用逗号隔开的字节串或括在单引号中的号隔开的字节串或括在单引号中的A

19、SCII字符串。字符串。 例如:例如:ORG 2000H DB 0A3HLIST: DB 26H,03H STR: DB ABC 经汇编后(经汇编后(2000H)=A3H, (2001H)=26H, (2002H)=03H, (2003H)=41H, (2004H)=42H, (2005H)=43H,DW 定义字命令 格式:格式:DW 16位数据项或项表位数据项或项表 功能:把功能:把DW后的后的16位数据项或项位数据项或项表从当前地址连续存放。每项数表从当前地址连续存放。每项数值为值为16位二进制数,高位二进制数,高8位先放,位先放,低低8位后存放。位后存放。DW用于定义一个用于定义一个地址

20、表。地址表。 例如:例如: ORG 1500HTABLE:DW 7234H,8AH,10H 经汇编后(经汇编后(1500H)=72H, (1501H)=34H, (1502H)=00H, (1503H)=8AH, (1504H)=00H, (1505H)=10H,DS 定义存储空间命令 格式:格式:DS 表达式表达式 功能:在汇编时,从指定地址开功能:在汇编时,从指定地址开始保留始保留DS之后表达式的值所规之后表达式的值所规定的存储单元以备后用。定的存储单元以备后用。 例如:例如:ORG 1000HDS 08HDB 30H,8AH汇编后,从汇编后,从1000H保留保留8个单元,个单元,然后从然

21、后从1008H按按DB命令给内存命令给内存赋值,即(赋值,即(1008H)=30H (1009H)=8AHBIT 位地址符号命令 格式:字符名格式:字符名 BIT 位地址位地址 功能:把功能:把BIT后的位地址值赋给字符名。其中字符后的位地址值赋给字符名。其中字符名不是标号,其后没有冒号,但字符名是必须的。名不是标号,其后没有冒号,但字符名是必须的。例如:例如:A1 BIT P1.0A2 BIT 02H 汇编后,汇编后,P1口第口第0位的位地址位的位地址90H就赋给了就赋给了A1,而而A2的值则为的值则为02H。4.2.3 4.2.3 伪指令伪指令 伪指令不是真正的指令,无对应的机器伪指令不是

22、真正的指令,无对应的机器码,在汇编时不产生目标程序,只是用码,在汇编时不产生目标程序,只是用来对汇编过程进行某种控制。来对汇编过程进行某种控制。 89C51有有8个伪指令:个伪指令: ORG / END / EQU / DATA / DB DW / DS / BITP83 EX35 ORGORG1000H1000HTAB1 EQU 1234HTAB1 EQU 1234HTAB2 EQU 3000HTAB2 EQU 3000H DB START DB START DW TAB1,TAB2,70H DW TAB1,TAB2,70H4.1.1 4.1.1 编程的步骤编程的步骤4.1.2 4.1.2

23、编程的方法和技巧编程的方法和技巧4.1.3 4.1.3 汇编语言程序的基本结构汇编语言程序的基本结构4.1 4.1 编程的步骤、方法和技巧编程的步骤、方法和技巧( )P88P954.1.3 汇编语言程序的基本结构汇编语言程序的基本结构一、顺序程序一、顺序程序二、分支程序二、分支程序三、循环程序三、循环程序一、顺序程序 顺序程序是最简单的程序结构,即顺顺序程序是最简单的程序结构,即顺序结构。序结构。 程序按顺序一条一条地执行指令程序按顺序一条一条地执行指令。例4-4:16位数求补。设16位二进制数在R1R0中,求补结果存于R3R2中。(P89)解:解:MOVMOVA A,R0R0CPLCPLA

24、AADDADDA A,#01H#01HMOVMOVR2R2,A AMOVMOVA A,R1R1CPLCPLA AADDC ADDC A A,#00H#00HMOV MOV R3R3,A ASJMPSJMP $ $例:多字节求补例:多字节求补: :对(对(20H 21H 22H20H 21H 22H)中的数求补,并将)中的数求补,并将结果仍放回(结果仍放回(20H 21H 22H20H 21H 22H)中。)中。题意题意: : 注意(注意(20H 21H 22H20H 21H 22H)中是一个数)中是一个数思路思路: :从低字节向高字节逐字节操作从低字节向高字节逐字节操作, ,最低最低字节取反加

25、字节取反加1,1,其余字节取反加进位。其余字节取反加进位。MOVMOV A A,22H 22H ;从最低字节开始;从最低字节开始CPLCPL A AADDADD A A,#1 #1 ;最低字节取反加;最低字节取反加1 1,并影响,并影响C CMOVMOV 22H22H,A AMOVMOV A A,21H21HCPLCPL A AADDCADDC A A,#0#0;取反加进位位;取反加进位位C CMOVMOV 21H21H,A AMOVMOV A A,20H 20H CPLCPL A AADDCADDC A A,#0#0;取反加进位位;取反加进位位C CMOVMOV 20H20H,A A 例4-

26、1 :双字节加减运算(P89)(21H21H,20H20H)= =(21H21H,20H20H)+ +(31H31H,30H30H)(21H21H,20H20H)= =(21H21H,20H20H)- -(31H31H,30H30H)(42H,41H,40H)=(22H,21H,20H)+(32H,31H,30H)(42H,41H,40H)=(22H,21H,20H)+(32H,31H,30H)要求:多字节加减求补要求:多字节加减求补例4-3 :拆字。将片内RAM 20H单元的内容拆成两段,每段四位。并将它们分别存入21H与22H单元中。(p89)理解题意理解题意用最简单的做法用最简单的做法例

27、4-2 :拆字。将片内RAM 20H单元的内容拆成两段,每段四位。并将它们分别存入21H与22H单元中。书上的程序如下:解:解: ORG ORG 2000H2000HSTARTSTART:MOVMOVR0R0,#21H #21H ;21HR021HR0MOVMOVA A,20H 20H ;(;(20H20H)A AANLANLA A,#0FH #0FH ;A#0FHAA#0FHAMOVMOVR0R0,A A ;(;(A A)(R0R0)INCINCR0R0 ;R0+1(R0R0+1(R0MOVMOVA A,20H 20H ;(;(20H20H)A ASWAPSWAP A A, ;A A0 03

28、 3 AA4 47 7ANLANLA A,#0FH #0FH ;A#0FHAA#0FHAMOVMOVR0R0,A A ;(;(A A)(R0R0)SJMPSJMP $ $1 1、简单做法、简单做法2 2、拆字拼字、拆字拼字汇编语言程序设计汇编语言程序设计顺序程序设计要求:顺序程序设计要求:1、基本传送、基本传送(mov, movx, movc, push, pop, xch,swap) 读口线电平并运算后输出读口线电平并运算后输出2、简单运算、简单运算(1)23字节加减,求补。字节加减,求补。(例例)(2)对某些位清零,置)对某些位清零,置1,取反的运算。,取反的运算。(3)位操作运算)位操作

29、运算汇编语言程序设计汇编语言程序设计顺序程序设计要求:顺序程序设计要求:3、转换、转换(2进制数,进制数,BCD, PBCD, ASCII转换转换)(1)BCD与与PBCD互换互换(字节与半字节互换字节与半字节互换)例4-2拆字例4-2 :拆字。将片内RAM 20H单元的内容拆成两段,每段四位。并将它们分别存入21H与22H单元中。反例:将片内RAM 21H与22H单元中的低4位内容合并成一个字节并存入20H单元。汇编语言程序设计汇编语言程序设计顺序程序设计要求:顺序程序设计要求:3、转换、转换(2进制数,进制数,BCD, PBCD, ASCII转换转换)(1)BCD与与PBCD互换互换(字节

30、与半字节互换字节与半字节互换)(2)非压缩)非压缩BCD码与码与ASCII码互换码互换例:R1中存有一个BCD码,编一子程序将其转换为ASCII码,存入片外RAM1000H单元中去。(直接转换) 解:解:ORG ORG 0100H0100HBAS1:BAS1:MOV MOV A A,R1R1ADDADDA A,30H30HMOVMOVDPTRDPTR,#1000H#1000HMOVXMOVX DPTRDPTR,A ARETRET汇编语言程序设计汇编语言程序设计顺序程序设计要求:顺序程序设计要求:3、转换、转换(2进制数,进制数,BCD, PBCD, ASCII转换转换)(1)BCD与与PBCD

31、互换互换(字节与半字节互换字节与半字节互换)(2)非压缩)非压缩BCD码与码与ASCII码互换码互换(3)PBCD码与码与ASCII码互换(先仅理解题意)码互换(先仅理解题意)汇编语言程序设计汇编语言程序设计顺序程序设计要求:顺序程序设计要求:3、转换、转换(2进制数,进制数,BCD, PBCD, ASCII转换转换)(1)BCD与与PBCD互换互换(字节与半字节互换字节与半字节互换)(2)非压缩)非压缩BCD码与码与ASCII码互换码互换(3)PBCD码与码与ASCII码互换(先仅理解题意)码互换(先仅理解题意)(4)HEX码转换为码转换为ASCII码码1616进制数转进制数转ASCIIAS

32、CII码码(1)(1)A A是是1616进制数进制数(0009,0A0F)(0009,0A0F),转换后的,转换后的A A是是其其ASCIIASCII码码SUB3: ANL A,#0FHSUB3: ANL A,#0FH MOV DPTR,#TAB1 MOV DPTR,#TAB1 MOVC A,A+DPTR MOVC A,A+DPTR TAB1: TAB1: DB 30H,31H,32H,33H,34H,35H DB 30H,31H,32H,33H,34H,35H DB 36H,37H,38H,39H,41H,42H DB 36H,37H,38H,39H,41H,42H DB 43H,44H,4

33、5H,46H DB 43H,44H,45H,46H例:例:1616进制数转进制数转ASCIIASCII码码(2)(2)SB4: ANL A,#0FHSB4: ANL A,#0FH ADD A,#30H ADD A,#30H CJNE A,#3AH,SB5 CJNE A,#3AH,SB5SB5: JC SB6 SB5: JC SB6 ADD A,#7 ADD A,#7 SB6: SJMP $ ;SB6: SJMP $ ;分析分析汇编语言程序设计汇编语言程序设计顺序程序设计要求:顺序程序设计要求:3、转换、转换(2进制数,进制数,BCD, PBCD, ASCII转换转换)(1)BCD与与PBCD互

34、换互换(字节与半字节互换字节与半字节互换)(2)非压缩)非压缩BCD码与码与ASCII码互换码互换(3)PBCD码与码与ASCII码互换(先仅理解题意)码互换(先仅理解题意)(4)HEX码转换为码转换为ASCII码码(5)2进制数与进制数与PBCD码转换码转换例例: (22h)b : (22h)b (20h,21h)bcd20h,21h)bcd 22H20H21H二进制数二进制数Pbcd百百Pbcd十个十个89H01H37H弄清题意弄清题意: :(22h) (22h) b b (20h,21h)20h,21h)pbcdpbcd弄清题意弄清题意: : 思路思路: (20h): (20h)放百位,

35、可以用放百位,可以用(22h)/100(22h)/100取整取整(21h) (21h) 放十位和个位,对放十位和个位,对A=(22h)mod100A=(22h)mod100,再,再处理:处理:A/10A/10得到得数为得到得数为1010位,余数为个位。位,余数为个位。1010位变到高位变到高4 4位再与个位相加位再与个位相加例例: (22h) : (22h) b b (20h,21h) (20h,21h)bcdbcdMOV A,22HMOVB,#100DIVABMOV20H,AMOVA,BMOVB,#10DIVABSWAPAORLA,BMOV21H,A设数分析设数分析A=(22H)=218A=

36、(22H)=218B=100B=100A=2, B=18A=2, B=18(20H)=02H(20H)=02HA=18=12hA=18=12hb=10b=10A=1,B=8A=1,B=8A=10hA=10hA=18hA=18h(21H)=18h(21H)=18h 例4-5思路(看P95图) BCD - 二进制数 21H( 百位) (21H,20H) 20H(十位个位)跳过跳过补充补充: : 非符号数的乘除运算原理非符号数的乘除运算原理乘法运算一般思路乘法运算一般思路乘法编程思路乘法编程思路除法思路除法思路 竖式乘法一般思路竖式乘法一般思路 : :注意按权进位注意按权进位 10101B 98H

37、10101B 98H * * 101B 101B * * A6H A6H 3 3 10101 390 ;48=30h,54=36h 10101 390 ;48=30h,54=36h 5 5 10101 10101 5F0 5F0 ;80=50h,90=5AH;80=50h,90=5AH 1 1 1 1 1 1 1101001B 6290H 1101001B 6290H 15H * 5 1 69h 编程乘法思路编程乘法思路:(:(如如P94 P94 例例4-2)4-2)已知已知98H98H* *0A6H=6290H, 0F4H0A6H=6290H, 0F4H* *0A6H=9E38H0A6H=9

38、E38H求求 98F4H98F4H* *0A6H0A6H98F4H98F4H* *0A6H=(9800H+0F4H)0A6H=(9800H+0F4H)* *0A6H0A6H= 98H= 98H* *100H100H* *0A6H + 0F4H0A6H + 0F4H* *0A6H0A6H= 629000H+9E38H= 629000H+9E38H= 632E38H= 632E38H非符号数的乘除运算非符号数的乘除运算已知乘法指令已知乘法指令 MUL AB MUL AB 为:为:BA = ABA = A* *B (B (结果结果B B中放高中放高8 8位位,A,A放低放低8 8位位) )画出程序框

39、图,计算(画出程序框图,计算(31H,30H31H,30H)* *(40H),(40H),将将结果存入结果存入(52H,51H,50H)(52H,51H,50H)中。中。(40H)(40H)送送A, (30H)A, (30H)送送B BMUL ABMUL ABA A送送(50H), B(50H), B送送(51H)(51H)(40H)(40H)送送A, (31H)A, (31H)送送B BMUL AB MUL AB A=A+(51H)A=A+(51H)A A送送(51H)(51H)B B送送(52H)(52H)A=A+(51H)A=A+(51H)A A送送(51H)(51H)A=B+A=B+进

40、位位进位位A A送送(52H)(52H)分析分析 P94 例例4-2非符号数非符号数 多字节的乘法运算多字节的乘法运算计算计算( (R7R6R7R6) )* *( (R5R4R5R4) ), ,将结果存入将结果存入(R0+3,(R0+3,R0)R0)中。中。( (R7R6R7R6) )* *( (R5R4R5R4) )= =( (R7R7* *2 28 8+R6+R6) )* *( (R5R5* *2 28 8+R4+R4) )= =( (R7R7* *R5R5) )* *2 21616+ +( (R6R6* *R5R5) )* *2 28 8+ +( (R7R7* *R4R4) )* *2

41、28 8+ +( (R6R6* *R4R4) )(R0+1) (R0)(R0+1) (R0)(R0+2) (R0+1)(R0+2) (R0+1)(R0+3) (R0+2)(R0+3) (R0+2)1. 从低字节向高字节逐渐运算从低字节向高字节逐渐运算2. 低字节直接放入低字节直接放入,高字节要在结果中加入高字节要在结果中加入3. 在结果中加入时要注意有无进位在结果中加入时要注意有无进位计算计算(R7R6)(R7R6)* *(R5R4),(R5R4),将结果存入将结果存入(R0+3,R0)(R0+3,R0)中。中。(R7R6)(R7R6)* *(R5R4)=(R7(R5R4)=(R7* *2 2

42、8 8+R6)+R6)* *(R5(R5* *2 28 8+R4)+R4)=(R7=(R7* *R5)R5)* *2 21616+(R6+(R6* *R5)R5)* *2 28 8+(R7+(R7* *R4)R4)* *2 28 8+(R6+(R6* *R4)R4)(R0)(R0)(R0+1)(R0+1)(R0+2)(R0+2)(R0+3)(R0+3)1. R61. R6* *R4R4MOV2. R72. R7* *R4R4ADDADDC,#03. R63. R6* *R5R5ADDADDC4. R74. R7* *R5R5CADDADDCR1R1R2R2R3R3C?(3 3)非符号数的乘除运

43、算)非符号数的乘除运算 000111100 除法思路:除法思路:101 100101101 将被除数与除数移位将被除数与除数移位 - 101 对齐对齐 1000 试着用被除数减除数试着用被除数减除数 - 101 够减,减去,商上够减,减去,商上1 1 0111 不够减,商上不够减,商上0 0 - 101 下一个移位下一个移位 101 移位全部完成则除法做完移位全部完成则除法做完 - 101 得到商和余数得到商和余数 001 演示演示301/5顺序程序设计要求:顺序程序设计要求:1、基本传送、基本传送 (mov, movx, movc, push, pop, xch,swap)2、简单运算、简单

44、运算(1)23字节加减,求补。字节加减,求补。(例例)(2)对某些位清零,置)对某些位清零,置1,取反的运算。,取反的运算。(3)位操作运算)位操作运算3、转换、转换(2进制数,进制数,BCD, PBCD, ASCII转换转换)(1)BCD与与PBCD互换互换(字节与半字节互换字节与半字节互换)(2)非压缩)非压缩BCD码与码与ASCII码互换码互换(3)PBCD码与码与ASCII码互换(先仅理解题意)码互换(先仅理解题意)(4)HEX码转换为码转换为ASCII码码(5)2进制数与进制数与PBCD码转换码转换P85 ex:18、19、20、28、2918. 编程实现把内部RAM R0R7的内容

45、传递到20H27H单元。19. 试编写程序,将内部RAM的20H、21H和22H 3个连续单元的内容依次存入2FH、2EH和2DH中。20. 编写程序,进行两个16位数的减法: 6F5DH-13B4H,结果存入内部RAM的30H和31H单元,30H存储低8位。28. 已知R3和R4中存有一个16位的二进制数,高位在R3中,低位在R4中。请编程将其求补,并存回原处。29. 已知30H和31H中存有一个16位的二进制数,高位在前,低位在后。请编程将它们乘以2,再存回原单元中。作业 P85 20、28、29二、分支程序 程序分支是通过条件转移指令实现的,程序分支是通过条件转移指令实现的,即根据条件对

46、程序的执行进行判断、满即根据条件对程序的执行进行判断、满足条件则进行程序转移,不满足条件就足条件则进行程序转移,不满足条件就顺序执行程序。顺序执行程序。 分支程序又分为单分支和多分支分支程序又分为单分支和多分支结构。结构。 多分支程序是首先把分支程序按多分支程序是首先把分支程序按序号排列,然后按序号值进行转序号排列,然后按序号值进行转移。移。在在R3R3中存有按键值中存有按键值, , 设计设计程序分别转向不同的地址程序分别转向不同的地址散转程序散转程序JMP A+DPTR例例4-6: 128种分支转移程序。种分支转移程序。功能:根据入口条件转移到功能:根据入口条件转移到128个目的地址。个目的

47、地址。入口:(入口:(R3)=转移目的地址的序号转移目的地址的序号00H7FH。出口:转移到相应子程序入口。出口:转移到相应子程序入口。128个程序首址JMP_128:MOV A,R3 RL A MOV DPTR,#JMPTAB JMP A+DPTRJMPTAB:AJMP ROUT00 AJMP ROUT01 AJMP ROUT7F128个程序首址JMP_128:MOV A,R3 RL A MOV DPTR,#JMPTAB JMP A+DPTRJMPTAB:AJMP ROUT00 AJMP ROUT01 AJMP ROUT7FADD A,R3此程序要求此程序要求128个转移地址(个转移地址(R

48、OUT00 ROUT7FH)必须驻留在与指令必须驻留在与指令AJMP相同的一个相同的一个2KB存储区内。存储区内。RL指令对变址部分乘以指令对变址部分乘以2,因每条,因每条AJMP指令占两字节。指令占两字节。LJMP ROUT00LJMP ROUT01 LJMP ROUT7FP89P89例例4-34-3双字节求补程序双字节求补程序不推荐按照书上这样做不推荐按照书上这样做分支程序的关键是根据条件实现不同的转向分支程序的关键是根据条件实现不同的转向, ,常常用的条件判断语句用的条件判断语句: :是否相等的判断是否相等的判断: : CJNECJNE A,#DATA, REL A,#DATA, REL

49、 相等相等: : 顺序执行顺序执行, C=0, C=0 大于:到大于:到RELREL执行执行, C=0, C=0 小于:到小于:到RELREL执行执行, C=1; , C=1; JC,JNCJC,JNC奇数偶数奇数偶数, ,正数负数的判断正数负数的判断, ,JB,JNBJB,JNB,ACC.X,P,ACC.X,P 奇数奇数 ACC.0=1ACC.0=1, 偶数偶数 ACC.0=0ACC.0=0 正数正数 ACC.7=0ACC.7=0, 负数负数 ACC.7=1ACC.7=1 0 0判断判断: : JZ, JNZJZ, JNZ分支程序分支程序请用程序设计请用程序设计| | |这个函数关系,符号数

50、这个函数关系,符号数放在内,放在内。放在内,放在内。解:我们知道符号数的最高位表示符号,解:我们知道符号数的最高位表示符号,0 0为正,为正,1 1为负,正数和负数互为求补关系。因此程序只需根为负,正数和负数互为求补关系。因此程序只需根据符号位来决定是否对数求补即可。据符号位来决定是否对数求补即可。X X EQU EQU20H20HY Y EQU EQU21H21H MOV A ,X MOV A ,X ;X X为正数为正数 CPL A CPL A ;X X为负数为负数 INC AINC AAAA: MOV Y ,AAAA: MOV Y ,A SJMP $ SJMP $P89 例例4-3改改求双

51、字节补码数的绝对值程序:求双字节补码数的绝对值程序:(31H 30H)=|(21H 20H) |P91例例 4-5(23H)=Max(22H),(21h) MOV A , 21H CJNE A,22H,LP1 SJMP LP2LP1: JC LP2 MOV 23H,A SJMP LP3LP2: MOV 23h, 22HLP3: SJMP $ MOV A , 21H CJNE A,22H,LP1LP1: JNC LP2 MOV A,21HLP2: MOV 23H, A分析例分析例 (20h)=Max(20h),(21h)(21h)=Min(20h),(21h) MOV A , 20H CJNE

52、A,21H,L1L1: JNC MAX XCH A, 21H MOV 20H,AMAX: SJMP $分析例分析例例4-6:片内RAM ONE和TWO两个单元中存有两个无符号数,将两个数中的小者存入30H单元。程序如下: 解:解: ORGORG1000H1000H ONE DATA 22H ONE DATA 22H; ;定义定义ONEONE TWO DATA 23H TWO DATA 23H;定义;定义TWOTWO RES DATA 30H RES DATA 30H;定义;定义RESRESMOVMOVA A,ONEONESTART:START: CJNE CJNE A A,TWOTWO,BIG

53、BIGSJMP SJMP STORESTOREBIGBIG: JCJCSTORESTOREMOVMOVA A,TWOTWOSTORESTORE:MOV MOV 30H30H,A ASJMPSJMP$ $ MOV A , ONE CJNE A,TWO,LP1LP1: JC LP2 MOV A,TWOLP2: MOV 30H, A(30h) (30h) 0 0(30h)(30h)0 0(30h)(30h) 0 0例例4-10: (31h)4-10: (31h)sgn(30h)sgn(30h)MOVMOVA,30HA,30HJZJZCOMPCOMPJNBJNBACC.7,POSIACC.7,POSI

54、MOVMOVA,#0FFHA,#0FFHPOSI:POSI:MOVMOVA,#1A,#1COMP:COMP:MOVMOV31H,A31H,A END ENDSJMP COMPSJMP COMP1 1、注意各分支的、注意各分支的跳转条件跳转条件2 2、注意各分支程、注意各分支程序结束后,要转序结束后,要转到程序段结束处到程序段结束处分析以下程序功能:分析以下程序功能:XEQU20HYEQU21HMOV A ,XCJNE A,#120,AAASJMP CCCAAA: JC BBBRRC A SJMP CCCBBB: RL ACCC: MOV Y , A ;A=120 转至转至CCC;A 120,右移一位,执行前,右移一位,执行前C=0 ;A 120,左移一位,执行前,左移一位,执行前ACC.7=0 (X 120) 分支程序分支程序+例:例: 编程设计,编程设计, 若若(30H)100,则,则 (40H)=(30h)-50 (30H)20)Y=0 (20X10)Y=-1 (X=R0,不置换不置换置换最大数至置换

温馨提示

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

评论

0/150

提交评论