gpt4 book ai didi

assembly - MSP430 CMP运算符

转载 作者:行者123 更新时间:2023-12-04 03:37:33 24 4
gpt4 key购买 nike

假设我有以下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小端字节机器。
IE。低位地址0x439C处的字节被解释为最低有效字节。
高位地址0x439D的字节被解释为有效字节。
因此,内存中的16位值实际上被解释为0x36 + (0x3A << 8) = 0x3A36

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

笔记:
在内存转储中,字节从低到高从左到右列出。
仅对于大型字节序计算机(例如MC680x0),您可以解释内存转储中列出的多字节值;
对于小型字节序机器(例如x86,MSP430),您必须反转多字节值的字节顺序才能正确插入它们。

关于assembly - MSP430 CMP运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25411169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com