




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第章章汇汇编编语语言言程程序序设设计计 本章内容本章内容Single Chip Microcomputer概述概述分支程序分支程序循环程序循环程序简单程序简单程序查表程序查表程序子程序子程序应用举例应用举例1 1实训目的实训目的 (1) 掌握汇编语言程序的基本结构。 (2) 了解汇编语言程序设计的基本方法和思路。实训实训4 4 信号灯的控制信号灯的控制2 22 2实训引入实训引入请观察以下几请观察以下几例程序的执行例程序的执行顺序顺序? ?3 3实训程序实训程序程序程序1:所有发光二极管不停地闪动。:所有发光二极管不停地闪动。 ORG 0000H;程序从地址程序从地址0000H开始存放开始存
2、放START:MOV P1,#00H;把立即数把立即数00H送送P1口,点亮所有发光二极管口,点亮所有发光二极管 ACALL DELAY;调用延时子程序调用延时子程序 MOV P1,#0FFH ;灭掉所有发光二极管灭掉所有发光二极管 ACALL DELAY;调用延时子程序调用延时子程序 AJMP START;重复闪动重复闪动DELAY: MOV R3,#7FH ;延时子程序延时子程序DEL2: MOV R4,#0FFHDEL1: NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET END;汇编程序结束汇编程序结束 开始点亮8个发光二极管延时熄灭8个发光二极管延时结束图4.2 程
3、序1流程图程序程序2:用开关控制发光二极管的显示方式。:用开关控制发光二极管的显示方式。 ORG 0000H MOV P3,#00010000B ;使;使P3口锁存器的口锁存器的P3.4置位置位 MOV A,P3;读;读P3口引脚线信号口引脚线信号 ANLA,#00010000B ;“逻辑与逻辑与”操作,屏蔽掉无关位操作,屏蔽掉无关位 JZ DDPING ;判断;判断P3.4是否接地,若是,跳转到是否接地,若是,跳转到DDPING执行执行 MOV P1,#00H;否则,;否则,P3.4接高电平,点亮所有发光二极管接高电平,点亮所有发光二极管 SJMP $DDPING:MOV P1,#55H;P
4、3.4接地,发光二极管交叉亮灭接地,发光二极管交叉亮灭 SJMP$ ENDA=0A0读P3.4的管脚YN结束P3.4接地?开始发光二极管交叉亮灭点亮8个发光二极管图4.3 程序2流程图程序程序3:使:使8个发光二极管顺序点亮。个发光二极管顺序点亮。 ORG 0000HSTART: MOV R2,#08H ;设置循环次数设置循环次数 MOV A,#0FEH ;送显示模式字送显示模式字NEXT: MOV P1,A ;点亮连接点亮连接P1.0的发光二极管的发光二极管 ACALL DELAY RL A ;左移一位,改变显示模式字左移一位,改变显示模式字 DJNZ R2,NEXT ;循环次数减循环次数减
5、1,不为零,继续点亮下面一个二极管,不为零,继续点亮下面一个二极管 SJMP STARTDELAY: MOV R3,#0FFH ;延时子程序开始延时子程序开始DEL2: MOV R4,#0FFHDEL1: NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET ENDR4-10R4-1=0R3-10R3-1=0R2-10R3-1=0YN显示模式字左移1位次数-1=0延时开始设循环次数设循环初值显示模式字送P1口图4.4 程序3流程图4. 4. 想一想想一想 在程序1和程序3中,它们执行的顺序有什么特点?单片机程序设计时有哪些方式?程序设计概述设计语言 最早人们只能用最早人们只能用机
6、器语言机器语言(二进制)编写程序;(二进制)编写程序; 为了方便记忆,人们开始用助记符形式的汇编语言编写为了方便记忆,人们开始用助记符形式的汇编语言编写程序,称为程序,称为低级语言低级语言。然后再用汇编系统将其翻译成机。然后再用汇编系统将其翻译成机器语言,该过程称为器语言,该过程称为汇编汇编; 为了用更接近人的语言编写程序,程序设计师们发明了为了用更接近人的语言编写程序,程序设计师们发明了高级语言高级语言,如:,如: BASIC、FORTRAN、PASCAL、 C、JAVA 然后再用编译系统将其翻译成机器语言,该过程称为然后再用编译系统将其翻译成机器语言,该过程称为编编译译; 机器只能识别机器
7、语言。所以必须用编译系统将高级语机器只能识别机器语言。所以必须用编译系统将高级语言编写的源程序编译成机器语言,用汇编系统将用汇编言编写的源程序编译成机器语言,用汇编系统将用汇编语言编写的源程序汇编成机器语言;语言编写的源程序汇编成机器语言; 由低级或高级语言构成的程序称为由低级或高级语言构成的程序称为源程序源程序,由机器语言,由机器语言构成的程序称作构成的程序称作目标程序目标程序; 源程序 目标程序 低级语言机器语言汇编高级语言机器语言编译程序设计实例引入 实例实例假设一个班有假设一个班有50个人,个人,共有共有3门选修课:门选修课:电工基础电工基础机械基础机械基础机械制图机械制图请找出:请找
8、出:同时选了三门课的同学;同时选了三门课的同学;问题的解决问题的解决 第一步第一步 如何在计算机中表示选修某门课的所有如何在计算机中表示选修某门课的所有同学同学5122325225392939412252939电工基础电工基础机械基础机械基础选修这门人数选修这门人数学生的学号学生的学号机械制图机械制图问题的解决问题的解决 第二步第二步 设计思路:找出同时选了三门课的同学设计思路:找出同时选了三门课的同学自控自控线控线控单片机单片机重复该过程重复该过程第三步:设计流程第三步:设计流程找出第一个学生找出第一个学生他选了线控吗?他选了线控吗?他选了单片机吗?他选了单片机吗?记录要找的人记录要找的人还
9、有学生吗?还有学生吗?下一个学生下一个学生N NN NY YN NY YY Y结束结束他选自控吗?他选自控吗?N NY Y几点启示几点启示 整体构思;整体构思; 构建整体流程框图;构建整体流程框图; 结构合理,流程清晰,简单明了;结构合理,流程清晰,简单明了; 局部模块化;局部模块化;符合人进行逻辑思考的习惯符合人进行逻辑思考的习惯计算机从根本上来说,没有任何逻辑计算机从根本上来说,没有任何逻辑性,性,所以,你必须告诉它,先做什么,所以,你必须告诉它,先做什么,后做什么,遇到什么情况又该做什么,后做什么,遇到什么情况又该做什么,等等等等流程图设计本身是一个逐步求精的过流程图设计本身是一个逐步求
10、精的过程,最终将任务划分为若干能由机器程,最终将任务划分为若干能由机器指令实现的小模块指令实现的小模块4.2 简单程序设计简单程序设计 简单程序也就是顺序程序,实训4中的程序1就是顺序程序结构,它是最简单、最基本的程序结构,其特点是按指令的排列顺序一条条地执行,直到全部指令执行完毕为止。不管多么复杂的程序,总是由若干顺序程序段所组成的。本节通过实例介绍简单程序的设计方法。 例4.1 4字节(双字)加法。将内部RAM 30H开始的4个单元中存放的4字节十六进制数和内部RAM 40H单元开始的4个单元中存放的4字节十六进制数相加,结果存放到40H开始的单元中。图4.5 例4.1题意分析示意图 (1
11、) 题意分析。题意分析。 题目的要求如图4.5所示。30H31H33H32H43H42H41H40H4FH23HABHA0H 7BH 56H 80H E8H加数 1 存放处加数 2 存放处43H42H41H40HCAH79H2BH89H相加结果存放处A 0A B 234FE880567B892B 79C A1 ORG0000HMOV A,30HADD A,40HMOV 40H,A;最低字节加法并送结果MOV A,31HADDCA,41HMOV 41H,A;第二字节加法并送结果(2) 汇编语言源程序。汇编语言源程序。按照双字节加法的思路,实现4字节加法的源程序如下: MOV A,32HADDC
12、A,42HMOV 42H,A;第三字节加法并送结果MOV A,33HADDCA,43HMOV 43H,A;第四字节加法并送结果,进位 位在CY中END由于MCS-51指令系统中只有单字节加法指令,因此多字节相加时,必须从低位字节开始分字节进行运算。 程序设计概述-基本步骤 题意分析 画出流程图 分配内存及端口 编制源程序 仿真、调试程序 固化程序有两组BCD码分别存放在23H、22H单元和33H、32H单元,求它们的和并送入43H、42H单元中去。(高位在前,低位在后)分析分析: :00111000011001010001000110000111BCD码83HBCD码11HBCD码78HBCD
13、码56H有两 组BCD码(如:1183H和5678H),分别存放在23H、22H单元和33H、32H单元,求它们的和,并送入43H、42H单元中去。(高位在前,低位在后)解:流程图流程图( (框图框图) )如何如何? ?请同学们自己绘制流请同学们自己绘制流程图。程图。 开始(22H)A(32H)+AA十进制调整(33H)+AA A(43H) 结束 A(42H)(23H)A 十进制调整 ORG 0000H ORG 0000H MOV A MOV A,22H22H ADD A ADD A,32H32H DA A DA A MOV 42H MOV 42H,A A MOV A MOV A,23H23H
14、 ADDC A ADDC A,33H33H DA A DA A MOV 43H MOV 43H,A A SJMP $ SJMP $ END END 此条加法指令可否此条加法指令可否改用带进位的改用带进位的(ADDC)?(ADDC)? 开始(22H)A(32H)+AA十进制调整(33H)+AA A(43H) 结束 A(42H)(23H)A 十进制调整 ORG 2000H CLR C MOV A,22H ADD A,32H DA A MOV 42H,A MOV A,23H ADDC A,33H DA A MOV 43H,A SJMP $ END1000 00110101 01100001 0001
15、0111 10001000 00110111 1000+1111 10110110 00010001 00010101 01100110 01110110 10001111 10110110 00010110 10000110 0111分支程序设计不一定按指令的先后顺序依次运行程序,程序的流向有两个或两个以上分支,根据指定条件选择程序的流向。分支:P3.4=0?点亮所有二极管N二极管交叉点亮Y1两分支程序设计两分支程序设计 例4.2 两个无符号数比较(两分支)。内部RAM的20H单元和30H单元各存放了一个8位无符号数,请比较这两个数的大小: 若(20H)(30H),则P1.0管脚连接的LED
16、发光; 若(20H)(30H),则P1.1管脚连接的LED发光。 (1) 题意分析。题意分析。 本例是典型的分支程序,根据两个无符号数的比较结果(判断条件),程序可以选择两个流向之中的某一个,分别点亮相应的LED。 比较两个无符号数常用的方法是将两个数相减,然后判断有否借位CY。若CY=0,无借位,则XY;若CY=1,有借位,则XY。程序的流程图如图4.7所示。 图4.7 两数比较流程图XY开始结束XY,P1.0灯亮CY1 XY, P1.1 灯亮YN (2) 汇编语言源程序。 源程序如下: X DATA 20H ;数据地址赋值伪指令数据地址赋值伪指令DATA Y DATA 30H ORG 00
17、00H MOV A, X ;(X) A CLR C ;CY=0 SUBB A,Y ;带借位减法,带借位减法,A- (Y)-CYA JC L1 ;CY=1,转移到,转移到 L1 CLR P1.0 ;CY=0,(20H)(30H),点亮,点亮P1.0连接的连接的LED SJMPFINISH ;直接跳转到结束等待;直接跳转到结束等待 L1:CLRP1.1 ;(20H)0?A=0?分支程序实例-三分支程序 源程序如下: ORG 2000H MOV A,30H JZ LP1 ;X = 0,转LP1处理 JNB ACC.7,LP2 ;X0,转LP2处理 MOV A,#0FFH ;X0,则Y= 1 SJMP
18、 LP1 LP2:ADD A,#01 ;X 0,Y=X+1 LP1:MOV 31H,A ;存结果 SJMP $ ;循环等待,$表示转至 本地址,此方法适用 于一字节的偏移量最高位为符号位。散转程序 散转程序是指通过修改某个参数后,程序可以有三个以上的流向,多用于键盘程序。 常用的指令是JMP A+DPTR,该指令是把16位数据指针DPTR的内容与累加器A中的8位无符号数相加,形成地址,装入程序计数器PC,形成散转的目的地址。DPTRAPCA中内容为8位无符号数16位地址数 程序清单如下:MOV A,RRL A ;分支序号值乘2MOV DPTR ,#BRTABL ;转移指令表首址JMP A+DP
19、TR ;转向形成的散转地址BRTABL:AJMP OPR0 ;转移指令表AJMP OPR1AJMP OPRn 例: 根据R3的内容,转向各自对应的操作程序 (R3= 0,转入OPR0;R3= 1,转入OPR1R3= n,转入OPRn)图4.11 指令转移表的存储格式TABLE3DPTRTABLETWOONEAJMPTABLE1TABLE2TABLE4TABLE5TABLE6TABLE7AJMPAJMPAJMPTHREEFOURA0A2A4A6循环程序设计 结构特点:利用转移指令反复运行需要多次重复的程序结构特点:利用转移指令反复运行需要多次重复的程序段。段。 实例:前面几个实训中用到的延时程序
20、:实例:前面几个实训中用到的延时程序:(DELAY) DELAY: MOV R3, #OFFH DEL2: MOV R4,#0FFH DEL1: NOP NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET 循环程序的组成:循环程序的组成: 1. 初始化部分初始化部分(设定循环次数等设定循环次数等)。 2. 循环体循环体(重复执行的部分重复执行的部分,用于完成实际操作用于完成实际操作) 3. 循环控制循环控制(不断修改和判别循环变量不断修改和判别循环变量,直至结束直至结束)。 4. 循环结束处理。循环结束处理。循循环环程程序序设设计计延时程序中延时时间的设定:延时程序中延时时间的
21、设定:源程序:源程序: 指令周期指令周期DELAY: MOV R3, #( X )H 2个个T机器机器 DEL2: MOV R4,#( Y )H 2个个T机器机器 DEL1: NOP 1个个T机器机器 NOP 1个个T机器机器 DJNZ R4,DEL1 2 个个T机器机器 DJNZ R3,DEL2 2个个T机器机器 RET指令周期、机器周期指令周期、机器周期T机器机器与时钟周期与时钟周期T时钟时钟的关系:的关系: T机器机器=12T时钟时钟=12 1/fosc=1s (假设晶振频率假设晶振频率fosc为为12M)延时时间的简化计算结果:延时时间的简化计算结果: (1+1+2) X Y 延时时间
22、怎样计算?若想延时若想延时100ms,只需修改计数初始值,即只需修改计数初始值,即 (1+1+2) 125 200s=100ms#200#125循循环环程程序序设设计计1 1S S延时程序延时程序源程序:源程序:DELAY: MOV R2, #10 DEL3: MOV R3, #200DEL2: MOV R4,#125DEL1: NOP NOP DJNZ R4,DEL1 DJNZ R3,DEL2 DJNZ R2, DEL3 RET 编程实现编程实现P1口连接的口连接的8个个LED显示方式如下:显示方式如下:从从P1.0到到P1.7的顺序,依次点亮其连接的的顺序,依次点亮其连接的LED。 FEH
23、点亮P1.0连接的LED MOV P1,#0FEH FDH点亮P1.1连接的LED MOV P1,#0FDH FBH点亮P1.2连接的LED MOV P1,#0FBH 7FH点亮P1.7连接的LED MOV P1,#7FH 以上完全重复地执行往P1口传送立即数的操作,会使程序结构松散。我们看到,控制LED点亮的显示模式字立即数0FEH、0FDH、0FBH7FH之间存在着每次左移一位的规律,因此我们可以试用循环程序来实现。初步设想的程序流程图如图4.13所示。循循环环程程序序设设计计 次数子程序实例引入:实训子程序实例引入:实训4程序程序3 ORG 0000HSTART: MOV R2,#08H
24、 ;设置循环次数设置循环次数 MOV A,#0FEH ;送显示模式字送显示模式字NEXT: MOV P1,A ;点亮二极管点亮二极管 ACALL DELAY RL A ;左移一位,改变显示模式字左移一位,改变显示模式字 DJNZ R2,NEXT ;循环次数减循环次数减1,不为零,继续点亮,不为零,继续点亮 SJMP START ;下面一个二极管下面一个二极管 DELAY: MOV R3,#0FFH ;延时子程序开始延时子程序开始DEL2: MOV R4,#0FFHDEL1: NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET END 数数据据传传送送程程序序不同存储区域之间的数
25、据传输不同存储区域之间的数据传输:将内部将内部RAM30HRAM30H单元开始的内容传送到外部单元开始的内容传送到外部RAM0100HRAM0100H单单元开始的区域,直到遇到传送的内容是元开始的区域,直到遇到传送的内容是0 0为止。为止。 A 初始化部分循环体循环控制循环结束 ORG0000H MOV R0,#30H;R0指向内部RAM数据区首地址MOV DPTR,#0100H;DPTR指向外部RAM数据区首地址 TRANS: MOV A,R0;A(R0) MOVXDPTR,A;(DPTR)A CJNE A,#00H,NEXT SJMP FINISH;A=0,传送完成 NEXT: INC R
26、0 ;修改地址指针INCDPTR AJMP TRANS;继续传送 FINISH:SJMP $ END图4.17 以累加器A为中心的不同存储空间的数据传送示意图内部RAM低128字节外部RAM及I/O端口特殊功能寄存器SFRROMMOVMOVMOVXMOVCMOV累加器A查表程序 表格是事先存放在ROM中的,一般为一串有序的常数,例如平方表、字型码表等。 表格可通过伪指令DB来确定。 通过查表指令MOVC A,A+DPTR MOVC A,A+PC来实现。 在在LED显示和键盘处理程序中将会用到。显示和键盘处理程序中将会用到。例例 用查表法计算平方用查表法计算平方( (一一) ) ORG 0000
27、HORG 0000H MOV MOV DPTR DPTR,#TABLE ;#TABLE ;表首地址送表首地址送DPTRDPTR MOV A MOV A,#05#05; ;被查数字被查数字0505A A MOVC A MOVC A,A+DPTRA+DPTR ; ;查表求平方查表求平方 SJMP $ SJMP $ TABLETABLE:DB 0,1,4,9,16,25,36,49,64,81 DB 0,1,4,9,16,25,36,49,64,81 END END ORGORG 0000H 0000H0000H MOV A0000H MOV A,#05#05 ;05 ;05 A A0002H AD
28、D0002H ADD A A,#02#02 ; ;修正累加器修正累加器A A0004H MOVC A0004H MOVC A,A+PCA+PC ; ;查表求平方查表求平方0005H SJMP $ 0005H SJMP $ 0007H0007H: DB 0,1,4,9,16,25,36,49,64,81 DB 0,1,4,9,16,25,36,49,64,81 END END子程序设计 在实际问题中,常常会遇到在一个程序中多次用到相同的运算或操作,若每遇到这些运算或操作,都从头编起,将使程序繁琐、浪费内存。因此在实际中,经常把这种多次使用的程序段,按一定结构编好,存放在存储器中,当需要时,可以调
29、用这些独立的程序段。通常将这种可以被调用的程序段称为子程序子程序。主要内容:主要内容: 1. 1. 主程序与子程序的关系主程序与子程序的关系 2. 2. 子程序嵌套子程序嵌套 3. 3. 子程序的调用与返回子程序的调用与返回主程序与子程序的关系 子程序SUB 主程序MAINLCALL SUB 调用子程序子程序入口地址RET实例:实训实例:实训1 1 3 3中调用延时程序的过程。中调用延时程序的过程。 ORG0000H MAIN:MOVA,#0FEH ;送显示初值送显示初值 LP:MOVR0,#10;送闪烁次数送闪烁次数 LP0:MOVP1,A;点亮点亮LEDLCALLDELAY;延时延时MOV
30、P1,#0FFH;熄灭灯熄灭灯LCALLDELAY;延时延时DJNZR0,LP0 RLA SJMPLP END实例:实例:LED灯的闪烁点亮(一)灯的闪烁点亮(一)延时次数-1=0点亮相应的LEDYN熄灭相应的LED延时初值左移1位指向下一个LED设闪烁次数送显示初值开始子程序嵌套 子程序嵌套(或称多重转子)是指在子程序执行过程中,还可以调用另一个子程序。 子程序SUB1 主程序MAINLCALL SUB1 RET 子程序SUB2RETLCALL SUB2 子程序嵌套范例:子程序嵌套范例:LEDLED灯闪烁灯闪烁( (二二) ) ORG 0000H MAIN: MOV A,#0FEH;送显示初
31、值送显示初值 COUN: ACALL FLASH;调闪烁子程序调闪烁子程序 RL A;A左移,下一个灯闪烁左移,下一个灯闪烁 SJMP COUN ;循环不止循环不止 FLASH: MOV R0,#10;送闪烁次数送闪烁次数FLASH1: MOV P1,A;点亮点亮LED LCALL DELAY;延时延时 MOV P1,#0FFH;熄灭灯熄灭灯 LCALL DELAY;延时延时 DJNZ R0,FLASH1 ;闪烁次数不够闪烁次数不够10次,继续次,继续 RET DELAY: MOV R3,#0FFH ;延时子程序延时子程序 DEL2: MOV R4,#0FFH DEL1: NOP DJNZ R
32、4,DEL1 DJNZ R3,DEL2 RET END子程序的调用与返回 子程序调用、返回到主程序中的正确位置,并接著执行主程序中的后续指令呢? 为了解决这个问题,我们采用了堆栈技术。 子程序SUB1 主程序MAINRET 子程序SUB2RET20102013211021132100220020 132013 PC21 131321堆栈指针SP堆栈LCALL SUB1LCALL SUB221 1320 13子程序设计注意事项 (1)要给每个子程序起一个名字,也就是入口地址入口地址的代号。 (2)要能正确地传递参数。即首先要有入口条件入口条件,说明进入子程序时,它所要处理的数据放在何处(如:是放
33、在A中还是放在某个工作寄存器中等)。另外,要有出口条件出口条件,即处理的结果存放在何处。 (3)注意保护现场和恢复现场。在子程序使用累加器、工作寄存器等资源时,要先将其原来的内容保存起来,即保护现场保护现场。当子程序执行完毕,在返回主程序之前,要将这些内容再取出,送还到累加器、工作寄存器等原单元中,这一过程称为恢复现场恢复现场。例4.11 查表子程序。注意:1.入口参数和出口参数的位置 2.现场的保护与恢复。子程序的参数传递子程序的参数传递 ORG 0000H ;主程序主程序MOV SP,#3FH ;设置栈底设置栈底MOV A,31H ;取数取数a存放到累加器存放到累加器A中作为入口参数中作为
34、入口参数LCALL SQR ;计算计算MOV R1,A ;出口参数出口参数平方值存放在平方值存放在A中中MOV A,32H ;取数取数b存放到累加器存放到累加器A中作为出口参数中作为出口参数LCALL SQR ;计算计算ADDA,R1 ;求和求和MOV 33H,A ;存放结果存放结果SJMP $ SQRSQR:USH DPHUSH DPH ;保护现场,将主程序中保护现场,将主程序中DPTRDPTR的高八位放入堆栈的高八位放入堆栈 PUSH DPLPUSH DPL ;保护现场,将主程序中保护现场,将主程序中DPTRDPTR的低八位放入堆栈的低八位放入堆栈 MOV DPTR,#TABLE MOV
35、DPTR,#TABLE ;在子程序中重新使用在子程序中重新使用DPTR,DPTR,表首地址表首地址DPTRDPTR MOVC A, A+DPTR MOVC A, A+DPTR ;查表查表 POP DPL POP DPL ;恢复现场,将主程序中恢复现场,将主程序中DPTRDPTR的低八位从堆栈中弹出的低八位从堆栈中弹出 POP DPHPOP DPH ;恢复现场,将主程序中恢复现场,将主程序中DPTRDPTR的高八位从堆栈中弹出的高八位从堆栈中弹出 RET RETTABLE: DB 0,1,4,9,16,25,36,49,64,81TABLE: DB 0,1,4,9,16,25,36,49,64,
36、814.7 实用汇编子程序举例实用汇编子程序举例 4.7.1 代码转换程序代码转换程序 在计算机内部,任何数据最终都是以二进制形式出现的。但是人们通过外部设备与计算机交换数据采用的常常又是一些别的形式。例如标准的编码键盘和标准的CRT显示器使用的都是ASCII码;人们习惯使用的是十进制,在计算机中表示为BCD码等。因此,汇编语言程序设计中经常会碰到代码转换的问题,这里介绍BCD码、ASCII码与二进制数相互转换的基本方法和子程序代码。1. 单字节二进制数转换成十进制数(BCD码)单字节二进制数最大为十进制数255,因此可直接用单字节除法完成,即先除100,商为百位,余数再除10,商为十位,余数
37、为个位。把30H单元中的二进制数转换成十进制数,并把百位、十位、个位存入31H、32H、33H单元中。程序如下: 100送B, A除B 商送31H, 余数送A 10送B, A除B 商送32H, 余数送33H 开 始 结 束EZBCD:MOV A,30H ;取二进制数MOV B,#100DIV AB ;除100MOV 31H,A ;百位送31HMOV A,#10XCH A,B ;余数和10交换DIV AB ;除10MOV 32H,A ;十位送32HMOV 33H,B ;个位送33HRET 100送B, A除B 商送31H, 余数送A 10送B, A除B 商送32H, 余数送33H 开 始 结 束
38、2.十进制数(BCD)码转换成二进制数 用BCD码表示的十进制数存在42H40H单元中,欲转换成二进制数,转换结果在R2R3中。如 : 6 3 4 = 6102+310+4用乘法指令,所以直接用乘法指令完成转换,程序如下: 42HA, #100B, AB 积的高位R2, 低位R3 41HA, #10B, AB AR3R3, R2CYR240HR3R3, R2CYR2 开 始 结 束 MOV A,42H MOV A,40HMOV B,#100 ADD A,R3 ;加个位MUL AB ;乘百位 MOV R3,AMOV R2,B CLR AMOV R3,A ADDC A,R2 MOV A,41H M
39、OV R2,AMOV B,#10 H:SJMP HMUL AB ;乘十位ADD A,R3 MOV R3,A 高位 低位CLR AADDC A,R2MOV R2,AR2R342HA, #100B, AB积的高位R2,低位R3 41HA, #10B, AB AR3R3, R2CYR240HR3R3, R2CYR2 开 始 结 束3.编写一段程序把内部RAM 30H-3FH的内容清零。 理解:间接寻址和计数循环。首地址R0 , 字节数R2AR0 , (R0) +1字节数到否?结 束开 始NY MOV R0,#30H MOV R2,#16CLR A LOP: MOV R0,AINC R0DJNZ R0,LOP H:SJMP H5、 多字节十进制数(BCD码)加法 清标志位YN加完?开始取被加数N恢复地址指针返回指针加1求和调整AA1:MOV R0,#20HAA1:MOV R1,#30H MOV R3,#4 CLR C LOP0:MOV A,R0 ;取被加数 ADDC A,R1 ;两数相加 DA A ;十进制调整 MOV R0,A INC R0 ;指针加1 INC R1 DJNZ R3,LOP0 ;作完加法否 SJMP HH: SJMP H 6、 多字节数乘法计 算 R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业园区安全隐患的评估与治理计划
- 2025年无机矿物填充塑料合作协议书
- 言语治疗辨音训练
- 九年级道德与法治下册 第一单元 我们共同的世界 第二课 构建人类命运共同体教学实录设计(pdf) 新人教版
- 南京会展工作简历模板
- 2023四年级数学上册 二 繁忙的工地-线和角信息窗1 射线、直线及角的初步认识教学实录 青岛版六三制
- 仲裁档案通知函
- 河北省邯郸市八年级生物下册 22.2原生生物的主要类群教学实录 (新版)北师大版
- 2025年曲靖驾驶员货运从业资格证模拟考试题
- 2025年心理教育测试试题及答案
- 2019版外研社高中英语选择性必修二Unit 1 Growing up 单词表
- 路基接触网基础技术交底
- 气瓶充装安全及培训课件PPT幻灯片
- (高清版)辐射供暖供冷技术规程JGJ142-2012
- JTT 1295—2019道路大型物件运输规范_(高清-最新)
- 土壤固化土施工技术导则
- VAR模型Johansen协整检验在eviews中的具体操作步骤及结果解释
- 冷冻面团项目市场分析
- 北工大电子课程设计报告数电自行车里程表.
- 加油站法律法规符合性评价
- 5外科--丹毒下肢丹毒中医诊疗方案2017年版
评论
0/150
提交评论