循环程序设计汇编.pptx

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
循环程序设计汇编

第5章 循环程序设计 5.1 简单循环程序 5.2 多重循环程序 5.1 简单循环程序 在汇编语言中,实现循环的指令有两种,一种是LOOP指令,它适用于循环次数已知的情况,用CX 寄存器保存循环次数;另一种是JMP指令,它根据当前的条件判断可以跳转到不同的地方继续执行程序,适用于根据循环条件执行循环的情况。 例5.1 判断一个数是否为素数。在数据段中存有一个字数据m,判 断m是否是素数并输出判断的结果。 题目分析:判定数m是否为素数,用m除以i,i从2到m-1,如果所有余数都不为0,则m 为素数,若任何一步中的余数为0,都可以立即中止循环,而断定m 不是素数。 data segment m dw 4 mess1 db It is a prime!,13,10,$ mess2 db It is not a prime!,13,10,$ data ends stack segment dw 100h stack ends code segment main proc far assume cs:code,ds:data,ss:stack start: push ds sub ax,ax push ax mov ax,data mov ds,ax mov ax,stack mov ss,ax mov cx,2 decd: lea si,m mov ax,ds:[si] cwd div cx cmp dx,0 jz break inc cx cmp cx,[si] jl decd yes: lea dx,mess1 jmp disp break: lea dx,mess2 disp: mov ah,09 int 21h exit: mov ax,4c00h int 21h main endp code ends end start 在汇编程序中,要注意,各个指令的默认条件。如本题中,指令div cx执行之前,要先把数据m存入寄存器ax,因为DIV cx 指令的执行为:(dx,ax)/(cx),商→(ax),余数→(dx),所以,div指令执行之前先进行符号扩展。同时注意,div指令执行之后,ax寄存器的内容不再是m了,而变成了除法得到的商,所以,下一次的循环体执行时,不仅让除数cx增加1,还要注意恢复ax的值,重新存入m的值。因此,循环体从decd: lea si,m mov ax,ds:[si] cwd div cx 开始,而不是仅仅从cwd div cx开始。 例5.2 在未排序的数组中查找并删除某数。在附加段中存放一个未排序的字数组list,第一个字中存放数组长度。从键盘输入一个数字,放在ax寄存器中,在数组list中查找是否存在该数字。如果存在,则把它从数组中删除,否则,输出未找到该数的信息 题目分析:先从键盘输入一个数字字符,转化为数字存入ax中。然后,依次与数组list中的各个数字比较,查找是否存在该数,如果存在,则把数组中后面的元素依次向左移动一个位置,实现删除该数的目的,同时修改数组长度。若查找的数字正好位于数组末尾,则直接修改数组长度。 查找的过程,利用比较指令即可;删除的部分,利用循环指令把[di]←[di+2]。查找结束时di 指针指向的就是要删除的元素的位置,也即实现[di]←[di+2]的di初始值 data segment list dw 10,2,34,0,1,56,90,32,-8,0,12 data ends stack segment dw 100h stack ends code segment main proc far assume cs:code,es:data,ss:stack start: push ds sub ax,ax push ax mov ax,data mov es,ax mov ds,ax mov ax,stack mov ss,ax mov ah,01 int 21h sub al,30h cbw lea di,list cld push di mov cx,es:[di] cmpdig: add di,2 cmp ax,es:[di] je delt loop cmpdig pop di jmp short exit delt: jcxz dec_cnt next: mov bx,es:[di+2] mov es:[di],bx add di,2 loop next dec_cnt:

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档