【大学课件】MCS-51单片机指令系统与汇编语言程序设计.ppt

上传人:本田雅阁 文档编号:3034188 上传时间:2019-06-28 格式:PPT 页数:79 大小:666.01KB
返回 下载 相关 举报
【大学课件】MCS-51单片机指令系统与汇编语言程序设计.ppt_第1页
第1页 / 共79页
【大学课件】MCS-51单片机指令系统与汇编语言程序设计.ppt_第2页
第2页 / 共79页
【大学课件】MCS-51单片机指令系统与汇编语言程序设计.ppt_第3页
第3页 / 共79页
【大学课件】MCS-51单片机指令系统与汇编语言程序设计.ppt_第4页
第4页 / 共79页
【大学课件】MCS-51单片机指令系统与汇编语言程序设计.ppt_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《【大学课件】MCS-51单片机指令系统与汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《【大学课件】MCS-51单片机指令系统与汇编语言程序设计.ppt(79页珍藏版)》请在三一文库上搜索。

1、,2.3.5 位操作指令,位操作(布尔变量操作):操作数不是字节,而是字节中的某个位。每位的取值只能取0或1。 指令的寻址范围:片内RAM位寻址区20H2FH, SFR中的11个可位寻址特殊寄存器中的83个可寻址位。 特点:以进位标志Cy作为位累加器,可以实现布尔变量的传送、运算和控制转移等功能。 指令中的位地址的表达方式:直接地址方式(如0AFH)、特殊功能寄存器名.位序号(如PSW.3)、字节地址.位序号(如0D0H.0)、位名称方式(如F0)和用户定义名称等几种方式。,http:/ 位数据传送指令(2条) 特点:在可寻址位与位累加器Cy之间进行的。不能在两个可寻址位间直接进行传送。 指令

2、格式:MOV C, bit ;(Cy)(bit) MOV bit, C ;(bit) (Cy) 例: 比较 MOV A, 20H ;片内RAM 20H单元内容送A,传送8位二进制数 MOV C, 20H ;位地址为20H的位送C,传送1位二进制数 P71 例2.55,http:/ 位逻辑操作指令(6条),指令格式:操作码 C , 其中:操作码包括ANL、ORL ; 包括bit、bit。 CPL ; dest 包括Cy、 bit。 功能:位逻辑操作指令用于位逻辑操作,还可用于对组合逻辑电路的模拟。采用位操作指令进行组合逻辑电路的设计比采用字节型逻辑指令节约存储空间,运算操作十分方便。P71 例2

3、.56,http:/ 位状态(置位、清0)控制指令(4条) 指令格式:CLR ; 0 SETB ; 1 其中:包括Cy、 bit。 4. 位条件(控制)转移指令(5条) 特点:以位的状态作为实现程序转移的判断条件。 指令格式: (1)以进位标志位Cy内容为条件的转移指令 JC rel ; 若(Cy )=1,则转移(PC)(PC)+2+rel , 否则顺序执行 JNC rel ; 若(Cy )=0,则转移(PC)(PC)+2+rel , 否则顺序执行,http:/ 指令格式: JB bit, rel ; 若(bit)=1,则转移(PC) (PC)+3+rel,否则顺序执行 JNB bit, re

4、l ; 若(bit)=0,则转移(PC) (PC)+3+rel,否则顺序执行 JBC bit, rel ; 若(bit)=1,则转移(PC) (PC)+3+rel,且(bit )0, 否则顺序执行,http:/ 例2.58,ORG 0100H MOV DPTR,#DATA MOV R0,#30H MOV R1,#40H LOOP: MOVX A,DPTR CJNE A,#0DH,LOOP1 SJMP $ LOOP1:JB ACC.7,LOOP2 MOV R0,A INC R0 INC DPTR AJMP LOOP,LOOP2: MOV R1,A INC R1 INC DPTR AJMP LOO

5、P END,http:/ 汇编语言及程序设计,程序设计:就是编制计算机的程序,即应用计算机所能识别的、接受的语言把要解决的问题的步骤有序地描述出来。 程序设计语言的种类: (1)机器语言:机器语言是用二进制代码表示的计算机惟一能识别和执行的最原始的程序设计语言。 (2)汇编语言:利用指令助记符来描述的程序设计语言。 (3)高级语言:高级语言接近于人的自然语言,是面向过程而独立于机器的通用语言。 汇编语言的指令类型: MCS-51单片机汇编语言,包含两类不同性质的指令。 (1)指令:即指令系统中的指令。它们都是机器能够执行的指令,每一条指令都有对应的机器码。 (2)伪指令:汇编时用于控制汇编的指

6、令。它们都是机器不执行的指令,无机器码。,http:/ 标号: 操作码 操作数 ,操作数 ;注释 数据的表示方法: (1)二进制数:由0、1组成,“逢2进1”的数制。如:01011110B (01 后缀:B/b) (2)十六进制数:便于读写记忆的二进制数的简写形式。 (09,AF 后缀:H/h) (3)十进制数:可用二进制数表示(也称为BCD码, 09表示为:00001001B ),也可用十进制数表示(后缀:D/d或无后缀)。,http:/ 汇编语言程序设计的步骤,汇编语言程序设计:根据任务要求,采用汇编语言编制程序的过程称为汇编语言程序设计。 汇编语言程序设计的步骤: (1)拟订设计任务书

7、(2)建立数学模型 (3)确定算法 (4)分配内存单元,编制程序流程图 (5)编制源程序 进一步合理分配存储器单元和了解I/O接口地址;按功能设计程序,明确各程序之间的相互关系;用注释行说明程序,便于阅读和修改调试和修改。 (6)上机调试 (7)程序优化,http:/ 椭圆框:开始和结束框,在程序的开始和结束时使用。 矩形框:处理框,表示要进行的各种操作。 菱形框:判断框,表示条件判断,以决定程序的流向。 流向线:流程线,表示程序执行的流向。 圆 圈:连接符,表示不同页之间的流程连接。 各种几何图形符号如下图所示。,http:/ 顺序程序设计,特点:顺序结构程序是最简单、最基本的程序。程序按编

8、写的顺序依次往下执行每一条指令,直到最后一条。它能够解决某些实际问题,或成为复杂程序的子程序。 例题2 将片内RAM 30H单元中的两位压缩BCD码转换成二进制数送到片内RAM 40H单元中。,解:两位压缩BCD码转换成二进制数的算法为: (a1a 0)BCD=10a1a0 程序流程图如右图所示。 如:25=210+5 用BCD码:(00100101)BCD =00101010+0101=11001,http:/ ORG 1000H START: MOV A, 30H ; 取两位BCD压缩码a1a0送A ANL A, #0F0H ; 取高4位BCD码a1 SWAP A ; 高4位与低4位换位

9、MOV B, #0AH ; 将二进制数10送入B MUL AB ; 将10a1送入A中 MOV R0, A ; 结果送入R0中保存 MOV A, 30H ; 再取两位BCD压缩码a1a0送A ANL A, #0FH ; 取低4位BCD码a0 ADD A, R0 ; 求和10a1+ a0 MOV 40H, A ; 结果送入40H保存 SJMP $ ; 程序执行完,“原地踏步” END,http:/ 解: BCD码的09对应的ASCII码为30H39H,将30H39H按大小顺序排列放入表TABLE中,先将BCD码拆分,将拆分后的BCD码送入A,表首址送入DPTR ,然后领用查表指令MOVC A,A

10、+DPTR,查表即得结果,然后存入21H、22H中。 程序如下: ORG 1000H START: MOV DPTR,#TABLE MOV A,20H ANL A,#0FH MOVC A,A+DPTR MOV 21H,A,http:/ A,20H ANL A,#0F0H SWAP A MOVC A,A+DPTR MOV 22H, A SJMP TABLE: DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H END,http:/ 分支程序设计,特点:根据不同的条件,确定程序的走向。它主要靠条件转移指令、比较转移指令和位转移指令来实现。分支程序的结构如右图

