欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    80X86汇编语言程序设计⑧.80868088指令系统(五)转移指令[收.pdf

    • 资源ID:56607869       资源大小:129.47KB        全文页数:7页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    80X86汇编语言程序设计⑧.80868088指令系统(五)转移指令[收.pdf

    80X86 汇编语言程序设计第二章 8086/8088 寻址方式和指令系统-(五)转移指令1.无条件转移指令(没有条件碰到就转)(1)无条件段内直接转移指令格式:JMP 标号这条指令使控制无条件地转移到标号地址处。例如:NEXT:MOV AX,CXJMP NEXT;转到 NEXT 处JMP OVER;转到 OVER 处OVER:MOV AX,1无条件段内直接转移指令格式如下:由操作码和地址差值构成。指令的操作码|地址差地址差:是程序中该无条件转移指令的下一条指令的开始地址到转移目标地址(标号所指定的开始地址)的差值。因为,在执行无条件段内转移指令时,实际的动作是把指令中的地址差加到指令指针IP 上,使 IP 之内容为目标地址,从而达到转移的目的。段内无条件直接转移指令中的地址差可用一个字节表示,也可用一个字表示。如果地址差只要用一个字节表示,就称为短转移;如果地址差要用一个字表示,就称为近转移。段内短跳转:(-128127)JMP SHORT QUEST段内近跳转:(64KB)JMP NEAR PTR PROG(2)无条件段内间接转移指令格式:JMP OPRD这条指令使控制无条件地址转移到由操作数OPRD 的内容给定的目标地址处。操作数 OPRD 可以是通用寄存器,也可以是字存储单元。(3)无条件段间直接转移指令格式:JMP FAR PTR 标号这条指令使控制无条件地转移到标号所对应的地址处。标号前的符号“FAR PTR”向汇编程序说明这是段间转移。例如:JMP FAR PTR EXITEXIT 是定义在另一个代码段中的标号。无条件段间直接转移指令的具体动作时把指令中包含的目标地址的段值和偏移分别置入CS和IP。这种在指令中直接包含转移目标地址的转移方式称为绝对转移。(4)无条件段间间接转移指令格式:JMP OPRD这条指令使控制无条件地转移到由操作数OPRD 的内容给定的目标地址处。操作数 OPRD 必须是双字存储单元。例如:JMP DWORD PTR 1234H双字存储单元的低字内容送IP;双字存储单元的高字内容送CS。例如:(IP)=2BC0H,(CS)=0200H,位移量 D=5119H,(BX)=1200H,(DS)=212AH,(224A0)=0600H,(275B9)=098AH试为以下的转移指令找出转移的偏移地址:(求 IP)(1)段内直接寻址(2)使用 BX 及寄存器间接寻址方式的段内间接寻址(3)使用 BX 及寄存器相对寻址方式的段内间接寻址答案:(1)偏移地址=D+IP=5119H+2BC0H=7CD9H(2)JMP BX(16d*DS+BX)=212A0+1200=(224A0)=0600H(3)JMP BX+D(16d*DS+BX+D)=212A0+1200+5119=(275B9)=098AH2.条件转移指令-8086/8088 提供了大量的条件转移指令,它们根据某标志位或某些标志位的逻辑运算来判别条件是否成立。如果条件成立,则转移,否则继续顺序执行。所有条件转移都只是段内转移。条件转移指令不影响标志。有些条件转移指令有两个助记符,还有些条件转移指令有三个助记符。使用多个助记符的目的是便于记忆和使用。条件转移指令使用的最多的转移指令。通常,在条件转移指令前,总有用于条件判别的有关指令。下面的程序测试AX 的低 4位是否全是 0,如果均是是0,那么使CX=0,否则使CX=-1MOV CX,-1;先将 CX=-1TEST AX,0FH;测试 AX 的低 4位JNZ NZERO;不全为 0则转移MOV CX,0;全为 0时使 CX=0NEZRO:从表中可以看出有符号数间的次序关系称为大于(G)、等于(E)、小于(L);无符号数间的次序关系称为高于(A)、等于(E)、和低于(B)。所以,在使用时要注意区分它们。下面程序实现两个无符号数(设在AX 和 BX 中)的比较,把较大的数存放到AX 中,把较小的数存放在BX 中;CMP AX,BXJAE OKXCHG AX,BXOK:如果要比较的两个数是有符号数,则可用下面的程序片段:CMP AX,BXJGE OKXCHG AX,BXOK:无符号数之间大小比较后的条件转移指令和有符号数之间的大小比较后的条件转移指令测试的标志完全不同。无符号数和有符号数,两数是否相等可由ZF 标志的反应。进位标志CF 反应两个无符号数比较后的大小关系。两个有符号数比较后的大小关系由符号标志SF 和溢出标志OF一起来反映。设要比较的两个不相等的有符号数a 和 b 分别存放在寄存器AX 和 BX 中,执行指令“CMP AX,BX”后,标志SF 及 OF 的设置情况和两数的大小情况如下:当没有溢出(OF=0)时,若SF=0,则 ab若 SF=1,则 ab当产生溢出(OF=1)时,若SF=0,ab例如:设X、Y 均为存放在X 和 Y 单元中的 16位操作数,先判X50 否,如满足条件则转移到TOO-HIGH去执行,然后做X-Y,如溢出则转移到OVER 去执行,否则计算|X-Y|,并把结果存入 RESULT 中。MOV AX,XCMP AX,50JG TOO-HIGHSUB AX,YJO OVERJNS NONENEG AX;求补相当于求绝对值(0-AX)NONE:MOV RESULT,AXTOO-HIGH:OVER:例如:假设有100 个 16位无符号数存放在从1234:5678H开始的内存中,现需要求它们的和。设把32 位的和保存在DX(高位)和AX 寄存器中。MOV AX,1234HMOV DS,AXMOV SI,5678HMOV AX,0MOV DX,AXMOV CX,100NEXT:ADD AX,SIADC DX,0INC SIINC SIDEC CXJNZ NEXT例如:在存储器中有一个首地址位ARRAY 的 N 字数组,要求测试其中正数、0、及负数的个数。正数的个数放在DI 中,0的个数放在SI 中,并根据N-DI-SI求得负数的个数放在AX 中,如果有负数则转移到VAL 中去执行。MOV CX,N;把 N 放到 CX 中计数MOV BX,0;BX 清零MOV DI,BX;DI 清零MOV SI,BX;SI 清零AGAIN:CMP ARRAYBX,0;比较 ARRAYBX 和0JLE LESS;如果小于等于0跳到 LESSINC DI;否则,也就是大于,0则 DI+1JMP SHORT NEXT;跳到 NEXTLESS:JL NEXT;如果小于则跳转到NEXTINC SI;否则,就是等于0,则 SI+1NEXT:ADD BX,2;BX=BX+2DEC CX;CX=CX-1JNZ AGAIN;如果 CX 不等于 0,则跳转到AGAINMOV AX,N;将 N 送给 AXSUB AX,DI;AX=AX-DISUB AX,SI;AX=AX-SIJZ SKIP;如果 AX 为0则跳转到SKIPJMP NEAR PTR VAL;否则无条件跳转到VALSKIP:VAL:3.循环指令利用条件转移指令和无条件转移指令可以实现循环,但是为了更加方便于循环的实现,8086/8088 还提供了四条用于实现循环的循环指令。循环指令类似于条件转移指令,不公属于段内转移,而且也采用相对转移的方式,即通过在IP 上加一个地址差的方式实现转移。循环指令中也只用一个字节表示地址差。所以,如果以循环指令本身作为基准,那么循环转移的范围在-126至+129 之间。循环标志不影响各标志位。(1)计数循环指令LOOP格式:LOOP 标号这条指令使寄存器CX 的值减 1,如果结果不等于0,则转移到标号,否则顺序执行;该指令类似于如下的两条指令:DEC CXJNZ 标号通常在利用LOOP指令构成循环时,先要设置好计数器CX 的初值,即循环次数。由于首先进行 CX 寄存器减 1操作,再判结果是否为0,所以最多可循环65536 次。如下程序片段实现把从偏移1000H开始的 512 个字节的数据复制到从偏移3000H开始的缓冲区中MOV SI,1000HMOV DI,3000HMOV CX,512NEXT:MOV AL,SIINC SIMOV DI,ALINC DILOOP NEXT(2)等于/全零循环指令LOOPE/LOOPZ格式:LOOPE 标号LOOPZ 标号这条指令使寄存器CX 的值减 1,当为 0或相等时,(且零标志ZF 等于 1),那么则转移到标号,否则顺序执行。注意指令本身实施的寄存器CX 减1操作部影响标志位。如下:字符串中查找第一个非,A?字符。设字符串长度已保存在CX 中。并且 DS:DI 指向字符串。如果找到,那么使BX 指向该非,A?字符,如果找不到,那么使BX=0FFFFH。MOV AL,ADEC DINEXT:INC DICMP AL,DILOOPE NEXTMOV BX,DIJNE OKMOV BX,-1OK:(3)不等于/非零循环LOOPNE/LOOPNZ格式:LOOPNE 标号LOOPNZ 标号这条指令使寄存器CX 的值减 1,如果结果不为0不相等时,并且零标志ZF 等于 0,那么则转移到标号,否则顺序执行。CX 减1操作部影响标志位。(4)跳转指令JCXZ格式:JCXZ 标号该指令实现当寄存器CX 的值等于 0时转移到标号,否则顺序执行。通常该指令用在循环开始前,以便在循环次数为0时,跳过循环体。例如:JCXZ OKNEXT:LOOP NEXTOK:例如:有一串L 字符的字符串存储于首地址为TABLE的存储器中。如要求在字符串中查找“空格”字符,找到则继续执行,如未找到则转到NOT-FOUND去执行,编制此程序。MOV CX,LMOV SI,-1MOV AL,20H;也可以用MOV AL,NEXT:INC SICMP AL,TABLESILOOPNE NEXTJNZ NOT-FOUNDNOT-FOUND:

    注意事项

    本文(80X86汇编语言程序设计⑧.80868088指令系统(五)转移指令[收.pdf)为本站会员(Q****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开