【发布时间】:2018-12-03 13:50:49
【问题描述】:
我正在使用 GNUSim8085 (训练器上的结果也相同)
我对@987654322@ 指令越来越熟悉,而下面的指令似乎并没有按我想要的方式工作。
stc ;to make sure carry is set
mvi a,00h
mvi b,0ffh
adc b
hlt
我希望设置进位标志,因为我们要添加 11111111+00000000+00000001 ,因此显然会产生进位但未设置进位标志。为什么会这样。你能解释一下吗?
还有为什么在下面的代码中生成了进位而不是在上面的代码中:
stc ;to make sure carry is set
mvi a,7dh ; 7dh == 01111101
mvi b,c8h ; c8h == 11001000
adc b
hlt
【问题讨论】:
-
(按照那里的答案建议,尝试使用另一个模拟器)
-
我在trainer上也试过了,结果还是一样
-
@helb 一些编译器和汇编器要求所有整数文字都以数字开头,因此您需要添加前导 0,即使使用
h后缀也是如此。 -
这显然是一个错误。如果结果不适合 8 位,则 8085 手册要求设置 CY。 另外,如果
a和b颠倒了。 (a=0ffh,b=@ 987654331@) 即加法在模拟器中是不可交换的,这不仅与规范相矛盾,而且与底层数学本身相矛盾……