Pesan diagnostik Perakitan ARM
Perakitan Microsoft ARM, armasm, dan armasm64, memancarkan peringatan dan kesalahan diagnostik ketika mereka menemukannya. Artikel ini menjelaskan pesan yang paling umum ditemui.
Sintaks
filename(line-number) : [error|warning] Anumber:message
Pesan diagnostik - Kesalahan
A2193: instruksi ini menghasilkan perilaku yang tidak dapat diprediksi
Arsitektur ARM tidak dapat menjamin apa yang terjadi ketika instruksi ini dijalankan. Untuk detail tentang bentuk instruksi ini yang terdefinisi dengan baik, lihat Panduan Referensi Arsitektur ARM.
ADD r0, r8, pc ; A2193: this instruction generates unpredictable behavior
A2196: instruksi tidak dapat dikodekan dalam 16 bit
Instruksi yang ditentukan tidak dapat dikodekan sebagai instruksi Thumb 16-bit. Tentukan instruksi 32-bit, atau susun ulang kode untuk membawa label target ke dalam rentang instruksi 16-bit.
Perakit dapat mencoba mengodekan cabang dalam 16 bit dan gagal dengan kesalahan ini, meskipun cabang 32-bit dapat dikodekan. Anda dapat menyelesaikan masalah ini dengan menggunakan penentu .W
untuk secara eksplisit menandai cabang sebagai 32-bit.
ADD.N r0, r1, r2 ; A2196: instruction can't be encoded in 16 bits
B.W label ; OK
B.N label ; A2196: instruction can't be encoded in 16 bits
SPACE 10000
label
A2202: Sintaks instruksi pra-UAL tidak diizinkan di wilayah THUMB
Kode jempol harus menggunakan sintaks Unified Assembler Language (UAL). Sintaks lama tidak lagi diterima
ADDEQS r0, r1 ; A2202: Pre-UAL instruction syntax not allowed in THUMB region
ADDSEQ r0, r1 ; OK
A2513: Rotasi harus genap
Dalam mode ARM, ada sintaks alternatif untuk menentukan konstanta. Alih-alih menulis #<const>
, Anda dapat menulis #<byte>,#<rot>
, yang mewakili nilai konstanta yang diperoleh dengan memutar nilai <byte>
tepat dengan <rot>
. Saat Anda menggunakan sintaks ini, Anda harus membuat nilainya merata <rot>
.
MOV r0, #4, #2 ; OK
MOV r0, #4, #1 ; A2513: Rotation must be even
A2557: Jumlah byte yang salah untuk ditulis kembali
Pada struktur NEON memuat dan menyimpan instruksi (VLDn
, VSTn
), ada sintaks alternatif untuk menentukan tulis balik ke register dasar. Alih-alih meletakkan tanda seru (!) setelah alamat, Anda dapat menentukan nilai langsung yang menunjukkan offset yang akan ditambahkan ke register dasar. Jika Anda menggunakan sintaks ini, Anda harus menentukan jumlah byte yang tepat yang dimuat atau disimpan oleh instruksi.
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
Pesan diagnostik - Peringatan
A4228: Nilai perataan melebihi perataan AREA; perataan tidak dijamin
Perataan yang ditentukan dalam direktif ALIGN
lebih besar dari perataan AREA
penutup . Akibatnya, perakitan tidak dapat menjamin bahwa arahan ALIGN
akan dihormati.
Untuk memperbaiki peringatan ini, Anda dapat menentukan pada AREA
direktif ALIGN
atribut yang sama dengan atau lebih besar dari perataan yang diinginkan.
AREA |.myarea1|
ALIGN 8 ; A4228: Alignment value exceeds AREA alignment; alignment not guaranteed
AREA |.myarea2|,ALIGN=3
ALIGN 8 ; OK
A4508: Penggunaan konstanta yang diputar ini tidak digunakan lagi
Dalam mode ARM, ada sintaks alternatif untuk menentukan konstanta. Alih-alih menulis #<const>
, Anda dapat menulis #<byte>,#<rot>
, yang mewakili nilai konstanta yang diperoleh dengan memutar nilai <byte>
tepat dengan <rot>
. Dalam beberapa konteks, ARM telah menghentikan penggunaan konstanta yang diputar ini. Dalam kasus ini, gunakan sintaks dasar #<const>
sebagai gantinya.
ANDS r0, r0, #1 ; OK
ANDS r0, r0, #4, #2 ; A4508: Use of this rotated constant is deprecated
A4509: Bentuk instruksi bersyukur ini tidak digunakan lagi
Bentuk instruksi kondisi ini telah ditolak oleh ARM dalam arsitektur ARMv8. Kami menyarankan agar Anda mengubah kode untuk menggunakan cabang bersyarah. Untuk melihat instruksi bersyarat mana yang masih didukung, lihat Panduan Referensi Arsitektur ARM.
Peringatan ini tidak dipancarkan saat sakelar -oldit
baris perintah digunakan.
ADDEQ r0, r1, r8 ; A4509: This form of conditional instruction is deprecated
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk