簡體   English   中英

16位Thumb-2匯編指令集中的“更新條件標志” S如何編碼?

[英]How is the “update condition flags” S encoded in the 16-bit Thumb-2 assembly instruction set?

因此,我需要為類編寫一個非常基本的反匯編程序,而且我很難確定可以附加到Thumb指令的S是如何編碼的。

例如,指令0x0011與以下匯編代碼相對應:

movs    r1, r2

為什么這不是常規動作?

同樣,0x1889對應於:

adds    r1, r1, r2

據閱讀參考手冊所知,這與不帶S的常規加法指令的編碼相同。是這種情況嗎? 如何發送條件標記更新指令?

gnu匯編器很煩人,弄亂了指令集,但這是另一回事了。 對於拇指模式,請不要抱怨它,但是由於您沒有選擇的余地,所以它總是存在的。 只需做一個加法r1,r2的組裝,然后反匯編,如果您仔細檢查並查看與手冊說的相對的機器指令,它也會顯示更新標志,您還將看到加法r1,r2。

0x0011是lsl immed_5,rm,rn,因此是lsl r1,r2,#0(不是加號)。

0x1889確實是加法r1,r1,r2。 s並不暗示它在拇指指令集中。

Thumb不會為每條指令使用S條件字段,因此每條指令都是無條件的(顯然,除了條件分支之外)。 從32位ARM減少到16位Thumb的一部分涉及到擺脫它。 您提供的例子不應該有s ,首先,在我看來(他們沒有得到在使用本手冊 )。

Thumb中的條件代碼由ALU指令(與ARM相同)隱式設置,但是要訪問它們,您需要使用條件分支。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM