在 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/