簡體   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