Udostępnij za pośrednictwem


Komunikaty diagnostyczne asemblera ARM

Asembler RAMIĘ firmy Microsoft (armasm) emituje diagnostyczne ostrzeżeń i błędów po ich napotkaniu.W tym artykule opisano najbardziej powszechnie napotkał wiadomości.

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

Diagnostyczne wiadomości

Błędy

  • A2193: Ta instrukcja generuje nieprzewidywalne zachowanie
    Architektura RAMIENIA nie może zagwarantować, co się dzieje, gdy ta instrukcja jest wykonywane.Szczegółowe informacje o formularzach wyraźnie określone w niniejszej instrukcji zasięgać opinii RAMIĘ architektury podręcznika.

    ADD r0, r8, pc         ; A2193: this instruction generates unpredictable behavior
    
  • A2196: nie można zakodować instrukcji w 16 bitów
    Określonych instrukcji nie zakodowane jako instrukcja kciuka 16-bitowych.Określanie instrukcji 32-bitowe lub zmienić kod w celu dostosowania etykietą docelową do szeregu instrukcji 16-bitowe.

    Monter może próbować kodowania oddział w 16 bitów i z tym błędem, mimo że oddział 32-bitowych jest encodable.Problem można rozwiązać za pomocą .W specyfikatora, aby wyraźnie oznaczyć oddziału jako 32-bitowe.

      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: Czywisty zaległe instrukcji składni nie jest dozwolone w regionie KCIUKA
    Kod przycisku przewijania, należy używać składni Unified asemblerze języka (Czywisty).Nie zaakceptowano stare składni

      ADDEQS r0, r1         ; A2202: Pre-UAL instruction syntax not allowed in THUMB region
      ADDSEQ r0, r1         ; OK
    
  • A2513: Obrót musi być nawet
    W trybie RAMIĘ istnieje alternatywny składnię, służącą do stałych.Zamiast pisania #<const>, można napisać #<byte>,#<rot>, który reprezentuje wartość stałą, uzyskany przez obracanie wartość <byte> prawej przez <rot>.Użycie tej składni, należy wykonać wartość <rot> nawet.

      MOV r0, #4, #2       ; OK
      MOV r0, #4, #1       ; A2513: Rotation must be even
    
  • A2557: Niepoprawna liczba bajtów do zapisania
    Struktury NEON ładować i przechowywać instrukcje (VLDn, VSTn), istnieje alternatywnej składni określania stornowania do rejestru podstawowego.Zamiast umieszczania wykrzyknik (!), po adresie, można określić natychmiastową wartość, który wskazuje przesunięcie, które mają zostać dodane do rejestru podstawowego.Jeśli używasz tej składni, należy określić dokładną liczbę bajtów, które zostały załadowane lub przechowywanych przez instrukcję.

      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
    

Ostrzeżenia

  • A4228: Wartość wyrównania przekracza obszar wyrównanie; wyrównanie nie jest gwarantowane
    Wyrównanie, określona w ALIGN dyrektywy jest większa niż wyrównanie otaczający AREA.W rezultacie monter nie może zagwarantować, że ALIGN dyrektywy będą honorowane.

    Aby rozwiązać ten problem, można określić na AREA dyrektywy ALIGN atrybut, który jest równy lub większy niż żądane wyrównanie.

      AREA |.myarea1|
      ALIGN 8           ; A4228: Alignment value exceeds AREA alignment; alignment not guaranteed
    
      AREA |.myarea2|,ALIGN=3
      ALIGN 8           ; OK
    
  • A4508: Użyj stała ta obrócony jest niezalecane.
    W trybie RAMIĘ istnieje alternatywny składnię, służącą do stałych.Zamiast pisania #<const>, można napisać #<byte>,#<rot>, który reprezentuje wartość stałą, uzyskany przez obracanie wartość <byte> prawej przez <rot>.W pewnych kontekstach RAMIĘ została zaniechana wykorzystania tych stałych obrócony.W tych przypadkach należy korzystać z podstawowego #<const> składni w zamian.

      ANDS r0, r0, #1                ; OK
      ANDS r0, r0, #4, #2            ; A4508: Use of this rotated constant is deprecated
    
  • A4509: Ten formularz instrukcji warunkowych jest niezalecane.
    Ten formularz instrukcji warunkowych została zastąpiona przez RAMIĘ w architekturze ARMv8.Firma Microsoft zaleca, aby zmienić kod w warunkowych.Aby zobaczyć, które instrukcje warunkowe nadal są obsługiwane, należy zajrzeć do RAMIĘ architektury podręcznika.

    To ostrzeżenie nie jest emitowane podczas - oldit zostanie użyty przełącznik wiersza polecenia.

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

Zobacz też

Informacje

Informacje w wierszu polecenia asemblera ARM

Dyrektywy ARM dotycząca asemblera