假设我们有以下内容:
MOVE.L #$1234ABCD,D0
MOVE.L #$45670012,D1
MULS D0,D1
D1 的价值是多少?
我注意到 146A 值与模拟器中的值相同,但 FFFA 从何而来?是不是模拟器错了?
我对摩托罗拉的代码了解为 0,但我认为这与您使用带符号的乘法器有关?尝试使用无符号乘数。
其他评论已经正确地告诉了发生了什么。这只是一个(希望如此)清晰的总结:
无符号乘法:
MOVE.L #$1234ABCD,D0
MOVE.L #$45670012,D1
MULU D0,D1
会像下面这样计算
0xABCD x 0x0012 = 0x000C146A
D1之后的内容是什么
而在带符号的乘法中:
MOVE.L #$1234ABCD,D0
MOVE.L #$45670012,D1
MULS D0,D1
0xABCD 是值 -0x5433
的 2 的补码表示-0x5433 x 0x0012 = -0x0005EB96
32 位 2 的补码中的数字是 0xFFFA146A,这是 D1 中的结果。
在这两种情况下,因子的高位词无关紧要。
PS:您可以使用任何十六进制计算器轻松检查补码: 0x100000000 - 0x0005EB96 = 0xFFFA146A