- 1、本文档共69页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
RRC A MOV R6, A MOV A, R7 RRC A MOV R7, A RET 图4.6 NMUL程序框图 例 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: MOV A, R2 MOV B, R3 MUL AB ; (R3)×(R2) MOV R5, A ; 积的低位送R5 MOV R6, B ; 积的高位送R6 MOV A, R2 MOV B, R4 MUL AB ; (R4)×(R2) ADD A, R6 ; (R3)×(R2)的高位加(R4)×(R2)的低位 MOV A, B ADDC A, #00H ; (R4)×(R2)的高位加Cy MOV R7, A ; 结果送R7 RET 三、 除法运算程序 除法是乘法的逆运算, 用移位、 相减的方法来完成。 首先比较被除数的高位字与除数, 如被除数高位大于除数, 则商为1, 并从被除数中减去除数, 形成一个部分余数; 否则商位为 0, 不执行减法。 然后把新的部分余数左移一位, 并与除数再次进行比较。循环此步骤, 直到被除数的所有位都处理完为止,一般商的字长为 n, 则需循环n次。 一般计算机中, 被除数均为双倍位, 即如果除数和商为双字节, 则被除数为四字节。如果在除法中发生商大于规定字节, 称为溢出。 在进行除法前, 应该检查是否会产生溢出。一般可在进行除法前, 先比较被除数的高位与除数, 如被除数高位大于除数, 则溢出, 置溢出标志, 不执行除法。 图 4.7 除法程序的流程 例 21 将(R4R5R6R7)除以(R2R3), 商放在(R6R7)中, 余数放在(R4R5)中。 NDIV: MOV A, R5 ; 判商是否产生溢出 CLR C SUBB A, R3 MOV A, R4 SUBB A, R2 JNC NDIV1 ; 溢出, 转溢出处理 MOV B, #16; 无溢出, 执行除法 NDIV2: CLR C ; 被除数左移一位, 低位送 0 MOV A, R7 RLC A MOV R7, A MOV A, R6 RLC A MOV R6, A MOV A, R5 RLC A MOV R5, A XCH A, R4 RLC A XCH A, R4 MOV F0, C ; 保护移出的最高位 CLR C SUBB A, R3 ; 部分余数与除数比较 MOV R1, A MOV A, R4 SUBB A, R2 JB F0, NDIV3; 移出的高位为 1, 肯定够减 JC NDIV4 ; 否则, (Cy) = 0才够减 NDIV3: MOV R4, A ; 回送减法结果 MOV A, R1 MOV R5, A INC R7 ; 商上1 NDIV4: DJNZ B, NDIV2; 循环次数减 1 ,若不为零则循环 CLR F0 ; 正常执行无溢出 F0 = 0 RET NDIV1: SETB F0 ; 溢出F0=1 RET 4.2.7 数制转换 例 16 将一个字节二进制数转换成 3 位非压缩型BCD码。 设一个字节二进制数在内部RAM 40H单元, 转换结果放入内部 RAM 50H#, 51H, 52H单元中(高位在前), 程序如下: HEXBCD: MOV A, 40H MOV B, #100 DIV AB MOV 50H, A MOV A, #10 XCH A, B DIV AB MOV 51H, A MOV 52H, B RET 例 17 设 4 位BCD码依次存放在内存 RAM中 40H~43H单元的低4 位, 高 4
文档评论(0)