汇编语言程序设计经典.pptVIP

  1. 1、本文档共98页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编语言程序设计经典

例题14:显示有符号十进制数 子程序在屏幕上显示一个有符号十进制数;子程序还包含将二进制数转换为ASCII码的过程 显示时,负数用“-”引导,正数直接输出、没有前导字符 子程序的入口参数用共享变量传递,主程序调用该子程序显示10个数据 转换算法 例题14-1/5 .data count = 10 array dw 1234,-1234,0,1,-1,32767 dw -32768,5678,-5678,9000 wtemp dw ? ;共享变量 .code .startup mov cx,count mov bx,offset array again: mov ax,[bx] mov wtemp,ax ;将入口参数存入共享变量 call write ;调用子程序显示一个数据 inc bx inc bx call dpcrlf ;便于显示下一个数据 loop again .exit 0 例题14-2/5 ;显示有符号10进制数的通用子程序 ;入口参数:共享变量wtemp write proc push ax push bx push dx mov ax,wtemp ;取出显示数据 test ax,ax ;判断零、正数或负数 jnz write1 mov dl,0 ;是零,显示“0”后退出 mov ah,2 int 21h jmp write5 例题14-3/5 write1: jns write2 ;是负数,显示“-” mov bx,ax ;AX数据暂存于BX mov dl,- mov ah,2 int 21h mov ax,bx neg ax ;数据求补(求绝对值) write2: mov bx,10 push bx ;10压入堆栈,作为退出标志 转换算法 例题14-4/5 write3: cmp ax,0 ;数据(余数)为零 jz write4 ;转向显示 sub dx,dx ;扩展被除数DX.AX div bx ;数据除以10:DX.AX÷10 add dl,30h ;余数(0~9)转换为ASCII码 push dx ;数据各位先低位后高位压入堆栈 jmp write3 write4: pop dx ;数据各位先高位后低位弹出堆栈 cmp dl,10 ;是结束标志10,则退出 je write5 转换算法 例题14-5/5 mov ah,2 ;进行显示 int 21h jmp write4 write5: pop dx pop bx pop ax ret ;子程序返回 write endp ;使光标回车换行的子程序 dpcrlf proc ... ;省略 dpcrlf endp end 二进制数转换为ASCII码 ① 首先判断数据是零、正数或负数,是零显示“0”退出 ② 是负数,显示“-”,求数据的绝对值; ③ 接着数据除以10,余数加30H转换为ASCII码压入堆栈 ④ 重复③步,直到余数为0结束 ⑤ 依次从堆栈弹出各位数字,进行显示 本例采用16位寄存器表达数据,所以只能显示+327677~-32768间的数值 但该算法适合更大范围的数据 例题15:计算有符号数平均值 子程序将16位有符号二进制数求和,然后除以数据个数得到平均值 子程序的入口参数利用堆栈传递,主程序需要压入数据个数和数据缓冲区的偏移地址。子程序通过BP寄存器从堆栈段相应位置取出参数 子程序的出口参数用寄存器AX传递 主程序提供10个数据,并保存平均值 避免溢出 例题15-1/4 .data count = 10 array dw 1234,-1234,0,1,-1,32767 dw -32768,5678,-5678,9000 wmed dw ? ; 存放平均值 .code .startup mov ax,count push ax ;压入数据个数 mov ax,offset array push ax ;压入缓冲区偏移地址 call mean ;调用子程序求平均值 add sp+4 ;平衡堆栈 mov wmed,ax ;保存平均值(不含余数) .exit 0 例题15-2/4 ;计算16位有符号数平均值子程序 ;入口参数:顺序压入数据个数和缓冲区偏移地址 ;出口参数:AX=平均值 mean proc push bp mov bp,sp push bx ;保护寄存器 push cx push dx push si push di 例题15-3/4 mov bx,[bp+4] ;从堆栈取出偏移地址 mov cx,[bp+6] ;从堆栈取数据个数 xor si,si ;SI保存求和的低16位值 mov di,

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档