11、所示。,分支程序的设计要点如下: (1)先建立可供条件转移指令测试的条件。 (2)选用合适的条件转移指令。 (3)在转移的目的地址处设定标号。,http:/ X是有符号数,判断符号位是0还是1可利用JB或JNB指令。判断X是否等于0则直接可以使用累加器A的判0指令。 程序流程图如右图所示。,例题4 求符号函数的值。已知片内RAM的 40H单元内有一自变量X,编制程序按如下条件求函数Y的值,并将其存入片内RAM 的41H单元中。 1 X0 Y= 0 X=0 -1 X0,http:/ 1000H START: MOV A, 40H ; 将X送入A中 JZ COMP ; 若A为0,转至COMP处 J

12、NB ACC.7, POST ; 若A第7位不为1(X为正数),则程序转到 POST处,否则(X为负数)程序往下执行 MOV A, #0FFH ; 将1(补码)送入A中 SJMP COMP ; 程序转到COMP处 POST: MOV A, #01H ; 将+1送入A中 COMP: MOV 41H, A ; 结果存入Y SJMP $ ; 程序执行完,“原地踏步” END,http:/ 例2.61,已知片内RAM的30H单元中存的有符号二进制数,求其补码,将补码存回30H单元。 ORG 0000H LJMP CMPT ORG 0030H CMPT: MOV A,30H JNB ACC.7,NCH;

13、若A中为正数,不求补 CPL A ;若A中为负数,求补码 ADD A,#01 ;A中数求反加1 ORL A,#80H ;在符号位拼1 MOV 30H,A NCH: SJMP $ END,http:/ 循环程序设计,特点:程序中含有可以重复执行的程序段(循环体),采用循环程序可以有效地缩短程序,减少程序占用的内存空间,使程序的结构紧凑、可读性好。 组成:循环程序一般由下面四部分组成。 (1)循环初始化。位于循环程序开头,用于完成循环前的准备工作,如设置各工作单元的初始值以及循环次数。 (2)循环体。循环程序的主体,位于循环体内,是循环程序的工作程序,在执行中会被多次重复使用。要求编写得尽可能简练

14、,以提高程序的执行速度。 (3)循环控制。位于循环体内,一般由循环次数修改、循环修改和条件语句等组成,用于控制循环次数和修改每次循环时的参数。 (4)循环结束。用于存放执行循环程序所得的结果,以及恢复各工作单元的初值。,http:/ (1)先循环处理,后循环控制(即先处理后控制)。如左下图所示。 (2)先循环控制,后循环处理(即先控制后处理)。如右下图所示。,http:/ 1单重循环程序 定义:循环体内部不包括其他循环的程序称为单重循环程序。,例题5 已知片内RAM 30H3FH单元中存放了16个二进制无符号数,编制程序求它们的累加和,并将其和数存放在R4, R5中。 解:每次求和的过程相同,

15、可以用循环程序实现。16个二进制无符号数求和,循环程序的循环次数应为16次(存放在R2中),它们的和放在R4, R5中(R4存高8位,R5存低8位)。程序流程图如右图所示。,http:/ ORG 1000H START: MOV R0, #30H MOV R2, #10H ; 设置循环次数(16) MOV R4, #00H ; 和高位单元R4清0 MOV R5, #00H ; 和低位单元R5清0 LOOP: MOV A, R5 ; 和低8位的内容送A ADD A, R0 ; 将R0与R5的内容相加并产生进位Cy MOV R5, A ; 低8位的结果送R5 CLR A ; A清0 ADDC A,

16、 R4 ; 将R4的内容和Cy相加 MOV R4, A ; 高8位的结果送R4 INC R0 ; 地址递增(加1) DJNZ R2, LOOP ;若循环次数减1不为0,则转到LOOP处循环; 否则,循环结束 SJMP $ END,http:/ 编制程序将片内RAM的30H4FH单元中的内容传送至片外RAM的2000H开始的单元中。,解:每次传送数据的的过程相同,可以用循环程序实现。 30H4FH共32个单元,循环次数应为32次(保存在R2中),为了方便每次传送数据时地址的修改,送片内RAM数据区首地址送R0,片外RAM数据区首地址送DPTR。程序流程图如右图所示。,http:/ ORG 100

17、0H START: MOV R0, #30H MOV DPTR, #2000H MOV R2, #20H ; 设置循环次数 LOOP: MOV A, R0 ; 将片内RAM数据区内容送A MOVX DPTR, A ; 将A的内容送片外RAM数据区 INC R0 ; 源地址递增 INC DPTR ; 目的地址递增 DJNZ R2, LOOP ; 若R2的不为0,则转到LOOP处继续循 环;否则循环结束 SJMP $ END,http:/ 例题7 编制程序设计50ms延时程序。 解:延时程序与MCS-51指令执行时间(机器周期数)和晶振频率fOSC有直接的关系。当fOSC=12MHz时,机器周期为

18、1s,执行一条DJNZ指令需要2个机器周期,时间为2s。 50ms 2s255,因此单重循环程序无法实现,可采用双重循环的方法编写50ms延时程序。,http:/ ORG 1000H DELAY: MOV R7, #200 ; 设置外循环次数(此条指令需要1个机器周期) DLY1: MOV R6, #123 ; 设置内循环次数 DLY2: DJNZ R6, DLY2 ;(R6)1=0,则顺序执行,否则转回 DLY2继续循环,延时时间为2s123=246s NOP ; 延时时间为1s DJNZ R7,DLY1 ;(R7)1=0,则顺序执行, 否则转回DLY1继续循环,延时时间为 (246211)

19、20021=50.003ms RET ; 子程序结束 END,http:/ (1)循环程序是一个有始有终的整体,它的执行是有条件的,所以要避免从循环体外直接转到循环体内部。 (2)多重循环程序是从外层向内层一层一层进入,循环结束时是由内层到外层一层一层退出的。在多重循环中,只允许外重循环嵌套内重循环。不允许循环相互交叉,也不允许从循环程序的外部跳入循环程序的内部。 (3)编写循环程序时,首先要确定程序结构,处理好逻辑关系。一般情况下,一个循环体的设计可以从第一次执行情况入手,先画出重复执行的程序框图,然后再加上循环控制和置循环初值部分,使其成为一个完整的循环程序。 (4)循环体是循环程序中重复

20、执行的部分,应仔细推敲,合理安排,应从改进算法、选择合适的指令入手对其进行优化,以达到缩短程序执行时间的目的。,http:/ 设MCS-51单片机内部RAM起始地址为30H的数据块中共存有64个无符号数,编制程序使它们按从小到大的顺序排列。 解:设64个无符号数在数据块中的顺序为:e64, e63, e2, e1,使他们从小到大顺序排列的方法很多,现以冒泡法为例进行介绍。 冒泡法又称两两比较法。它先使e64和e63比较,若e64e63,则两个存储单元中的内容交换,否则就不交换。然后使e63和e62比较,按同样的原则决定是否交换。一直比较下去,最后完成e2和e1的比较及交换,经过N1=63次比较

21、(常用内循环63次来实现)后,e1的位置上必然得到数组中的最大值,犹如一个气泡从水低冒出来一样,如下页图所示(图中只画出了6个数的比较过程)。,http:/ 实际编程时,可通过设置“交换标志”用来控制是否再需要冒泡,若刚刚进行完的冒泡中发生过数据交换(即排序尚未完成),应继续进行冒泡;若进行完的冒泡中未发生过数据交换(即排序已经完成),冒泡应该停止。例如:对于一个已经排好序的数组:1, 2, 3, 63, 64,排序程序只要进行一次循环便可根据“交换标志”的状态而结束排序程序的再执行,这自然可以减少631=62次的冒泡时间。 冒泡法程序流程图如下页图所示。,http:/ ORG 1000H M

22、OV R0, #30H ; 数据区首地址送R0 MOV R3, #63H ; 设置外循环次数在R3中 LP0: CLR 7FH ; 交换标志位2FH.7清0 MOV A, R3 ; 取外循环次数 MOV R2, A ; 设置内循环次数 LP1: MOV 20H, R0 ; 数据区数据送20H单元中 MOV A, R0 ; 20H内容送A INC R0 ; 修改地址指针(R0+1) MOV 21H, R0 ; 下一个地址的内容送21H CLR C ; Cy清0 SUBB A, 21H ; 前一个单元的内容与下一个单元的内容比较 JC LP2 ; 若有借位(Cy =1),前者小,程序转移到LP2处

