已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言程序设计例题 例1两个无符号双字节数相加 设被加数存放于内部RAM的40H 高位字节 41H 低位字节 加数存放于50H 高位字节 51H 低位字节 和数存入40H和41H单元中 程序如下 START CLRC 将Cy清零MOVR0 41H 将被加数地址送数据指针R0MOVR1 51H 将加数地址送数据指针R1AD1 MOVA R0 被加数低字节的内容送入AADDA R1 两个低字节相加MOV R0 A 低字节的和存入被加数低字节中DECR0 指向被加数高位字节DECR1 指向加数高位字节MOVA R0 被加数高位字节送入AADDCA R1 两个高位字节带Cy相加MOV R0 A 高位字节的和送被加数高位字节RET 例2将两个半字节数合并成一个一字节数 设内部RAM40H 41H单元中分别存放着8位二进制数 要求取出两个单元中的低半字节 并成一个字节后 存入50H单元中 例2将两个半字节数合并成一个一字节数 START MOVR1 40H 设置R1为数据指针MOVA R1 取出第一个单元中的内容ANLA 0FH 取第一个数的低半字节SWAPA 移至高半字节INCR1 修改数据指针XCHA R1 取第二个单元中的内容ANLA 0FH 取第二个数的低半字节ORLA R1 拼字MOV50H A 存放结果RET 例3x y均为8位二进制数 设x存入R0 y存入R1 求解 y syn x 例3x y均为8位二进制数 设x存入R0 y存入R1 求解 y syn x 程序如下 START CJNER0 00H SUL1 R0中的数与00比较不等转移MOVR1 00H 相等 R1 0SJMPSUL2SUL1 JCNEG 两数不等 若 R0 0 则R1 01HSJMPSUL2NEG MOVR1 0FFH R0 0 则R1 0FFHSUL2 RET 程序如下 SUBF MOVA R0JZZEROJBACC 7 NEGMOVR1 1SJMPENDFZERO MOVR1 0SJMPENDFNEG MOVR1 0FFHENDF RET 例4比较两个无符号数的大小 设外部RAM的存储单元ST1和ST2中存放两个不带符号的二进制数 找出其中的大数存入外部RAM中的ST3单元中 例4比较两个无符号数的大小 程序如下 ORG1000HST1EQU2000HST2EQU2100HST3EQU2200HSTART CLRC 清零CyMOVDPTR ST1 第一个数的指针MOVXA DPTR 取第一个数MOVR2 A 保存MOVDPTR ST2 第二个数的指针MOVXA DPTR 取第二个数CLRC SUBBA R2 两数比较JNCBIG2 若第二个数大 则转XCHA R2 第一个数大BIG1 MOVDPTR ST3MOVX DPTR A 存大数RETBIG2 MOVXA DPTR 第二个数大SJMPBIG1RET 例5工作单元清零 在应用系统程序设计时 有时经常需要将存储器中各部分地址单元作为工作单元 存放程序执行的中间值或执行结果 工作单元清零工作常常放在程序的初始化部分中 设有50个工作单元 其首址为外部存储器8000H单元 则其工作单元清零程序如下 CLEAR CLRAMOVDPTR 8000H 工作单元首址送指针MOVR2 50 置循环次数CLEAR1 MOVX DPTR AINCDPTR 修改指针DJNZR2 CLEAR1 控制循环RET 例6设在内部RAM的BLOCK单元开始处有长度为LEN个的无符号数据块 试编一个求和程序 并将和存入内部RAM的SUM单元 设和不超过8位 BLOCKEQU20HLENEQU10HSUMEQU40HSTART CLRA 清累加器AMOVR2 LEN 数据块长度送R2MOVR1 BLOCK 数据块首址送R1LOOP ADDA R1 循环加法INCR1 修改地址指针DJNZR2 LOOP 修改计数器并判断MOVSUM A 存和RET 二 多重循环 例710秒延时程序 延时程序与MCS 51执行指令的时间有关 如果使用6MHz晶振 一个机器周期为2 s 计算出一条指令以至一个循环所需要的执行时间 给出相应的循环次数 便能达到延时的目的 编写10秒延时程序 二 多重循环 例710秒延时程序 延时程序与MCS 51执行指令的时间有关 如果使用6MHz晶振 一个机器周期为2 s 计算出一条指令以至一个循环所需要的执行时间 给出相应的循环次数 便能达到延时的目的 10秒延时程序如下 DELAY MOVR5 100DEL0 MOVR6 200DEL1 MOVR7 248DEL2 DJNZR7 DEL2DJNZR6 DEL1DJNZR5 DEL0RET 上例程序中采用了多重循环程序 即在一个循环体中又包含了其它的循环程序 这种方式是实现延时程序的常用方法 使用多重循环时 必须注意 1 循环嵌套 必须层次分明 不允许产生内外层循环交叉 2 外循环可以一层层向内循环进入 结束时由里往外一层层退出 3 内循环可以直接转入外循环 实现一个循环由多个条件控制的循环结构方式 例8在内部RAM中从50H单元开始的连续单元依次存放了一串字符 该字符串以回车符为结束标志 要求测试该字符串的长度 程序如下 START MOVR2 0FFHMOVR0 4FH 数据指针R0置初值LOOP INCR0INCR2CJNE R0 0DH LOOPRET 6查表程序设计 查表程序是一种常用程序 它广泛使用于LED显示控制 打印机打印控制 数据补偿 数值计算 转换等功能程序中 这类程序具有简单 执行速度快等特点 所谓查表法 就是预先将满足一定精度要求的表示变量与函数值之间关系的一张表求出 然后把这张表存于单片机的程序存储器中 这时自变量值为单元地址 相应的函数值为该地址单元中的内容 查表 就是根据变量X在表格中查找对应的函数值Y 使Y f X MCS 51指令系统中 有两条查表指令 MOVCA A PCMOVCA A DPTR 例9一个十六进制数存放在内部RAM的HEX单元的低4位中 将其转换成ASCII码并送回HEX单元 十六进制0 9的ASCII码为30H 39H A F的ASCII码为41H 46H ASCII码表格的首地址为ASCTAB 编程如下 ORG1000HHEXASC MOVA HEXANLA 0FHADDA 3 修改指针MOVCA A PCMOVHEX ARET ASCTAB DB30H 31H 32H 33H 34HDB35H 36H 37H 38H 39HDB41H 42H 43H 44H 45HDB46H在这个程序中 查表指令MOVCA A PC到表格首地址有两条指令 占用3个字节地址空间 故修改指针应加3 例10设有一个巡回检测报警装置 需对96路输入进行控制 每路有一个额定的最大值 是双字节数 当检测量大于该路对应的最大值时 就越限报警 假设R2为保存检测路数的寄存器 其对应的最大额定值存放于31H和32H单元中 查找最大额定值的程序如下 FMAX MOVA R2ADDA R2 表中一个额定值为2个字节MOV31H AMOVDPTR TAB 表首址 MOVCA A DPTR 查表读取第一个字节XCHA 31H 第一个字节内容存入31HINCDPTRMOVCA A DPTR 查表读取第二个字节MOV32H A 第二字节的内容存入32HTAB DW1230H 1450H DW2230H 2440H DW3120H 3300H 例15在一个温度检测系统中 温度模拟信号由10位A D输入 将A D结果转换为对应温度值 可采用查表方法实现 先由实验测试出整个温度量程范围内的A D转换结果 把A D转换结果000H 3FFH所对应的温度值组织为一个表存储在程序存储器中 那么就可以根据检测到的模拟量的A D转换值查找出相应的温度值 设测得的A D转换结果已存入20H 21H单元中 高位字节在20H中 低位字节在21H中 查表得到的温度值存放在22H 23H单元 高位字节在22H中 低位字节在23H中 程序如下 FTMP MOVDPTR TAB DPTR 表首地址MOVA 21H 20H 21H 2CLRCRLCAMOV21H AMOVA 20HRLCAMOV20H AMOVA 21H 表首地址 偏移量ADDCA DPLMOVDPL A MOVA 20HADDCA DPHMOVDPH ACLRAMOVCA A DPTR 查表得温度值高位字节MOV22H ACLRAINCDPTRMOVCA A DPTR 查表得温度值低位字节MOV23H ARETTAB DW 7数制转换 例16将一个字节二进制数转换成3位非压缩型BCD码 设一个字节二进制数在内部RAM40H单元 转换结果放入内部RAM50H 51H 52H单元中 高位在前 程序如下 HEXBCD MOVA 40HMOVB 100DIVABMOV50H AMOVA 10XCHA BDIVABMOV51H AMOV52H BRET 例17设4位BCD码依次存放在内存RAM中40H 43H单元的低4位 高4位都为0 要求将其转换为二进制数 结果存入R2R3中 一个十进制数可表示为 Dn 10n Dn 1 10n 1 D0 100 Dn 10 Dn 1 10 Dn 2 10 D0当n 3时 上式可表示为 D3 10 D2 10 D1 10 D0 BCDHEX MOVR0 40H R0指向最高位地址MOVR1 03 计数值送R1MOVR2 0 存放结果的高位清零MOVA R0MOVR3 ALOOP MOVA R3MOVB 10MULABMOVR3 A R3 10的低8位送R3MOVA BXCHA R2 R3 10的高8位暂存R2MOVB 10 MULABADDA R2MOVR2 A R2 10 R3 10 高8位送R2INCR0 取下一个BCD数MOVA R3ADDA R0MOVR3 AMOVA R2ADDCA 0 加低字节来的进位MOVR2 ADJNZR1 LOOPRET 8运算程序 一 加 减法程序 例18将40H开始存放的10个字节的数与50H开始存放的10个字节的数相减 假设被减数大于减数 设被减数指针为R0 减数指针为R1 差数放回被减数单元 R5存放字节个数 则程序如下 SUB MOVR0 40HMOVR1 50HMOVR5 10CLRCSUB1 MOVA R0SUBBA R1MOV R0 AINCR0INCR1DJNZR5 SUB1RET 二 乘法运算程序在计算机中 常将乘法采用移位和加法来实现 例19将 R2R3 和 R6R7 中双字节无符号数相乘 结果存入R4R5R6R7 此乘法可以采用部分积右移的方法来实现 其程序框图如图4 6所示 程序如下 NMUL MOVR4 0 初始化MOVR5 0CLRCMOVR0 16 NMUL1 MOVA R4 CyR4R5R6R7右移一位RRCAMOVR4 AMOVA R5RRCAMOVR5 AMOVA R6RRCAMOVR6 AMOVA R7RRCMOVR7 AJNCNMUL2 C为移出乘数的最低位MOVA R5 R4R5 R2R3 R4R5 ADDA R3MOVR5 AMOVA R4ADDCA R2MOVR4 ANMUL2 DJNZR0 NMUL1 循环16位MOVA R4 最后结果再移一位RRCAMOVR4 AMOVA R5RRCAMOVR5 AMOVA R6 RRCAMOVR6 AMOVA R7RRCAMOVR7 ARET 图7 6NMUL程序框图 例20假定被乘数在 R4R3 中 乘数放在R2中 乘积放在R7R6和R5中 MCS 51中有8位数的乘法指令MUL 用它来实现多字节乘法时 可表示为 R4R3 R2 R4 28 R3 R2 R4 R2 28 R3 R2 其中 R4 R2 和 R3 R2 都是可直接用MUL指令来实现 而乘以28意味着左移8位 由此可编写如下程序 NMUL1 MOVA R2MOVB R3MULAB R3 R2 MOVR5 A 积的低位送R5MOVR6 B 积的高位送R6MOVA R2MOVB R4MULAB R4 R2 ADDA R6 R3 R2 的高位加 R4 R2 的低位MOVA BADDCA 00H R4 R2 的高位加CyMOVR7 A 结果送R7RET 三 除法运算程序除法是乘法的逆运算 用移位 相减的方法来完成 首先比较被除数的高位字与除数 如被除数高位大于除数 则商为1 并从被除数中减去除数 形成一个部分余数 否则商位为0 不执行减法 然后把新的部分余数左移一位 并与除数再次进行比较 循环此步骤 直到被除数的所有位都处理完为止 一般商的字长为n 则需循环n次 一般计算机中 被除数均为双倍位 即如果除数和商为双字节 则被除数为四字节 如果在除法中发生商大于规定字节 称为溢出 在进行除法前 应该检查是否会产生溢出 一般可在进行除法前 先比较被除数的高位与除数 如被除数高位大于除数 则溢出 置溢出标志 不执行除法 图7 7除法程序的流程 例21将 R4R5R6R7 除以 R2R3 商放在 R6R7 中 余数放在 R4R5 中 NDIV MOVA R5 判商是否产生溢出CLRCSUBBA R3MOVA R4SUBBA R2JNCNDIV1 溢出 转溢出处理MOVB 16 无溢出 执行除法 NDIV2 CLRC 被除数左移一位 低位送0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 复合包装板行业深度研究报告
- 中国袖珍式压力计项目投资可行性研究报告
- 电脑洗板机行业深度研究报告
- 工频整流装置行业深度研究报告
- 化妆品活动策划方案书
- 梦幻夏日抒情作文(5篇)
- 中国大卷重铜带项目投资可行性研究报告
- 定焦镜头镜片行业深度研究报告
- 漂珠粉行业深度研究报告
- 双板滚珠插销行业深度研究报告
- 车辆维修服务项目实施方案
- 人力资源管理知到章节答案智慧树2023年湖南大学
- 创新创业基础(石河子大学)智慧树知到答案章节测试2023年
- 硕士学位论文开题报告模版(山东理工大学)
- 工程水库蓄水安全鉴定报告
- YS/T 704-2009填料用氢氧化铝分析方法电导率的测定
- 2021-2022学年人教版科学五年级上册第9课《显微镜下的细胞》(教案)
- 道路运输企业岗位安全责任清单
- 高中心理健康课件:有效沟通(共18张PPT)
- 中国民航飞行员英语PEPEC900句带翻译
- 面瘫病诊疗方案临床路径
评论
0/150
提交评论