建議使用 Visual Studio 2017

ARM Assembler Diagnostic Messages

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

Microsoft ARM 組譯工具 (armasm) 時遇到它們便會發出診斷的警告和錯誤。 本文將告訴您最常遇到的訊息。

  
filename(lineno) : [error|warning] Anum: message  

錯誤

A2193: 這個指令會產生無法預期的行為
ARM 架構無法保證執行此指令時,會發生什麼事。 如需定義完善的表單,此指令的詳細資訊,請參閱ARM 架構參考手冊

  
ADD r0, r8, pc         ; A2193: this instruction generates unpredictable behavior  
  

A2196: 無法在 16 位元編碼指令
在指定的指令無法編碼成 16 位元的捲動方塊指令。 指定的 32 位元指令,或重新排列程式碼,將目標標籤擴增的 16 位元指令。

組譯工具可能會嘗試進行編碼以 16 位元的多層子目錄,並因這項錯誤,即使 32 位元分支是 encodable。 您可以解決這個問題,藉由使用.W規範來明確地標記為 32 位元的分支。

  
  ADD.N r0, r1, r2      ; A2196: instruction cannot be encoded in 16 bits  
  
  B.W label             ; OK  
  B.N label             ; A2196: instruction cannot be encoded in 16 bits  
  SPACE 10000  
label  
  

A2202: P E UAL 指令語法不允許出現在 [縮圖 (地區)
捲動方塊的程式碼必須使用統一的組譯工具語言 (UAL) 的語法。 舊語法不再被接受

  
ADDEQS r0, r1         ; A2202: Pre-UAL instruction syntax not allowed in THUMB region  
ADDSEQ r0, r1         ; OK  
  

A2513: 旋轉必須是偶數
ARM 模式中,則替代語法來指定常數。 書寫代替#<const>,您可以撰寫#<byte>,#<rot>,用來表示藉由旋轉值的常數值<byte>向右<rot>。 當您使用此語法時,您必須進行的值<rot>甚至。

  
MOV r0, #4, #2       ; OK  
MOV r0, #4, #1       ; A2513: Rotation must be even  
  

A2557: 上一步寫入的位元組數目不正確
霓虹結構中,載入和儲存的指示 (VLDnVSTn),沒有替代語法來指定要回寫至基底暫存器。 而不是地址後面加一個驚嘆號 (!),您可以指定立即的值,指出要加入至基底暫存器位移。 如果您使用此語法時,您必須指定確切的載入或儲存由指令的位元組數目。

  
VLD1.8 {d0-d3}, [r0]!         ; OK  
VLD1.8 {d0-d3}, [r0], #32     ; OK  
VLD1.8 {d0-d3}, [r0], #100    ; A2557: Incorrect number of bytes to write back  
  

警告

A4228: 對齊值超過區對齊方式。 不保證的對齊方式
在所指定的對齊方式ALIGN指示詞的對齊封入大於AREA。 如此一來,組譯工具不能保證, ALIGN指示詞,將會套用。

若要修正這個問題,您可以指定在AREA指示詞ALIGN等於或晚於您想要的對齊方式的屬性。

  
AREA |.myarea1|  
ALIGN 8           ; A4228: Alignment value exceeds AREA alignment; alignment not guaranteed  
  
AREA |.myarea2|,ALIGN=3  
ALIGN 8           ; OK  
  

A4508: 已被取代這個旋轉的常數的使用
ARM 模式中,則替代語法來指定常數。 書寫代替#<const>,您可以撰寫#<byte>,#<rot>,用來表示藉由旋轉值的常數值<byte>向右<rot>。 在某些情況中,ARM 已取代旋轉常數的使用。 在這些情況下,使用基本#<const>語法代替。

  
ANDS r0, r0, #1                ; OK  
ANDS r0, r0, #4, #2            ; A4508: Use of this rotated constant is deprecated  
  

A4509: 這種形式的條件式指示已被取代
這種形式的條件式指示已被取代的 ARM ARMv8 架構中。 我們建議您變更使用條件式分支的程式碼。 若要查看仍然支援哪一個條件式指示,請參閱ARM 架構參考手冊

這項警告並不發出何時 -oldit 使用命令列參數。

  
ADDEQ r0, r1, r8              ; A4509: This form of conditional instruction is deprecated  
  

ARM Assembler Command-Line Reference
ARM Assembler Directives

顯示: