MSP430 CMP运算符

时间:2014-08-20 17:41:52

标签: assembly msp430

让我们说下面有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标志,但我不明白为什么。

如果有人能说清楚,我会非常感激。

如果需要更多信息,我很乐意提供。

1 个答案:

答案 0 :(得分:11)

原因是MSP430 little endian 机器 即较低地址0x439C处的字节被解释为最少重要字节。
较高地址0x439D的字节被解释为最多重要字节 因此,内存中的16位值实际上被解释为0x36 + (0x3A << 8) = 0x3A36

这也解释了为什么在交换两个字节时设置Z标志的原因。

注意:
在内存转储中,从低到高的地址从左到右列出字节 仅适用于大端机器(例如MC680x0),您可以解释内存转储中列出的多字节值; 对于小端机器(例如x86,MSP430),你必须颠倒多字节值的字节顺序才能正确地插入它们。