关于 SUBWF f [,d] 指令疑问

2019-07-16 07:03发布

最近在看十速芯片资料,碰到“SUBWF  f [,d] ”这样的指令,资料中给出的例子有点迷惑
请高手释疑!
资料上这样描述的:
  指令描述:寄存器‘f’ 的值减去W寄存器中的值(2的补码运算),运算结果存于目标寄存器。
  举例:
              SUBWF  REG1 , 1     执行前:REG1=3,W=2,C=?,    Z=?
                                             执行后:REG1=1,W=2,C=1, Z=0
              SUBWF  REG1 , 1     执行前:REG1=2,W=2,C=?, Z=?
                                             执行后:REG1=0,W=2,C=1, Z=1
             SUBWF  REG1 , 1     执行前:REG1=1, W=2, C=?,Z=?
                                             执行后:REG1=FFh,W=2,C=0,Z=0

我是这么理解的:如果REG1>=W,说明够减,执行结果存放在REG1中,如果REG1<W,
说明不够减,执行的结果为负数,则用其补码形式表示,存放于REG1中。

这样理解对吗?还有那个标志位‘C’的值怎么理解?跟51的不一样,费解啊!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
z00
2019-07-16 07:20
计算机的所有减法都是做加法,也就是加上补码。
SUBWF REG1 , 1 执行前:REG1=3,W=2,C=?, Z=?
执行后:REG1=1,W=2,C=1, Z=0
(解释:计算机的二进制值分别是REG1=00000011,W=11111110(这是补码),
相加后00000001,有进位,C=1,奇,Z=0)
第二个自己算,也就进位,偶。
第三个,REG1=00000001,W=11111110,相加后11111111,没有进位,C=0,偶,Z=0。
就是这样。。。。
C标志位是和51一样的意义。

一周热门 更多>