第3章汇编程序设计

上传人:壹****1 文档编号:567507995 上传时间:2024-07-20 格式:PPT 页数:31 大小:463.50KB
返回 下载 相关 举报
第3章汇编程序设计_第1页
第1页 / 共31页
第3章汇编程序设计_第2页
第2页 / 共31页
第3章汇编程序设计_第3页
第3页 / 共31页
第3章汇编程序设计_第4页
第4页 / 共31页
第3章汇编程序设计_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《第3章汇编程序设计》由会员分享,可在线阅读,更多相关《第3章汇编程序设计(31页珍藏版)》请在金锄头文库上搜索。

1、3.4 3.4 汇编语言程序设计汇编语言程序设计 80C5180C51汇编语言语句结构的基本格式汇编语言语句结构的基本格式 伪指令的功能和应用伪指令的功能和应用 汇编的概念汇编的概念 程序设计的步骤和基本方法程序设计的步骤和基本方法 顺序程序顺序程序 分支程序分支程序 循环程序循环程序 查表程序查表程序 散转程序散转程序寨嫁邢臂撞舍帜枷佐理滤沿剃巡矣共耻沿屑唁迹穴候慎渭劈轻奈间眨署问第3章汇编程序设计第3章汇编程序设计3.4.1 3.4.1 汇编程序汇编程序伪指令伪指令 在汇编时起控制作用,自身并不产生机器在汇编时起控制作用,自身并不产生机器码,而仅是为汇编服务的一些指令,称为伪指码,而仅是为

2、汇编服务的一些指令,称为伪指令。伪指令不属于令。伪指令不属于80C5180C51指令系统。指令系统。 常用的伪指令有以下几种:常用的伪指令有以下几种: 起始伪指令起始伪指令 ORG(Origin)ORG(Origin) 功能:规定功能:规定ORGORG下面目标程序的起始地址。下面目标程序的起始地址。格式:格式:ORG 16ORG 16位位地址地址痔橇沛蒜斥氖乳金调林肮惹疵哗筋蔡浩措唤浚阮芋珐以惊渔莱棱冶拱仑焦第3章汇编程序设计第3章汇编程序设计功能:将一个数据或特定的汇编符号赋予规定功能:将一个数据或特定的汇编符号赋予规定 的字符名称。的字符名称。 结束伪指令结束伪指令 ENDEND功能:汇编

3、语言源程序的结束标志。功能:汇编语言源程序的结束标志。 在在ENDEND后面的指令,汇编程序不再处理后面的指令,汇编程序不再处理。格式:格式:ENDEND 等值伪指令等值伪指令 EQUEQU(EquateEquate)格式:格式:字符名称字符名称 EQUEQU 数据或汇编符号数据或汇编符号嗓抖稍骑牌植垮耿缅谈绽抱秩摘捕脾蜜巩暂宇钮涪苟棘值叔要浇转憾忍谓第3章汇编程序设计第3章汇编程序设计 数据地址赋值伪指令数据地址赋值伪指令 DATADATA格式:格式:字符名称字符名称 DATADATA 表达式表达式功能:将数据地址或代码地址赋予规定的功能:将数据地址或代码地址赋予规定的 字符名称。字符名称。

4、 定义字节伪指令定义字节伪指令DBDB(Define ByteDefine Byte)格式:格式:DB 8DB 8位二进制数表位二进制数表功能:从指定的地址单元开始,定义若干功能:从指定的地址单元开始,定义若干 个个8 8位内存单元的数据。位内存单元的数据。 数据与数据之间用数据与数据之间用“,”分割。分割。漾嚏猫瘩氧挑矗焰踌叼骑的基奠窟抚祸坊胖沈错欲渴伏盒淀槛汀锌掠战卤第3章汇编程序设计第3章汇编程序设计格式:格式:字符名称字符名称 BITBIT 位地址位地址 定义字伪指令定义字伪指令DWDW(Define WordDefine Word)格式:格式:DW 16DW 16位二进制数表位二进制

5、数表功能:从指定的地址单元开始,定义功能:从指定的地址单元开始,定义 若干个若干个1616位数据。位数据。 定义位地址伪指令定义位地址伪指令BITBIT功能:将位地址赋予所规定的字符名称。功能:将位地址赋予所规定的字符名称。梯鹊颜敢痘玩毡醉伪鹏排兔侗鲁椽侦句烘邀碘悔丧贰曹劫舞沃删臃策尝困第3章汇编程序设计第3章汇编程序设计汇编语言基本概念汇编语言基本概念 将汇编语言源程序转换为计算机所能识别将汇编语言源程序转换为计算机所能识别的机器语言代码程序的过程称为汇编。的机器语言代码程序的过程称为汇编。 汇编可分为:汇编可分为: 手工汇编手工汇编 计算机汇编计算机汇编靳慷愿绊拆趋豌钒达已急标产沿蕴然缸朔

6、阮通汽眺揍瞥蝉殴掉桶迂耳郎载第3章汇编程序设计第3章汇编程序设计 汇编和调试汇编和调试程序设计的基本方法程序设计的基本方法编写程序要求:编写程序要求: 不仅要完成规定的功能任务,而且还要求:不仅要完成规定的功能任务,而且还要求: 执行速度快执行速度快、占用内存少占用内存少、条理清晰条理清晰、 阅读方便阅读方便、便于移植便于移植、巧妙而实用巧妙而实用。 一般应按以下几个步骤进行:一般应按以下几个步骤进行: 分析问题,确定算法或解题思路分析问题,确定算法或解题思路 画流程图画流程图 编写源程序编写源程序菇贪苞偶措章卢辛枯拧粤稻岩剑书十搏肃扒藩靖堵张碎享情吁属肚酵妊衫第3章汇编程序设计第3章汇编程序

7、设计 顺序程序是指按顺序依次执行的程序,也顺序程序是指按顺序依次执行的程序,也称为简单程序或直线程序。称为简单程序或直线程序。 顺序程序结构虽然比较简单,但也能完成顺序程序结构虽然比较简单,但也能完成一定的功能任务,是构成复杂程序的基础。一定的功能任务,是构成复杂程序的基础。 3.4.2 3.4.2 顺序程序顺序程序挫悸连近率舌逢臼颜柜孵汞岭馁炽灭蕊巩沉洁觅继湖膛濒搔魂档飘暂孺渔第3章汇编程序设计第3章汇编程序设计CONT: MOVCONT: MOV A,R0 A,R0; ;读低读低8 8位位CPLCPL A A; ;取反取反ADDADD A,#1 A,#1; ;加加1 1MOVMOV R2,

8、A R2,A; ;存低存低8 8位位MOVMOV A,R1 A,R1; ;读高读高8 8位位CPLCPL A A; ;取反取反ADDCADDC A,#80H A,#80H; ;加进位及符号位加进位及符号位MOV R3,AMOV R3,A; ;存高存高8 8位位RETRET; ;【例】【例】 已知已知1616位二进制负数存放在位二进制负数存放在R1R0R1R0中,中, 试求其补码,并将结果存在试求其补码,并将结果存在R3R2R3R2中。中。解:二进制负数的求补方法可归结为解:二进制负数的求补方法可归结为“求反加求反加1 1”,符号,符号位不变。利用位不变。利用CPLCPL指令实现求反;加指令实现

9、求反;加1 1时,则应低时,则应低8 8位先加位先加1 1,高,高8 8位再加上低位的进位。注意这里不能用位再加上低位的进位。注意这里不能用INCINC指令,因指令,因为为INCINC指令不影响标志指令不影响标志位。位。程序如下:程序如下:朱擦诺疚刚控顷运超撇采骑刷蛆菱叉讨氖彰杨陌唁涝砷顾葡躲搜沟室扇币第3章汇编程序设计第3章汇编程序设计 根据不同条件转向不同的处理程序,这根据不同条件转向不同的处理程序,这种结构的程序称为分支程序。种结构的程序称为分支程序。 80C5180C51指令系统中的指令系统中的条件转移指令条件转移指令、比较比较转移指令转移指令和和位转移指令位转移指令,可以实现分支程序

10、。,可以实现分支程序。3.4.3 3.4.3 分支程序分支程序密英惶你绘术秋廉宽她抵掐育镐叹藩唇歌售藐振干标云涎额挺盔搀导红做第3章汇编程序设计第3章汇编程序设计 S0S0单独按下,单独按下, 红灯亮红灯亮, ,其余灯其余灯灭;灭; S1 S1单独按下,单独按下, 绿灯亮绿灯亮, ,其余其余灯灯灭;灭; 其余情况,其余情况, 黄灯亮。黄灯亮。【例】已知电路如图【例】已知电路如图4-54-5所示,要求实现:所示,要求实现:浦霞冗妈槛焙经肢察源睹睛约穗贸沫腋油败犀迸撵艾蛆寓固与胁枫靠邹韩第3章汇编程序设计第3章汇编程序设计解:程序如下解:程序如下SGNL:ANL P1,#11100011BSGNL

11、:ANL P1,#11100011B; ;红绿黄灯灭红绿黄灯灭 ORL P1,#00000011B ORL P1,#00000011B; ;置置P1.0P1.0、P1.1P1.1输入态输入态, , P1.5P1.5P1.7P1.7状态不变状态不变SL0: JNB P1.0,SL1SL0: JNB P1.0,SL1 ;P1.0=0,S0;P1.0=0,S0未按下未按下, ,转判转判S1S1 JNB P1.1,RED JNB P1.1,RED ;P1.0=1,S0;P1.0=1,S0按下按下; ;且且P1.1=0,S1P1.1=0,S1未按下未按下, ,转红灯亮转红灯亮YELW:SETB P1.4

12、YELW:SETB P1.4 ; ;黄灯亮黄灯亮 CLR P1.2 CLR P1.2 ; ;红灯灭红灯灭 CLR P1.3 CLR P1.3 ; ;绿灯灭绿灯灭 SJMP SL0 SJMP SL0 ; ;转循环转循环SL1: JNB P1.1,YELWSL1: JNB P1.1,YELW ;P1.0=0,S0;P1.0=0,S0未按下未按下;P1.1=0,S1;P1.1=0,S1未按下未按下, ,转黄灯亮转黄灯亮GREN:SETB P1.3GREN:SETB P1.3 ; ;绿灯亮绿灯亮 CLR P1.2 CLR P1.2 ; ;红灯灭红灯灭 CLR P1.4 CLR P1.4 ; ;黄灯灭黄

13、灯灭 SJMP SL0 SJMP SL0 ; ;转循环转循环RED: SETB P1.2RED: SETB P1.2 ; ;红灯亮红灯亮 CLR P1.3 CLR P1.3 ; ;绿灯灭绿灯灭 CLR P1.4 CLR P1.4 ; ;黄灯灭黄灯灭 SJMP SL0 SJMP SL0 ; ;转循环转循环 亏廓何瓷办堕抑碴嚏彝枝骇箩患固德磁扩掏耸噪璃桑桔寿榷须道世手缝吩第3章汇编程序设计第3章汇编程序设计课堂练习题:课堂练习题: 电路及灯亮灭要求同上述【例】题,其中第电路及灯亮灭要求同上述【例】题,其中第3 3、4 4两条指令两条指令JNB P1.0JNB P1.0和和JNB P1.1JNB P

14、1.1按下列要求修改,按下列要求修改,试重新编程。试重新编程。 JBJBP1.0P1.0,JBJBP1.1P1.1, JBJBP1.0P1.0, JNB P1.1JNB P1.1, JNB P1.0JNB P1.0, JBJBP1.1P1.1,薯释尔卜踩撇炔寥具赊姻趴恭聊鞋公弱理抉骡琶镀果涛佣赣队嚏焕供赔砾第3章汇编程序设计第3章汇编程序设计 循环程序一般包括以下几个部分:循环程序一般包括以下几个部分: 循环初值;循环初值; 循环体;循环体; 循环修改;循环修改; 循环控制;循环控制;以上四部分可以有两种组织形式,其以上四部分可以有两种组织形式,其结构结构如下如下图所图所示。示。 3.4.4

15、3.4.4 循环程序循环程序 端卿宪蚕幅次铜郴晋觅凿乍忿钮赡讹值龟俊坦朵蕉赖隘郭妥疙碧难努础翌第3章汇编程序设计第3章汇编程序设计霞乓越粤苟莱裤庶赡嗅韶拳烽候米栋蜒卢宋郭迸烬匡踌艺缅副凡逝江堡疫第3章汇编程序设计第3章汇编程序设计【例】【例】设设XiXi均为单字节数,并按顺序存放在以均为单字节数,并按顺序存放在以50H50H为首为首地址的内地址的内RAMRAM存储单元中,数据长度(个数)存储单元中,数据长度(个数)N N存在存在R2R2中,试编程求和中,试编程求和S=XS=X1 1+X+X2 2+X+XN N,并将,并将S S(双字节)(双字节)存放在存放在R3R4R3R4中,(设中,(设S

16、S6553665536)。)。解:程序如下:解:程序如下: SXN: MOV R2,#NSXN: MOV R2,#N ;置数据长度置数据长度( (循环次数循环次数) ) MOV R3,#00H MOV R3,#00H ;和单元和单元( (高高8 8位位) )清清0 0 MOV R4,#00H MOV R4,#00H ;和单元和单元( (低低8 8位位) )清清0 0 MOV R0,#50H MOV R0,#50H ;求和数据区首址求和数据区首址LOOP:MOV A,R4LOOP:MOV A,R4 ;读前次低读前次低8 8位和位和 ADD A,R0 ADD A,R0 ;低低8 8位累加位累加 M

17、OV R4,A MOV R4,A ;存低存低8 8位和位和 CLR A CLR A ; ADDC A,R3 ADDC A,R3 ;高高8 8位加进位位加进位 MOV R3,A MOV R3,A ;存高存高8 8位和位和 INC R0 INC R0 ;指向下一数据指向下一数据 循环修改循环修改 DJNZ R2,LOOP DJNZ R2,LOOP ;判判N N个数据累加完否?个数据累加完否? 循环控制循环控制 RET RET ;退出循环退出循环 退出循环退出循环 置置循循环环初初值值循循环环体体补今阂话凋煞很吐颂镑慈诌焦两但寓倪原玫爬痪攘霹栅牲伦柄妻会毗滁阿第3章汇编程序设计第3章汇编程序设计【例

18、】编写延时【例】编写延时10ms10ms子程序子程序,fosc=12MHz,fosc=12MHz。 解解:fosc=12MHz:fosc=12MHz,一个机器周期为,一个机器周期为1 1 s s。DY10ms:MOV R6,#20 DY10ms:MOV R6,#20 ; ; 置外循环次数置外循环次数DLP1: MOV R7,#250 DLP1: MOV R7,#250 ; ; 置内循环次数置内循环次数DLP2: DJNZ R7,DLP2 DLP2: DJNZ R7,DLP2 ; 2; 2机周机周250 =500250 =500机周机周 DJNZ R6,DLP1 DJNZ R6,DLP1 ; 5

19、00; 500机周机周20= 1000020= 10000机周机周 RET RET ; ;说明:说明:MOV RnMOV Rn指令为指令为1 1个机器周期个机器周期; ; DJNZ DJNZ指令为指令为2 2个机器周期个机器周期; ; RET RET指令为指令为2 2个机器周期个机器周期; ; (2 2机周机周250)+1+2250)+1+220+1+220+1+21 1 s s/ /机周机周=10063=10063 s10mss10ms【课堂练习题】【课堂练习题】 按下列要求编写延时子程序:按下列要求编写延时子程序: 延时延时2ms2ms,fosc=6MHzfosc=6MHz; 延时延时5m

20、s5ms,fosc=12MHzfosc=12MHz; 延时延时10s10s,fosc=12MHzfosc=12MHz;周特腾犹脏呻雄灯角时士子锤鸯苏菇回况咐激除事艰燕骗枢拣据莎猛唯温第3章汇编程序设计第3章汇编程序设计 设设80C5180C51单片机的单片机的P1P1口作为输出口,经驱动电路口作为输出口,经驱动电路74LS24074LS240(8(8反相三态缓冲反相三态缓冲/ /驱动器驱动器) )接接8 8只发光二极管,只发光二极管,如下图所如下图所示。示。当输出位为当输出位为“1 1”时,发光二极管点亮,输出位为时,发光二极管点亮,输出位为“0 0”时时为暗。试编程实现:每个灯闪烁点亮为暗。

21、试编程实现:每个灯闪烁点亮1010次,再转移到下一次,再转移到下一个灯闪烁点亮个灯闪烁点亮1010次,循环不止。次,循环不止。 【例】【例】 编制一个循环闪烁灯的程序。编制一个循环闪烁灯的程序。亮牡沟服驰赤受毫辣怪又兹规骇茵海附喳痕懒诌氢吾住赢藏汛埋睛孜斋蹈第3章汇编程序设计第3章汇编程序设计FLASH:MOV A,#01HFLASH:MOV A,#01H ; ;置灯亮初值置灯亮初值FSH0: MOV R2,#0AHFSH0: MOV R2,#0AH ; ;置闪烁次数置闪烁次数FLOP: MOV P1,AFLOP: MOV P1,A; ;点亮点亮 LCALL DY1s LCALL DY1s;

22、;延时延时1s1s MOV P1,#00H MOV P1,#00H ; ;熄灭熄灭 LCALL DY1s LCALL DY1s; ;延时延时1s1s DJNZ R2,FLOP DJNZ R2,FLOP ; ;闪烁闪烁1010次次 RL RL A A; ;左移一位左移一位 SJMP FSH0 SJMP FSH0; ;循环循环 RET RET; ;解:程序如下:解:程序如下:延时子程序可根据延时长短,自行编写。延时子程序可根据延时长短,自行编写。 渐侣探酬亡榷谆试喂蜂相发薛瘸慎筐爬戒观甲埠痒欠缨克歪陨逻沂妮条讹第3章汇编程序设计第3章汇编程序设计 【课堂练习题】【课堂练习题】 根据上图电路根据上图

23、电路,设计灯亮移位程序,要,设计灯亮移位程序,要求求8 8只发光二极管每次点亮一个,点亮时间只发光二极管每次点亮一个,点亮时间为为250ms250ms,顺序是从下到上一个一个地循环,顺序是从下到上一个一个地循环点亮。设点亮。设fosc=6fosc=6MHzMHz。蔫溯怔籍仲恃押蕾酚胁躲元亦谊崔盈储李哦瓷第炭晰沿蚌掳滁孰沿魏骋苯第3章汇编程序设计第3章汇编程序设计【例】【例】已知已知P1P1口数据每隔口数据每隔10ms10ms刷新一次,试求其刷新一次,试求其1s1s内的平均值内的平均值, , 平均值存平均值存30H30H。 解:本题需求解:本题需求100100个数据的平均值,个数据的平均值, 一

24、般有两种方法:一般有两种方法: 一种是全部累加后再平均;一种是全部累加后再平均; 另一种是边平均边累加,另一种是边平均边累加, 现给出两种方法的程序。现给出两种方法的程序。托款邑产烂舱字谨押尾蜂伯聚柞吗劫侨歉脾蜕倚湾元蟹厚令勿础赂露全淖第3章汇编程序设计第3章汇编程序设计AVRG1: MOV R2,#0AVRG1: MOV R2,#0 ; ;低低8 8位累加寄存器清位累加寄存器清0 0 MOV R3,#0 MOV R3,#0 ; ;高高8 8位累加寄存器清位累加寄存器清0 0 MOV R4,#100 MOV R4,#100 ; ;置平均次数置平均次数ALOP: MOV A,P1ALOP: MO

25、V A,P1; ;读读P1P1口数据口数据 ADD A,R2 ADD A,R2; ;低低8 8位累加位累加 MOV R2,A MOV R2,A; ;回存回存 CLR A CLR A; ;高高8 8位与进位累加位与进位累加 ADDC A,R3 ADDC A,R3; ; MOV R3,A MOV R3,A; ;回存回存 LCALL DY10ms LCALL DY10ms ; ;延时延时10ms10ms DJNZ R4,ALOP DJNZ R4,ALOP; ;判判100100次累加完否?未完继续次累加完否?未完继续 MOV A,R3 MOV A,R3;100;100次累加完次累加完, ,求平均值求平

26、均值, ,被除数被除数AA、B B MOV B,R2 MOV B,R2; ; MOV R0,30H MOV R0,30H ; ;置商间址置商间址 MOV R6,#0 MOV R6,#0; ;置除数置除数100,100,除数除数R6R5R6R5 MOV R5,#100 MOV R5,#100; ; LCALL SUM LCALL SUM;(A;(A、B)B)(R6(R6、R5)= R5)= 商商 R0, R0, 余数余数A A CJNE A,#50,NEXT CJNE A,#50,NEXT; ;四舍五入四舍五入NEXT: JCNEXT: JC GRET GRET;C=1,;C=1,50, 50,

27、 舍舍 INC INC 30H 30H;C=0,50, ;C=0,50, 入入GRET: RETGRET: RET; ; 全全部部累累加加后后再再平平均均注:SUM子程序可参阅例4-9彼子癌绢爬解拙父戌速姥彦甲辖判墟隘送捶拱觅蝗那爆钡礼栗堆雀荷沪唬第3章汇编程序设计第3章汇编程序设计AVRG2:AVRG2: MOV MOV 30H,#030H,#0; ;商累加寄存器清商累加寄存器清0 0MOVMOV31H,#031H,#0; ;余数累加寄存器清余数累加寄存器清0 0 MOVMOVR4,#100R4,#100; ;置平均次数置平均次数ALOP:ALOP:MOVMOVA,P1A,P1; ;读读P1

28、P1口数据口数据 MOVMOVB,#100B,#100; ;置除数置除数( (平均次数平均次数) )DIVDIVABAB;P1;P1口数据除以口数据除以100100ADDADDA,30HA,30H; ;商累加商累加MOV MOV 30H,A30H,A; ;回存回存MOV MOV A,BA,B; ;ADDADDA,31HA,31H; ;余数累加余数累加MOVMOV31H,A31H,A; ;回存回存CLRCLRC C; ;SUBBSUBBA,#100A,#100; ;JCJCGONGON; ;余数累加余数累加100,100,余数累加寄存器不变余数累加寄存器不变INCINC30H30H; ;余数累加

29、余数累加100, 100, 商累加寄存器商累加寄存器+1+1MOVMOV31H,A31H,A; ;减去减去100100后差后差余数累加寄存器余数累加寄存器GON: GON: LCALLLCALLDY10msDY10ms; ;延时延时10ms10msDJNZDJNZR4,ALOPR4,ALOP ; ;判判100100次累加完否?未完继续次累加完否?未完继续MOVMOVA,31HA,31H;100;100次累加完毕次累加完毕, ,余数累加四舍五入余数累加四舍五入CJNECJNEA,#50,NEXTA,#50,NEXT; ;NEXT:NEXT:JCJCGRETGRET;C=1,;C=1,50, 50

30、, 舍舍INCINC30H30H;C=0,50, ;C=0,50, 入入GRET:GRET:RET RET ; ; 边边平平均均边边累累加加呢祟社抵乓错盖辊凄豢滁极装羊诅由己增坛没仇锦下淮懊于销赵贺阉院清第3章汇编程序设计第3章汇编程序设计【课堂练习题】【课堂练习题】 已知某单片机系统每隔已知某单片机系统每隔20ms20ms测一次温测一次温度,度,8 8位温度位温度A/DA/D值存在特殊功能寄存器值存在特殊功能寄存器SBUFSBUF中,试分别求其中,试分别求其1s1s和和1 1分内的平均值分内的平均值, , 分别存分别存30H30H和和31H31H。舍铭木仿服狗缮桔虞掩怨事铰森兢宽贺憨伊蹄芬陵

31、题责憾枪傈心杯犬衰篆第3章汇编程序设计第3章汇编程序设计 当用当用PCPC作基址寄存器时,其表格首地址与作基址寄存器时,其表格首地址与PCPC值间距值间距不能超过不能超过256256字节,且编程要事先计算好偏移量,比较字节,且编程要事先计算好偏移量,比较麻烦。因此,一般情况下用麻烦。因此,一般情况下用DPTRDPTR作基址寄存器。作基址寄存器。3.4.5 3.4.5 查表程序查表程序用于查表的指令有两条:用于查表的指令有两条: MOVC A,A+MOVC A,A+DPTRDPTR MOVC A,A+ MOVC A,A+PCPC 当用当用DPTRDPTR作基址寄存器时,查表的步骤分三步:作基址寄

32、存器时,查表的步骤分三步: 基址值(表格首地址)基址值(表格首地址)DPTRDPTR; 变址值(表中要查的项与表格首地址之间的变址值(表中要查的项与表格首地址之间的 间隔字间隔字节数)节数)AA; 执行执行MOVC AMOVC A,A+DPTRA+DPTR。壬抓斗我债僚羊绍码迎芦炕象叉驼碑呕痘恬盛楼交湃虐摸唆厄诵扁航发心第3章汇编程序设计第3章汇编程序设计解:编程如下:解:编程如下: CHAG:MOV DPTR,#TABDCHAG:MOV DPTR,#TABD; ;置共阴字段码表首址置共阴字段码表首址MOV A,30H MOV A,30H ; ;读显示数字读显示数字 MOVC A,A+DPTR

33、 MOVC A,A+DPTR ; ;查表查表, ,转换为显示字段码转换为显示字段码 MOV 30H,A MOV 30H,A ; ;存显示字段码存显示字段码 RET RET ; ;TABD:DB 3FH,06H,5BH,4FH,66HTABD:DB 3FH,06H,5BH,4FH,66H;0;04 4共阴字段码表共阴字段码表 DB 6DH,7DH,07H,7FH,6FH DB 6DH,7DH,07H,7FH,6FH;5;59 9共阴字段码表共阴字段码表【例】【例】 在单片机应用系统中,常用在单片机应用系统中,常用LEDLED数码管显示数数码管显示数码,但显示数字码,但显示数字(9)(9)与显示数

34、字编码并不相同,需与显示数字编码并不相同,需要将显示数字转换为显示字段码,通常是用查表的方要将显示数字转换为显示字段码,通常是用查表的方法。现要求将法。现要求将30H30H中的显示数字转换为显示字段码并中的显示数字转换为显示字段码并存入存入30H30H。已知共阴字段码表首址为。已知共阴字段码表首址为TABDTABD。椿以堂载瘩嗜汐吐紧烘耶洲绒耿悄烟国豆掐芦唱尉负跳嘱旨围狞即榨掉扮第3章汇编程序设计第3章汇编程序设计【课堂练习题】【课堂练习题】 已知已知8 8位显示数字已存入首址为位显示数字已存入首址为30H30H的内的内RAMRAM中,试将其转换为共阴显示字段中,试将其转换为共阴显示字段码,存

35、入首址为码,存入首址为40H40H的内的内RAMRAM中。中。背凤胀欣廉疏窟晾战册烙贪脸樟睬撞储弧丑滋耻亿犁寝乌达丫轿谩犁盘唬第3章汇编程序设计第3章汇编程序设计解:编程如下:解:编程如下:CUBE:CUBE: MOV DPTR,#TAB MOV DPTR,#TAB ; ;置立方表首址置立方表首址MOV A,30HMOV A,30H ; ;读数据读数据ADD A,30HADD A,30H ; ;数据数据2A2AMOV 30H,AMOV 30H,A ; ;暂存立方表数据序号暂存立方表数据序号 MOVC A, A+DPTRMOVC A, A+DPTR; ;读立方数据高读立方数据高8 8位位XCH

36、A,30H XCH A,30H ; ;存立方数据高存立方数据高8 8位位, ,立方表数据序号立方表数据序号AAINC AINC A ; ;指向立方数据低指向立方数据低8 8位位MOVC A,A+DPTR MOVC A,A+DPTR ; ;读立方数据低读立方数据低8 8位位 MOV 31H,AMOV 31H,A ; ;存立方数据低存立方数据低8 8位位RET RET ; ;TAB: DW 0,0,0,1,0,8,0,27,0,64 TAB: DW 0,0,0,1,0,8,0,27,0,64 ;0;04040立方表立方表 DW 0,125,0,216, DW 0,125,0,216,0FAH,00

37、H,0FAH,00H; ;说明:数据说明:数据2A2A原因是立方表数据为双字节原因是立方表数据为双字节【例】【例】 用查表程序求用查表程序求0 04040之间整数的立方。已知该整数存在之间整数的立方。已知该整数存在内内RAM 30HRAM 30H中,查得立方数存内中,查得立方数存内RAM 30HRAM 30H(高(高8 8位)位)31H31H。已知立。已知立方表方表( (双字节双字节) )首地址为首地址为TABTAB。端拭渴恭贾情霜歪羌鞘划娟孰末梅周撅聋扯壕骏墓妥衅恒抖羽停丑俗寨千第3章汇编程序设计第3章汇编程序设计 在单片机系统中设置在单片机系统中设置+ +、 、 、 四个运算命四个运算命令

