永发信息网

移位指令SHR移位数大于一

答案:3  悬赏:80  手机版
解决时间 2021-03-11 19:07
  • 提问者网友:不爱我么
  • 2021-03-11 11:56
为什么移位位数大于一要用CL指定移位位数,而不能直接用立即数?
最佳答案
  • 五星知识达人网友:行雁书
  • 2021-03-11 13:03
移位位数大于一要用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楼网友:渡鹤影
  • 2021-03-11 15:13
只要在汇编程序开关加上 .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= 16位汇编就是这么规定的。32位汇编就可以用立即数
  • 2楼网友:忘川信使
  • 2021-03-11 14:11
当时,比尔·盖茨还太年轻。 后来的版本,就好了。 比如你写一条: SHR AX, 4 它就给你编译成四条的机器码: SHR AX, 1 SHR AX, 1 SHR AX, 1 SHR AX, 1
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