2017-09-20 115 views
0

這是家庭作業,所以我寧願被推向正確的方向,而不是用勺子餵飽答案。將彙編指令轉換爲十六進制格式?

任務:給二進制和十六進制編碼以下說明

SBC R0, R12, R6 

使用來自教授的一些指令,我已經能夠打破一些下來到什麼,我認爲是正確的二進制格式:

Cond 000 Op S Rn Rd 00000000 Rm 
---- --- ---- - ---- ---- -------- ---- 
1110 000 0110 0 1100 0000 00000000 0110 

這裏是我的問題:
1)當S標誌1而非0 ?我怎樣才能知道該標誌是否應該是10只是基於給定的彙編代碼?

2)您如何確定,只給出彙編代碼,無論是I型還是R型?

3)爲什麼3位000和8位00000000字段不變?

編輯:該處理器是ARM​​v7的

+0

這是什麼類型的處理器? – harold

+0

應該是ARM7,編輯該問題以包含它 – Mdomin45

+0

請查看此[pdf]的第10頁(http://vision.gel.ulaval.ca/~jflalonde/cours/1001/h17/docs/arm-instructionset .pdf):) –

回答

2

使用該PDF作爲參考,人們發現的格式進行第4.5節

                         的數據處理指令                                                                                                          點擊圖像放大 Data processing instruction

記住,對於像sbc指令的彙編語法是<opcode>{cond}{S} Rd,Rn,<Op2><Op2>Rm{,<shift>},<#expression>

位31 - 28

這四位是用於判斷指令的條件碼。
如果在指令中沒有指定條件代碼後綴,則隱含AL(總是)。
AL被編碼爲1110

位27 - 25

前兩個位總是0,數據處理指令。
如果使用立即數作爲第二操作數,則最低位爲1;如果使用寄存器,最低位爲1。
由於r6是第二個操作數,所以這三個位全部爲零。

位24 - 21
這是操作碼,0110 sbc

位20
這對應於小號後綴的彙編語法的。
如果設置該指令設置標誌,否則它們不變。

位19 - 16
這是第一操作數寄存器Rn中,它是r12因此該字段值1100

位15 - 12
這是目標操作數寄存器Rd,它是r0,因此0000必須用於此字段。

位11 - 0
此字段解釋爲基於第25位(位)的值。
當I = 0時,該字段是

位11 - 4
移位量。
由於沒有移位在彙編指令指定的,這些位都爲0。

位3 - 0
第二操作數寄存器,這是r6所以0110是正確的值。


您需要記住每條指令使用哪種類型的格式。
有很多結構,模式出現和一般類別(如「數據處理指令」)可以定義,但最終還有一個助記符努力(例如操作碼值,位字段等)