23、执行, 若无借位(Cy =0),前者大,不转移,程序往下执行,http:/ R0, 20H ; 前、后内容交换 DEC R0 MOV R0, 21H INC R0 ; 修改地址指针(R0+1) SETB 7FH ; 置位交换标志位2FH.7为1 LP2: DJNZ R2, LP1 ; 修改内循环次数R2(减少), 若R20,则程序转到LP1 处仍执行循环, 若R2=0,程序结束循环,程序往下执行 JNB 7FH, LP3 ; 交换标志位2FH.7若为0,则程序转到LP3处结束循环 DJNZ R3, LP0 ; 修改外循环次数R3(减少), 若R30,程序转到LP0处, 执行仍循环, 若R3=0

24、,程序结束循环,往下执行 LP3: SJMP $ ; 程序执行完,“原地踏步” END,http:/ 查表程序设计,查表:根据存放在ROM中数据表格的项数来查找与它对应的表中值。 适用场合:主要应用于数码显示、打印字符的转换、数据转换等场合。 1. 采用MOVC A, A+DPTR指令查表程序的设计方法 (1)在程序存储器中建立相应的函数表(设自变量为X)。 (2)计算出这个表中所有的函数值Y。将这群函数值按顺序存放在起始(基)地址为TABLE的程序存储器中。 (3)将表格首地址TABLE送入DPTR,X送入A,采用查表指令MOVC A, A+DPTR完成查表,就可以得到与X相对应的Y值于累加

25、器A中。,http:/ 采用MOVC A, A+PC指令查表程序的设计方法 当使用PC作为基址寄存器时,由于PC本身是一个程序计数器,与指令的存放地址有关,查表时其操作有所不同。 (1)在程序存储器中建立相应的函数表(设自变量为X)。 (2)计算出这个表中所有的函数值Y。将这群函数值按顺序存放在起始(基)地址为TABLE的程序存储器中。 (3)X送入A,使用ADD A, #data指令对累加器A的内容进行修正,偏移量data由公式data=函数数据表首地址PC1确定,即data值等于查表指令和函数表之间的字节数。 (4)采用查表指令MOVC A, A+PC完成查表,就可以得到与X相对应的Y值于

26、累加器A中。,http:/ 1, 2, 9)的程序。 解:设变量X的值存放在内存30H单元中,求得的Y的值存放在内存31H单元中。平方表存放在首地址为TABLE的程序存储器中。 方法一:采用MOVC A, A+DPTR指令实现,查表过程如下图2.所示。,http:/ ORG 1000H START: MOV A, 30H ; 将查表的变量X送入A MOV DPTR, #TABLE ; 将查表的16位基地址TABLE送DPTR MOVC A, A+DPTR ; 将查表结果Y送A MOV 31H, A ; Y值最后放入31H中 SJMP $ TABLE: DB 0, 1, 4, 9, 16 DB

27、25, 36, 49, 64, 81 END 方法二:采用MOVC A, A+PC指令实现,查表过程如下页图所示。 程序如下:,http:/ 1000H START: MOV A, 30H ; 将查表的变量X送入A ADD A, #04H ; 定位修正 MOVC A, A+PC ; 将查表结果Y送A MOV 31H, A ; Y值最后放入31H中 SJMP $ TABLE: DB 0, 1, 4, 9, 16 DB 25, 36, 49, 64, 81 END,http:/ 例2.67,将存放在片内RAM 40H单元的1位16进制数转换为ASCII码,分别用查表和计算法完成。 方法1:用查表求

28、解。(略) 方法2:计算求解: ORG 0000H LP1:ADD A,#0AH LJMP START ADD A,30H ORG 0030H LP2:MOV 40H,A START: MOV A,40H SJMP $ ANL A,#0FH END CLR C SUBB A,#0AH JC LP1 ADD A,#0AH ADD A,37H SJMP LP2,http:/ 子程序设计,子程序:能够完成确定任务,并能为其他程序反复调用的程序段称为子程序。 特点:子程序可以多次重复使用,避免重复性工作,缩短整个程序,节省程序存储空间,有效地简化程序的逻辑结构,便于程序调试。 主程序:调用子程序的程序

