assembly 摩托罗拉68K文字存储

uplii1fm  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(132)

有人能解释一下为什么FF00被存储在d1之后:

MOVE.W  #$FFFF, d1
ADD.B   #1, d1

字符串
我知道一个字在68k架构中是16位,但想知道为什么结果是FF00而不是00FF,如果使用MOVE.BMOVE.L会有什么变化?

dhxwm5r4

dhxwm5r41#

move.w指令将FFFF放入d1.w,这是32位d1的低16位。高16位不受此移动的影响,因此如果没有更多信息,我们无法说出d1d1.l)中的内容,但我们知道d1中有XXXXFFFF(其中x表示未知)。
因为add.b是一个字节大小的操作,所以它与d1.b相加,d1.bd1的低8位。该指令所加的是FF和01。数学上,加法结果是0x100,然而,由于这是一个8位加法指令,结果被截断为0x00(如果程序想知道溢出是有符号的还是无符号的,则设置条件码)。加在一起并截断为8位,我们得到00,因此d1的低8位(又名d1.b)将保持00。d1.w的16位将保持FF00,然后因为FF部分不受add.b的影响,因此该部分从先前的值(由move.w设置)结转。
32位寄存器d1将保存XXXXFF00,其中,由于它来自之前未显示的某些代码序列,因此不知道该位。
如果使用move.b,我们就不能访问d1寄存器的高24位,因为它们不受代码序列的影响。结果将是d1寄存器中的xxxxxx00,其中x表示不知道。
如果使用move.l,我们将肯定地知道d1寄存器的完整值:0000FFFF将是移动后的初始值,0000FF00是add.b后的最终值。

相关问题