【问题标题】:Is carry flag complemented when subtrahend is converted into 2's complement in 8085 microprocessor?8085微处理器中减数转换为2的补码时进位标志是否补码?
【发布时间】:2018-09-30 00:46:55
【问题描述】:

我正在学习网络课程,并找到了一个解释减法运算的示例。在那个例子中,

A= A5HB= 9BH

并且操作SUB B被执行了。

由于8085微处理器中的减法运算是将减数转换为2的补码再与被减数相加,因此得到的答案是A= (0000 1010)2(see figure)

由于操作后产生进位是很明显的,所以必须设置CY标志,即进位标志。但他们解释如下:

"CY 位好像是‘1’。但是补码后 存储。因此,CY 位存储为‘0’。”

我不明白为什么要称赞carry flag?是因为减数被转换成2的补码还是别的什么?

【问题讨论】:

    标签: flags subtraction 8085 carryflag


    【解决方案1】:

    间接地,是的。

    为了按照 808x 架构的要求使用“借”状态结果进行减法运算,您需要将减数的补数相加,并对 ALU 的进位进行补码以获得“借”位。因此,您补充进位的原因与补充减数的原因相同,但不是直接因为你这样做了。

    一些 CPU 反而有一个“进位/不借位”状态,它使用未补码的进位逻辑。见https://en.wikipedia.org/wiki/Carry_flag#Carry_flag_vs._borrow_flag

    【讨论】:

    • 好的。但是即使进位标志被补码,辅助进位标志的值在这种方法和直接从被减数中减去减数的方法中是不同的。由于标志寄存器的值按照补码的方式是(0000 0100),如果按照直接的方式减法,那么标志寄存器的值就变成了(0001 0100),因为AC(Auxiliary carry flag)的值是0前一种情况,但在减法时,下半字节从设置 AC 标志的上半字节借用。你能解释一下为什么 AC 标志对于同一个操作有不同的值吗?
    • 对不起,我在 808x 的日子里没有做 BCD,也从来没有用过 AC。 SO 的“相关”stackoverflow.com/questions/50221505/… 引用了有关 bitavers 的手册,该手册表明 SUB(和 SBB)AC 是 A 的第 3 位的(未修改)进位加操作数补码(-and-borrow)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多