assembly - 在 8088/86 上,CL 的移位/旋转是否会改变 CL 中的值?

标签 assembly x86 x86-16

在 iAP88/86 文档中,移位和循环的时序信息取决于 CL 中的移位计数 (p2-64)。这似乎暗示它在 CL 中循环计数,进行那么多单位移位。

所以我的问题是,在循环/移位完成后,CL 是否仍然具有相同的值,或者操作是否对它进行倒计时,类似于 LOOP 指令的行为方式?

最佳答案

在 Intel 8088 上,按 CL 中的值移位或旋转会使 CL 保持不变。对于这些指令也是如此:RCL RCR ROL ROR SAL SAR SHL SHR

Intel 8088 上这些指令的语义在 iAPX 88 Book from July 1981 中指定。 .

以ROL进行阐述,语法为:ROL destination,count

编码规范确定了语义规范中使用的符号 COUNT 的值。对于相关的指令形式,CL 的值被分配给符号:

if v = 0 then COUNT = 1
else COUNT = (CL)

语义规范表明符号 COUNT 的值被分配给一个临时变量。寄存器 CL 永远不会改变。

(temp) ← COUNT
do while (temp) ≠ 0
  (CF) ← high-order bit of (EA)
  (EA) ← (EA) * 2 + (CF)
  (temp) ← (temp)-1
if COUNT = 1 then
  if high-order bit of (EA) ≠ (CF)
    then (OF) ← 1
  else (OF) ← 0
else (OF) undefined

关于assembly - 在 8088/86 上,CL 的移位/旋转是否会改变 CL 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44376990/

相关文章:

assembly - 是否可以在 RAM 中执行一些计算?

assembly - EAX 寄存器的反转字节顺序

assembly - 将 .data 部分中定义的整数移至寄存器

assembly - x86 程序集 : Output from swap function is incorrect even when the implementation is correct

linux - 使用系统调用在程序集中保存 DNS 响应

linux - 空终止字符串,打开文件进行读取

assembly - 如果不添加 start : and end start in EMU8086? 会发生什么

assembly - x86和x64架构的汇编语言有什么区别?

assembly - 获取数据段中初始化的变量的地址

assembly - 在汇编中声明和定义数组和矩阵?