移位指令SHR移位数大于一

为什么移位位数大于一要用CL指定移位位数,而不能直接用立即数?... 为什么移位位数大于一要用CL指定移位位数,而不能直接用立即数? 展开
 我来答
可轩163
2014-12-08 · TA获得超过1.3万个赞
知道大有可为答主
回答量:4824
采纳率:88%
帮助的人:1801万
展开全部
只要在汇编程序开关加上 .286 或 .386 或 .486 ,……
可以用大于1的立即数作为右移位数,例如:

.286 ;;请留意,286左边有个点
CODES SEGMENT
ASSUME CS:CODES,DS:CODES
START: MOV AL, 0FFH
SHR AL ,6
INT 3
CODES ENDS
END START

;;AL初值 =FFH= 1111 1111b
;;执行SHR AL,6 ,右移6位,结果AL =03H =0011B
;;以上源程序编译链接生成EXE可执行程序,在WIN7的DOS中,用 debug 运行通过。
帐号已注销
2014-12-07 · TA获得超过3000个赞
知道大有可为答主
回答量:1338
采纳率:75%
帮助的人:1306万
展开全部
16位汇编就是这么规定的。32位汇编就可以用立即数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2014-12-09 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
当时,比尔·盖茨还太年轻。

后来的版本,就好了。

比如你写一条:
SHR AX, 4

它就给你编译成四条的机器码:
SHR AX, 1
SHR AX, 1
SHR AX, 1
SHR AX, 1
追问
原来如此。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4327fcbb9b
2015-11-23 · 知道合伙人教育行家
百度网友4327fcbb9b
知道合伙人教育行家
采纳数:26422 获赞数:292080
从师范学校毕业后一直在现在单位工作

向TA提问 私信TA
展开全部
  移位位数大于一要用CL指定移位位数,而不能直接用立即数,是因为那是最开始的老版本了,后来的新版本已经可以实际直接用立即数了。
  移位操作指令是一组经常使用的指令,属于汇编语言逻辑指令中的一部分,它包括移位指令(含算术移位指令、逻辑移位指令),循环移位指令(含带进位的循环移位指令),双精度移位指令三大类。其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数(0~255)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。
  一般格式 移位操作符(如SHR) OPR,CNT.
  其中OPR用除立即数外的任何寻址方式。移位次数由CNT决定,在8086中可以是1或CL,CNT为1时只移一位;如果需要移位的次数大于1时,需要先将移位次数存入CL寄存器中,而移位指令中的CNT写为CL即可。在其他机型中可使用CL和CNT,且CNT的值除可用1外,还可以用8位立即数指定范围从1到31的移位次数。有关OPR和CNT的规定适用于以下所有指令操作。具体格式如下所述。以逻辑右移为例。
  如:MOV AX,62H
  SHR AX,1
  当移位数大于1时,需要先将移位数放进CL中然后再进行移位操作。
  如:MOV AL,62H
  MOV CL,4
  SHR AL,CL
  条件标志位
  CF(进位标志) = 移入的数值
  1 CNT=1时,最高有效位的值发生变化
  0 CNT=1时,最高有效位的值不变
  移位指令:
  SF(符号标志)、ZF(零标志)、PF (奇偶标志)根据移位结果设置,AF(辅助进位标志)无定义
  循环移位指令:
  不影响 SF、ZF、PF、AF
  条件标志位应用于具体的操作数中使用,以下叙述中未详细写明,初学者可不予理会。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式