繁体   English   中英

MSP430 CMP运算符

[英]MSP430 CMP operator

假设我有下面的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),您必须反转多字节值的字节顺序才能正确插入它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM