[英]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.