假设我有以下MSP430组装部分:
r15:
439c
内存映射:
4390: 6045 0200 9c43 6400 8844 5044 363a 0000
码:
448a: cmp #0x363a, 0x0(r15)
4490: jnz $+0x1c
4492: Code continues
.
.
.
44ac: Jump to location
目标是将Z标志设为高。要使用cmp做到这一点,src和dst必须相等。如果我在r15的存储位置中有363a,为什么生成的cmp不会触发Z标志?
通过实验,我发现将3a36放在r15的内存位置中确实触发了Z标志,但是我不明白为什么。
如果有人能发现这一点,我将不胜感激。
如果需要更多信息,我将很乐意提供。
原因是MSP430是一台小端机。
即,较低地址的字节0x439C
被解释为最低有效字节。
高位地址的字节0x439D
被解释为最高有效字节。
因此,内存中的16位值实际上被解释为0x36 + (0x3A << 8) = 0x3A36
。
这也解释了为什么在交换两个字节时都设置Z标志。
注意:
在内存转储中,字节从低到高从左到右列出。
仅对于大型字节序计算机(例如MC680x0),您可以解释内存转储中列出的多字节值;对于小型字节序机器(例如x86,MSP430),您必须反转多字节值的字节顺序以正确地使它们交错。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句