29、叫做主程序或称调用程序。 主程序 子程序 . AD1: PUSH PSW MOV A,20H PUSH 06H LCALL AD1 RL A MOV 30H,A RL A . POP 06H POP PSW RET,http:/ 子程序的入口地址:子程序的第一条指令地址称为子程序的入口地址,常用标号表示。 子程序的调用过程:单片机执行ACALL或LCALL指令时,首先将当前的PC值(调用指令的下一条指令的首地址)压入堆栈保存(低8位先进栈,高8位后进栈),然后将子程序的入口地址送入PC,转去执行子程序。 (2)子程序的返回 主程序的断点地址:子程序执行完毕后,返回主程序的地址称为主程序的断点地

30、址,它在堆栈中保存。 子程序的返回过程:子程序执行RET指令时,将栈顶的内容(返回地址)弹回给PC(先弹回PC的高8位,后弹回PC的低8位),使程序回到原先被中断的主程序地址(断点地址)去继续执行。,http:/ 2保存与恢复寄存器内容 (1)保护现场 主程序转入子程序后,保护主程序的信息不会在运行子程序时丢失的过程称为保护现场。 保护现场通常在进入子程序的开始时,由堆栈完成。如: PUSH PSW PUSH ACC ,http:/ 从子程序返回时,将保存在堆栈中的主程序的信息还原的过程称为恢复现场。恢复现场通常在从子程序返回之前将堆栈中保存的内容弹回各自的寄存器。如: POP ACC POP

31、 PSW 3子程序的参数传递 主程序在调用子程序时传送给子程序的参数和子程序结束后送回主程序的参数统称为参数传递。 入口参数:子程序需要的原始参数。主程序在调用子程序前将入口参数送到约定的存储器单元(或寄存器)中,然后子程序从约定的存储器单元(或寄存器)中获得这些入口参数。 出口参数:子程序根据入口参数执行程序后获得的结果参数。子程序在结束前将出口参数送到约定的存储器单元(或寄存器)中,然后主程序从约定的存储器单元(或寄存器)中获得这些出口参数。,http:/ 应用工作寄存器或累加器传递参数。优点是程序简单、运算速度较快,缺点是工作寄存器有限。 应用指针寄存器传递参数。优点是能有效节省传递数据

32、的工作量,并可实现可变长度运算。 应用堆栈传递参数。优点是简单,能传递的数据量较大,不必为特定的参数分配存储单元。 利用位地址传送子程序参数。 4子程序的嵌套 在子程序中若再调用子程序,称为子程序的嵌套。MCS-51单片机允许多重嵌套。如下页图所示。,http:/ 子程序的入口地址一般用标号表示,标号习惯上以子程序的任务命名。例如,延时子程序常以DELAY作为标号。 主程序通过调用指令调用子程序,子程序返回主程序之前,必须执行子程序末尾的一条返回指令RET。, 单片机能自动保护和恢复主程序的断点地址。但对于各工作寄存器、特殊功能寄存器和内存单元的内容,则必须通过保护现场和恢复现场实现保护。 子

33、程序内部必须使用相对转移指令,以便子程序可以放在程序存储器64KB存储空间的任何子域并能为主程序调用,汇编时生成浮动代码。 子程序的参数传递方法同样适用于中断服务程序。,http:/ 编制程序实现c=a2+b2,(a, b均为1位十进制数)。,解:计算某数的平方可采用查表的方法实现,并编写成子程序。只要两次调用子程序,并求和就可得运算结果。设a, b分别存放于片内RAM的30H, 31H两个单元中,结果c存放于片内RAM的40H单元。程序流程图如右图所示。,http:/ ORG 1000H SR: MOV A, 30H ; 将30H中的内容a送入A ACALL SQR ; 转求平方子程序SQR

