W prostych słowach ITTE
wykonuje następujące 3 wykonanie jako JEŻELI TO {} THEN {} ELSE {} na podstawie powyższej instrukcji cmp
.
W architekturach ARMv6T2 i nowszych można użyć instrukcji IT
do wykonania warunkowego. W architekturach przed ARMv6T2 nie ma instrukcji IT
i dlatego instrukcje Kciuk nie mogą być wykonywane warunkowo, z wyjątkiem instrukcji rozgałęzienia B
. Asembler sprawdza instrukcje IT, ale pomija je przy montażu do kodu ARM.
Dla twojego rozwiązania pozwala najpierw zrozumieć składnię prostej instrukcji IT
(wprowadzonej w Thumb 2) zespołu ARM, która jest podstawą ITTE
.
IT{pattern} {cond}
przypadku, następnie określa warunki realizacji dla maksymalnie czterech następujących instrukcji kombinacja do trzech T (następnie) i E (jeszcze) liter, pierwsza instrukcja po IT zawsze warunek (T) Informacje, które mogą modyfikować licznika programu musi być ostatnim w bloku IT
w then
warunkach muszą kod warunku oraz wszelkie else
warunki muszą być warunek odwrotnie.Poniższa tabela przedstawia kody stanie i ich przeciwieństwa:
Powiedzmy zrozumieć inną dyspozycję cmp
.
CMP Rn, #imm
Rn musi być rejestrem Lo. zakres imm 0-255. Te instrukcje aktualizują flagi N, Z, C i V zgodnie z wynikiem.
Pamiętaj: IT
pozwala na cztery następujące instrukcje Thumb (blok IT) być warunkowy lub można powiedzieć tutaj ITTE służy do obsługi małych sekwencje kodu warunkowego, do 4 instrukcji.
Proste przykłady
Ex 1:
cmp r1, #22 Compare r1 value with 22
IT EQ Read this as If EQual Then ADD R1,R1,#1
ADD R1,R1,#1 <- This will only be executed if above r1 value equal to 22(means when z condition flag is equal to 1)
Ex 2:
cmp r1, #22 Compare r1 value with 22
ITE EQ Read this as If EQual Then ADD R1,R1,#1 Else ADD R0,R0,#1
ADD R1,R1,#1 <- This will only be executed if the Z condition flag is 1
ADD R0,R0,#1 <- This will only be executed if the Z condition flag is 0
Co zrobić ITTE? to pytanie tutaj
CMP R1, #22 Compare r1 value with 22
ITTE NE Read this as IF NotEqual Then ADD R1,R1,#1 Then ADD R0,R0,#1 Else ADD R2,R2,#1
ADD R1,R1,#1 <- This will only be executed if the Z condition flag is 0
ADD R0,R0,#1 <- This will only be executed if the Z condition flag is 0
ADD R2,R2,#1 <- This will only be executed if the Z condition flag is 1
Tutaj ITTE
nakłada warunek NE na pierwszych dwóch następujących instrukcji i stanu EQ na następny.
UWAGA: Wszelkie oddziały, które istnieją w bloku musi być ostatnią instrukcję w odniesieniu block.Taken z here poniższym przykładzie będzie o niezdefiniowanej zachowanie, ponieważ instrukcja oddział jest stosowany w środku instrukcji rozgałęzienia.
ite eq
blxeq some_label @ UNPREDICTABLE during an IT block.
movne r0, #0
poprawny sposób wdrożenia powyższego byłoby umieścić mov przed blx, co następuje:
ite ne
movne r0, #0
blxeq some_label @ Ok at the end of an IT block.
Aby uzyskać więcej informacji THUMB-2 Instruction set reference manual strona 4-92
IT{x{y{z}}}<q> <Firstcondition>
<x>
warunek dla drugiej instrukcji w bloku IT
<y>
warunkiem trzeciej instrukcji w bloku IT
<z>
warunek czwarty instrukcji w bloku IT
<q>
określa opcjonalnych kwalifikatorów asemblera na polecenie
Dwa kwalifikator zdefiniowane tutaj:
.N Meaning Narrow. Assembler has to choose 16-bit encoding for the instruction if it is not possible then error.
.W Meaning Wide. Assembler has to select 32-bit encoding for the instruction if is not possible then error.
<Firstcondition>
Warunek pierwszej instrukcji w bloku IT, tj. EQ, NE, CC, CS.
OK, więc co tak naprawdę mówią instrukcje? – Johnathon
OT: Wiem, że jakiś japoński, ta linia jest zabawnie pasująca :) –