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ładniADDEQS 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