ARM Assembler tanılama iletileri
Microsoft ARM derleyicileri, armasm ve armasm64, karşılaştıklarında tanılama uyarıları ve hataları yayar. Bu makalede en sık karşılaşılan iletiler açıklanmaktadır.
Sözdizimi
filename(satır-numarası) : [hata|uyarısı] Birsayı:ileti
Tanılama iletileri - Hatalar
A2193: Bu yönerge öngörülemeyen davranışlar oluşturur
ARM mimarisi, bu yönerge yürütülürken ne olacağını garantileyemez. Bu yönergenin iyi tanımlanmış formları hakkında ayrıntılı bilgi için ARM Mimarisi Başvuru Kılavuzu'na başvurun.
ADD r0, r8, pc ; A2193: this instruction generates unpredictable behavior
A2196: yönerge 16 bit olarak kodlanamaz
Belirtilen yönerge 16 bit Başparmak yönergesi olarak kodlanamaz. 32 bit yönerge belirtin veya hedef etiketi 16 bit yönerge aralığına getirmek için kodu yeniden düzenleyin.
Bir 32 bit dal kodlanabilir olsa bile, derleyici bir dalı 16 bit olarak kodlamaya çalışabilir ve bu hatayla başarısız olabilir. Dalı açıkça 32 bit olarak işaretlemek için tanımlayıcıyı kullanarak .W
bu sorunu çözebilirsiniz.
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: BAŞPARMAK bölgesinde UAL öncesi yönerge söz dizimine izin verilmiyor
Başparmak kodu Birleşik Derleyici Dili (UAL) söz dizimini kullanmalıdır. Eski söz dizimi artık kabul değil
ADDEQS r0, r1 ; A2202: Pre-UAL instruction syntax not allowed in THUMB region
ADDSEQ r0, r1 ; OK
A2513: Döndürme eşit olmalıdır
ARM modunda sabitleri belirtmek için alternatif bir söz dizimi vardır. yazmak #<const>
yerine, değeri tarafından doğru <rot>
döndürerek elde edilen sabit değeri temsil eden değerini <byte>
yazabilirsiniz#<byte>,#<rot>
. Bu söz dizimini kullandığınızda, çift değerini <rot>
oluşturmanız gerekir.
MOV r0, #4, #2 ; OK
MOV r0, #4, #1 ; A2513: Rotation must be even
A2557: Geri yazacak yanlış bayt sayısı
NEON yapısı yükleme ve depolama yönergelerinde (VLDn
, VSTn
) temel yazmaç için geri yazmaç belirtmek için alternatif bir söz dizimi vardır. Adresin arkasına ünlem işareti (!) koymak yerine, temel yazmaçta eklenecek uzaklığı belirten bir anlık değer belirtebilirsiniz. Bu söz dizimini kullanırsanız, yönerge tarafından yüklenen veya depolanan tam bayt sayısını belirtmeniz gerekir.
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
Tanılama iletileri - Uyarılar
A4228: Hizalama değeri ALAN hizalamasını aşıyor; hizalama garantili değil
Yönergesinde ALIGN
belirtilen hizalama, kapsayan AREA
hizalamadan büyüktür. Sonuç olarak, derleyici yönergesinin ALIGN
yerine getirileceğini garantileyemez.
Bu uyarıyı düzeltmek için yönergesinde AREA
istenen hizalamaya eşit veya ondan büyük bir ALIGN
öznitelik belirtebilirsiniz.
AREA |.myarea1|
ALIGN 8 ; A4228: Alignment value exceeds AREA alignment; alignment not guaranteed
AREA |.myarea2|,ALIGN=3
ALIGN 8 ; OK
A4508: Bu döndürülen sabitin kullanımı kullanım dışı bırakıldı
ARM modunda sabitleri belirtmek için alternatif bir söz dizimi vardır. yazmak #<const>
yerine, değeri tarafından doğru <rot>
döndürerek elde edilen sabit değeri temsil eden değerini <byte>
yazabilirsiniz#<byte>,#<rot>
. Bazı bağlamlarda ARM, bu döndürülmüş sabitlerin kullanımını kullanım dışı bırakmıştır. Bu gibi durumlarda, bunun yerine temel #<const>
söz dizimini kullanın.
ANDS r0, r0, #1 ; OK
ANDS r0, r0, #4, #2 ; A4508: Use of this rotated constant is deprecated
A4509: Bu koşullu yönerge biçimi kullanım dışı bırakıldı
Bu koşullu yönerge biçimi, ARMv8 mimarisinde ARM tarafından kullanım dışı bırakılmıştır. Kodu koşullu dalları kullanacak şekilde değiştirmenizi öneririz. Hangi koşullu yönergelerin hala desteklendiğine bakmak için ARM Mimarisi Başvuru Kılavuzu'na başvurun.
Komut satırı anahtarı kullanıldığında bu uyarı yayılmıyor -oldit
.
ADDEQ r0, r1, r8 ; A4509: This form of conditional instruction is deprecated
Ayrıca bkz.
ARM Assembler Komut Satırı Başvurusu
ARM Assembler Yönergeleri
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin