- 1、本文档共78页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
*〔例5-5〕二进制输入程序-4rderr: moveax,offseterrmsg ;显示错误信息 calldispmsg jmprdbd1errmsg db0dh,0ah,Inputerror,enteragain:,0rdbd endp*〔例5-6〕有符号十进制数输入程序-1十进制有符号整数转换为补码的算法如下: 1)判断输入了正数、还是负数,用一个寄存器记录 2)判断下一个字符是否为有效数码 字符无效,提示错误重新输入,并转向(1) 字符有效,继续 3)字符有效,减30H转换为二进制数;然后将前面输入的数值乘10,并与刚输入的数字相加得到新的数值 4)判断输入的数据是否超出有效范围超出范围,提示错误重新输入,并转向(1)没有超出范围,则继续 5)重复第(2)~(4)步,输入字符都有效,一直处理完 6)是负数进行求补,转换成补码;否则直接将数值保存*〔例5-6〕有符号十进制数输入程序-2 ;数据段count equ10array ddcountdup(0)temp dd0readbuf db30dup(0) ;代码段 movecx,count movebx,offsetarrayagain: callread ;调用子程序,输入一个数据 moveax,[temp] ;获得出口参数 mov[ebx],eax ;存放到数据缓冲区 addebx,4 dececx jnzagain共享变量传递参数*〔例5-6〕有符号十进制数输入程序-3 ;输入有符号十进制数的子程序read proc ;出口参数:变量TEMP=补码表示的二进制数值 pusheax ;说明:负数用“-”引导 pushebx pushecx pushedxread0: moveax,offsetreadbuf callreadmsg ;输入一个字符串 testeax,eax jzreaderr ;没有输入数据,错误 cmpeax,12 jareaderr ;输入超过12个字符,错误*〔例5-6〕有符号十进制数输入程序-4 movedx,offsetreadbuf;EDX指向输入缓冲区 xorebx,ebx ;EBX保存结果 xorecx,ecx ;ECX为正负标志,0为正,-1为负 moval,[edx] ;取一个字符 cmpal,+ ;是“+”,继续 jzread1 cmpal,- ;是“-”,设置-1标志 jnzread2 movecx,-1read1: incedx ;取下一个字符 moval,[edx] testal,al ;是结尾0,转向求补码 jzread3*〔例5-6〕有符号十进制数输入程序-5read2: cmpal,0 ;不是0~9之间的数码,错误 jbreaderr cmpal,9 jareaderr subal,30h ;是0~9之间的数码,转换 imulebx,10 ;原数值乘10:EBX=EBX×10 jcreaderr ;CF=1,乘积溢出,出错 movzxeax,al ;零位扩展,便于相加 addebx,eax ;原数乘10后,与新数码相加 cmpebx ;数据超过231,出错 jberead1 ;继续转换下一个数位*〔例5-6〕有符号十进制数输入程序-6readerr: moveax,offseterrmsg ;显示出错信息 calldispmsg jmpread0 ;read3: testecx,ecx ;判断是正数还是负数 jzread4 negebx ;是负数,进行求补 jmpread5read4: cmpebx,7fffffffh ;正数超过231-1,出错 jareaderr*〔例5-6〕有符号十进制数输入程序-7read5: mov[temp],ebx ;设置出口参数 popedx popecx popebx popeax ret ;子程序返回errmsg dbInputerror,enteragain:,0read endp共享变量传递参数*5.2.3堆栈传递参数主程序将入口参数压入堆栈,子程序从堆栈中取出参数出口参数通常不使用堆栈传递高级语言进行函数调用时提供的参数,实质也利用堆栈传递采用堆栈传递参数是程式化的,它是编译程序处理参数传递、以及汇编语言与高级语
您可能关注的文档
- 32位汇编语言程序设计 第3版 PPT课件 32位汇编语言03.ppt
- 32位汇编语言程序设计 第3版 PPT课件 32位汇编语言04.ppt
- 32位汇编语言程序设计 第3版 PPT课件 32位汇编语言06.ppt
- 32位汇编语言程序设计 第3版 PPT课件 32位汇编语言07.ppt
- 32位汇编语言程序设计 第3版 PPT课件 32位汇编语言09.ppt
- 32位汇编语言程序设计 第3版 PPT课件 32位汇编语言NASM.ppt
- 201--201-年九年级物理下学期教学工作总结.docx
- 泰坦尼克号禁播内容,你一定想不到.docx
- 2025小红书IP通案-节点节日营销.pptx
- 抖音仔仔-创意蓝海计划.pdf
文档评论(0)