34、处执行 MOV R1, A ; 将a2结果送R1 MOV A, 31H ; 将31H中的内容b送入A ACALL SQR ; 转求平方子程序SQR处执行 ADD A, R1 ; a2+b2结果送A MOV 40H, A ; 结果送40H单元中 SJMP $ ; 程序执行完,“原地踏步” 求平方子程序如下(采用查平方表的方法): SQR: INC A MOVC A, A+PC RET TABLE: DB 0, 1, 4, 9, 16 DB 25, 36, 49, 64, 81 END,http:/ 例2.69,编写子程序,将由R0和R1所指的片内RAM中的两个3字节无符号数相加,结果送到R0所指

35、的片内RAM中。 入口参数:R0,R1分别指向两个加数的低字节。 出口参数:R0指向结果的高位字节 子程序功能:将由R0和R1所指的片内RAM中的两个3字节无符号数相加,结果送到R0所指的片内RAM中。,http:/ 0100H NADD: MOV R7,#03 CLR C NADD1:MOV A,R0 ADDC A,R1 MOV R0,A INC R0 INC R1 DJNZ R7,NADD1 DEC R0 RET END,http:/ 作业题20,ORG 0100H MOV R0,#30H MOV R7,#08H MOV A , #00H L1: ADD A,R0 INC R0 DJNZ

36、R7,L1 MOV B,#08H DIV AB MOV 3AH,A MOV 3BH,B SJMP $ END,编程计算片内RAM30H37H这8个单元中的数的算术平均值,结果存放在3AH单元中。,http:/ 程序设计举例,2.5.1 多字节算术运算程序 例 2.70 已知片内RAM以BLOCK1和BLOCK2为起始的单元中,分别存有5字节无符号被减数和减数(低位在前,高位在后)。编程序求差值,并把结果存入以BLOCK1为起始地址的片内RAM中。 解:两个5字节的数做减法,需要用循环结构设计程序。,http:/ 0100H SYSUB:MOV R0,#BLOCK1 MOV R1,#BLOCK2

37、 MOV R2,#05H CLR C LOOP: MOV A,R0 SUBB A,R1 MOV R0,A INC R0 INC R1 DJNZ R2,LOOP RET END,http:/ 编制程序实现两个16位二进制数乘法运算:,(R7R6)16(R5R4)16(R3R2R1R0)16 R7 R6 R5 R4 R4R6 R1R0 R4R7 R2R1 R5R6 R2R1 R5R7 R3R2,http:/ 程序,解:MCS-51乘法指令只能完成两个8位无符号数相乘,因此16位无符号数求积必须将它们分解成8位数相乘来实现。其方法有先乘后加和边乘边加两种。现以边乘边加为例设计。 程序如下 ORG 1

38、000H DMUL: MOV A, R6; 第一个因数的低位送A MOV B, R4; 第二个因数的低位送B MUL AB ; 第一个因数的低位乘以第二个因数的低位 R4R6,http:/ R0, A ; 积的低位送R0 MOV R1, B ; 积的高位送R1 MOV A, R7 ; 第一个因数的高位送A MOV B, R4 ; 第二个因数的低位送B MUL AB ; R4R7 ADD A, R1 ; 部分积相加,形成进位Cy MOV R1, A ; 部分积相加送R1 MOV A, B ; 部分积的进位Cy加到高位 ADDC A, #00H MOV R2, A MOV A, R6 ; 第一个因

39、数的低位送A MOV B, R5 ; 第二个因数的高位送B MUL AB ; R5R6 ADD A, R1 ; 部分积相加,形成进位Cy MOV R1, A ; 回送部分积 MOV A, R2,http:/ A, B ; 部分积相加 MOV R2, A ; 回送部分积 MOV A, #00H ; 部分积的进位Cy加到高位 ADDC A, #00H MOV R3, A ; 回送部分积 MOV A, R7 ; 第一个因数的高位送A MOV B, R5 ; 第二个因数的高位送B MUL AB ; R5R7 ADD A, R2 ; 部分积相加,形成进位Cy MOV R2, A ; 回送部分积 MOV A, R3 ADDC A, B ; 部分积相加 MOV R3, A ; 回送部分积 RET END,http:/ 数制转换程序,例 2.72 将4位压缩BCD码(十进制数)转换为二进制数。 a3a2a1a0=a31000+a2100+a110+a0 =(a310+a

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1