我是新来的。
所以我有如下的指令
SUBS R2, R4, R3
Initial condition N = 0, Z = 0, C = 1, V = 0, Q = 0
寄存器中的值有符号
R2 = 0000 0000 H
R3 = 7FFF FFFE H
R4 = 8000 0002 H
我学到的一个方法是直接减去
8000 0002 H
- 7FFF FFFE H
-------------
0000 0004 H
但使用两个补码-7FFF FFFE H --> +8000 0002
8000 0002 H
+ 8000 0000 H
-------------
1 0000 0004 H
但这没有任何意义,因为8000 0002 H
是一个负数,减去7FFF FFFE H
是一个正数,这应该给予一个大负数。是否溢出,初始条件的进位是否受到影响?
因为在解书中,我得到C=0,没有溢出。
1条答案
按热度按时间q5iwbnjs1#
使用减法你必须借用,你忘记了借用最高位
例如,在基数10中。
我们划掉5,从它旁边的零借用(无限)
如果你想在基数2中做减法,你还必须借用。
纠正你的减法:
使用二进制补码(处理器会看到它)
二进制补码不会破坏数学,这就是它与二进制逻辑实现很好地工作的一点,将减法转换为加法,这是一个更简单的逻辑(有些人可能会争论它更简单,我认为你需要一个进位输入/输出和一个单独的借位输入/输出减法,但加法只是进位)
寄存器限制为32位,您无法神奇地将位添加到寄存器以使其成为33位。
你可以做实验,看看你是否认为手臂是一个反进位,并进行减法。有些架构可以,有些则不行。
永远不要假设进位标志=进位输出(比较/减法),总是确认。