首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSP430 CMP算子

MSP430 CMP算子
EN

Stack Overflow用户
提问于 2014-08-20 17:41:51
回答 1查看 3.2K关注 0票数 10

假设我有下面的MSP430装配部分:

r15:

代码语言:javascript
复制
439c

内存地图:

代码语言:javascript
复制
4390:   6045 0200 9c43 6400 8844 5044 363a 0000

代码:

代码语言:javascript
复制
448a:  cmp  #0x363a, 0x0(r15)
4490:  jnz  $+0x1c
4492:  Code continues
.
.
.
44ac: Jump to location

我们的目标是让Z旗高高升起。若要使用cmp执行此操作,src和dst必须相等。如果在r15的内存位置中有363 a,为什么产生的cmp不触发Z标志?

通过实验,我发现将3a36放在r15的内存位置实际上触发了Z标志,但我不明白为什么。

如果有人能把这件事曝光,我会非常感激的。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-20 22:04:47

原因是MSP430是一台小终端机器。

也就是说,低地址处的字节0x439C被解释为最小有效字节。

较高地址0x439D上的字节被解释为最重要的字节。

因此,内存中的16位值实际上被解释为0x36 + (0x3A << 8) = 0x3A36

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

注意:

在内存转储中,字节从左到右,从低地址到高地址。

只有对于大终端计算机(例如MC680x0),才能解释内存转储中列出的多字节值;对于小endian机器(如x86、MSP430),您必须反转多字节值的字节顺序,才能正确地替换它们。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25411169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档