6502 汇编:对算术感到困惑
我对 6502 汇编和十六进制不太熟悉,所以我对算术的工作原理感到非常困惑。
例如:
LDA #$c0
TAX
INX
ADC #$c4
BRK
c0 + c4
对于一个字节而言太大,意味着它是 192 + 196
。因此设置进位标志并产生十六进制值84
。
但另一方面,仅执行 LDA #$c0
会设置负标志,这意味着 c0
实际上不是 92
而是 -64。所以操作变成
-64 + -60
。结果是-124
。这将“适合”,因为它仍然是十六进制值 84
。
我就是无法理解它。 6502 汇编是否使用 0
到 255
作为十六进制值,还是使用 -127
到 127
?上面的代码为什么要设置进位标志呢?
I'm new to 6502 Assembly and hexadecimal in general, so I'm really confused about how arithmetics work.
For example:
LDA #$c0
TAX
INX
ADC #$c4
BRK
c0 + c4
is too big for a byte, implying that it's 192 + 196
. Thus setting the carry flag and resulting in the hex value 84
.
But on the other hand, doing only LDA #$c0
sets the negative flag, implying that c0
isn't actually 92
but -64
. So the operation becomes -64 + -60
. That result is -124
. That would "fit" as it's still the hex value 84
.
I just can't wrap my head around it. Does 6502 Assembly use 0
to 255
for hex values or -127
to 127
? Why does the code above set the carry flag?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论