第6章-高级编程技术.ppt

  1. 1、本文档共150页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 六 章 6.1 移位指令及循环移位指令 所谓高级编程技术,是指在汇编语言程序设计中,如果我们把移位及循环移位指令、串操作指令和宏指令巧妙地应用到汇编语言程序设计中,将大大提高编程质量和编程效率。 本章主要介绍这三类指令:移位及循环移位指令、串操作指令和宏指令的功能,并通过大量例子说明其应用。 6.1 移位指令及循环移位指令 移位指令完成对操作数的移位操作。分为一般移位和循环移位指令。移位操作也是将操作数倍增和减半的有效方法。 6.1.1 移位指令 (1)逻辑左移指令 【指令格式】 ?SHL D,COUNT D为通用寄存器或存储器操作数。 COUNT表示移位的次数。 移位一次,COUNTR=1; 移位多次,COUNT=CL (CL中为移位的次数)。 【功能】对给定的目的操作数D(8位/16位)左移COUNT次。最高位移入CF中,最低位补零。 其操作示意图如图6-1所示。 例如:如下逻辑左移指令:SHL AL,1MOV CL,3SHL CX,1SHL DX,CLSHL ALFA[DI],1SHL ALFA[DI],CL 说明:本指令影响标志位:OF、PF、SF,ZF。CF决定移入的最高位。 本指令主要用于向左移位操作。但因为左移一位相当于权值提高一级,故本指令又常作有、无符号数的倍增操作。 但请注意,在左移一次后,当新的操作数最高位与CF不相同时,则OF置1,表明有符号数操作产生溢出,不再符合倍增关系。对无符号数,当移位后使CF置1,则不再符合倍增关系。 例如: AL(66)/(+66) 左移一位后: AL132)/ (-124),CF=0,OF=1 上例表明,对无符号数,移位后CF=0,故移位前后数间符合倍增关系(66*2=132);而对有符号数,移位后OF=1发生了溢出,所以移位前后数间不再符合倍增关系(+66*2≠-124) 【例6-1】编写程序段,把AX中的无符号数乘以8,如果有溢出,忽略超过16位的部分。 【分析】乘以8的操作可以通过在二进制数的后面加3个0完成,即左移3位,移出部分自动丢失。只需要在CL中放移动位数(3位),再用SHL指令移位即可: 【解】指令序列如下:MOV CL,3 SHL AX,CL 对于双字型数据,或者位数更多的复杂数据,也可以用移位指令与逻辑运算指令配合,简化乘除法的运算。 ⑵逻辑右移指令 【指令格式】SHR D,COUNT D为任一通用寄存器或存储器操作数。 COUNT表示移位次数。 移位一次,COUNT=1; 移位多次,COUNT=CL (CL中为移位的次数)。 【功能】对给定的目的操作数D(8位/16位)右移COUNT次。最低位移入CF中,最高位补零。 其操作示意如图6-2所示。 例如:如下指令: SHR AL,1MOV CL,3 SHR SI,CLSHR DX,CL SHR ALFA[DI],1SHR ALFA[DI],CL 说明: 本指令影响标志位:OF、PF、SF,ZF。CF决定移入的最低位。 同样,本指令主要用于右向逻辑移位操作。但右移一位,相当权值下降一级。所以本指令可作为无符号数的除2运算。但请注意,在右移后,如果新的CF=1,表明移位前的数是一个奇数,则减半的结果是不精确的。 (3)算术左移指令 【指令格式】SAL D,COUNT D为任一通用寄存器或存储器操作数。 COUNT表示移位次数。 移位一次,COUNT=1; 移位多次,COUNT=CL。 (CL中为移位的次数) 【功能】对给定的目的操作数D(8位/16位)算术左移COUNT次。最高位移入CF中,最低位补零。 其操作示意图与图6.1完全相同。 说明:实际上SAL与SHL是同一指令的两种表示方法。具有完全相同的功能。它一般用来作为有符号数的倍增运算。 在左移一次后,如果新的CF与新的操作数最高位不相同,则标志OF=1。表明移位前、后的操作数不再具有倍增关系。 ⑷算术右移指令 【指令格式】SAR D,COUNT D为任一通用寄存器或存储器操作数。 COUNT表示移位次数。 移位一次,COUNT=1; 移位多次,COUNT=CL。 (CL中为移位的次数) 【功能】对给定的目的操作数D(8位/16位)右移COUNT次。最低位移入CF中,最高位保持不变。 其操作示意如图6-3所示。 例如:(如下指令)SAR AL,1MOV CL,6SAR BX,CLSAR BX,1SAR BETA[BX],1SAR BETA[BX],CL 说明:本指令影响标志位:PF、SF,ZF。CF决定移入的最低位。同样,本指令常用于有符号数的减半运算。 但在右移使CF=1时,会

文档评论(0)

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

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

版权声明书
用户编号:5311233133000002

1亿VIP精品文档

相关文档