38、键,它们的键号分别为令键,它们的键号分别为0 0、1 1、2 2、3 3。当其中一。当其中一个键按下时,进行相应的运算。操作数由个键按下时,进行相应的运算。操作数由P1P1口和口和P3P3口输入,运算结果仍由口输入,运算结果仍由P1P1口和口和P3P3口输出。具体口输出。具体如下:如下:P1P1口输入被加数、被减数、被乘数和被除口输入被加数、被减数、被乘数和被除数,输出运算结果的低数,输出运算结果的低8 8位或商;位或商;P3P3口输入加数、口输入加数、减数、乘数和除数,输出进位(借位)、运算结减数、乘数和除数,输出进位(借位)、运算结果的高果的高8 8位或余数。键盘号已存放在位或余数。键盘号

39、已存放在30H30H中。中。3.4.6 3.4.6 散转程序散转程序散转程序是一种并行多分支程序。散转程序是一种并行多分支程序。【例】【例】 单片机四则运算系统。单片机四则运算系统。鳃鲤赎让肮哺色博转谚充窝辞掖赔慷滤砷饵屯措岗贤魁汹穷碱尊孵透耘芽第3章汇编程序设计第3章汇编程序设计解:程序如下:解:程序如下:PRGM: MOV P1,#0FFH PRGM: MOV P1,#0FFH ;P1;P1口置输入态口置输入态 MOV P3,#0FFH MOV P3,#0FFH ;P3;P3口置输入态口置输入态 MOV DPTR,#TBJ MOV DPTR,#TBJ ; ;置置“”表首地址表首地址 MOV

40、 A,30H MOV A,30H ; ;读键号读键号 RL A RL A ; ;键号键号 2A2A ADD A,30H ADD A,30H ; ;键号键号 3A3A JMP A+DPTR JMP A+DPTR ; ;散转散转TBJ: LJMP TBJ: LJMP PRGM0PRGM0 ; ;转转PRGM0(PRGM0(加法加法) ) LJMP LJMP PRGM1PRGM1 ; ;转转PRGM1(PRGM1(减法减法) ) LJMP LJMP PRGM3PRGM3 ; ;转转PRGM3(PRGM3(除法除法) ) LJMP LJMP PRGM2PRGM2 ; ;转转PRGM2(PRGM2(乘法

41、乘法) )PRGM0: MOV A,P1 PRGM0: MOV A,P1 ; ;读加数读加数 ADD A,P3 ADD A,P3 ;P1+P3;P1+P3 MOV P1,A MOV P1,A ; ;和和P1P1 CLR A CLR A ; ; ADDC A,#00H ADDC A,#00H ; ;进位进位AA MOV P3,A MOV P3,A ; ;进位进位P3P3 RET RET ; ; 语斜禄寓韭始沫蛙棒盔凑攒苗坪瓜其煮旺识囊酥曼夺喀丢梗磅咕毡算梯象第3章汇编程序设计第3章汇编程序设计PRGM1: MOV A,P1 PRGM1: MOV A,P1 ; ;读被减数读被减数 CLR C CL

42、R C ; ; SUBB A,P3 SUBB A,P3 ;P1-P3;P1-P3 MOV P1,A MOV P1,A ; ;差差P1P1 CLR A CLR A ; ; RLC A RLC A ; ;借位借位AA MOV P3,A MOV P3,A ; ;借位借位P3P3 RET RET ; ;PRGM2: MOV A,P1 PRGM2: MOV A,P1 ; ;读被乘数读被乘数MOV B,P3 MOV B,P3 ; ;置乘数置乘数 MUL AB MUL AB;P1;P1P3P3 MOV P1,A MOV P1,A; ;积低积低8 8位位P1P1 MOV P3,B MOV P3,B; ;积高积

43、高8 8位位P3P3 RET RET; ;PRGM3: MOV A,P1 PRGM3: MOV A,P1 ; ;读被除数读被除数 MOV B,P3 MOV B,P3 ; ;置除数置除数 DIV AB DIV AB;P1;P1P3P3 MOV P1,A MOV P1,A ; ;商商P1P1 MOV P3,B MOV P3,B ; ;余数余数P3P3 RET RET ; ;说明:由于说明:由于LJMPLJMP为为3 3字节指令,因此键号需先乘字节指令,因此键号需先乘3 3, 以便转到正确的位置。以便转到正确的位置。嚣杰狸蛛抉挂带码狙串河抬嗜跋澎肖献抖剧誓凳十殊羹条匠泡裙腹贮翁赫第3章汇编程序设计第3章汇编程序设计

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号