- 1、本文档共112页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PC汇编语言程序设计课件_第8章_子程序设计
例 8.4 三个精度相同的多精度数NUM1、 NUM2、 NUM3, 按照由高到低的次序存放在内存单元中,精度的字节数存放在COUNT单元, 试编程求上述三个多精度数的和,并将结果存放在RESULT开始的单元中。 两个多精度数求和采用子程序结构设计可以简化整个程序。 在编程时要注意的是:① 首次进入循环时,要清进位位;② 为了得到正确的运算结果, 和的精度应该比加数与被加数的精度高。 两个多精度数求和的过程如图 8.5 所示, 程序如下: 图 8.5 多精度数相加示意图 MYDATA SEGMENT NUM1 DB 12H, 23H, 56H, 78H, 98H NUM2 DB 23H, 76H, 43H, 20H, 18H NUM3 DB 14H, 22H, 27H, 18H, 19H COUNT DW 05H RESULT DB 20H DUP(?) MYDATA ENDS STACK1 SEGMENT PARA STACK DW 40H DUP(0) STACK1 ENDS MYCODE SEGMENT ASSUME DS:MYDATA, CS: MYCODE, SS: STACK1 MAIN:MOV AX, MYDATA MOV DS, AX LEA SI, RESULT PUSH SI ; 存放结果首址压堆栈 INC SI MOV SI, OFFSET NUM1 PUSH SI ; 加数首址压栈 MOV SI, OFFSET NUM2 PUSH SI ; 被加数首址压栈 MOV SI, COUNT PUSH SI ; 多精度数字节数入栈 … … CALL MULADD ; 调用多精度数求和子程序 LEA SI, RESULT PUSH SI ; 存放结果首址压堆栈 PUSH SI ; 加数首址压栈 MOV SI, OFFSET NUM3 PUSH SI ; 被加数首址压栈 MOV SI, COUNT PUSH SI ; 多精度数字节数入栈 CALL MULADD ; 调用多精度数求和子程序 MOV AH, 4CH INT 21H ; 返回DOS … … MULADD PROC NEAR PUSH AX PUSH CX MOV BP, SP MOV CX, [BP+6] ; 从堆栈取出多精度数字节数 MOV SI, [BP+8]; 从堆栈取出加数首址 MOV DI, [BP+10]; 从堆栈取出被加数首址 MOV BX, [BP+12]; 从堆栈取出保存结果首址 ADD SI, CX ; 计算被加数最低字节地址 ADD DI, CX ; 计算加数最低字节地址 ADD BX, CX INC BX ; 计算保存结果单元的最低字节地址 CLC ; 清进位位 NEXTB: MOV AL, [SI] MOV [BX], AL MOV AL, [DI] ; 加数送结果单元 ADC [BX], AL ; 被加数加到结果单元 DEC DI DEC SI DEC BX ; 修改指针 LOOP NEXTB XOR AL, AL ; 和的最高字节加进位 ADC [BX], AL POP CX ; 恢复信息 POP AX RET 8 ; 返回调用程序并释放入栈参数占用的堆栈空间 MULADD ENDP MYCODE ENDS END MAIN 例 8.5 从键盘输入一个十进制数(最
文档评论(0)