Aracılığıyla paylaş


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 AREAhizalamadan 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