Nói cách đơn giản ITTE
thực hiện sau 3 lần thực thi như NẾU {} THEN {} ELSE {} dựa trên hướng dẫn trên cmp
.
Trong kiến trúc ARMv6T2 trở lên, bạn có thể sử dụng lệnh IT
để thực thi có điều kiện. Trong các kiến trúc trước ARMv6T2, không có lệnh IT
và do đó không thể thực thi các lệnh Thumb có điều kiện ngoại trừ lệnh chi nhánh B
. Bộ kết hợp kiểm tra các hướng dẫn CNTT, nhưng bỏ qua chúng khi lắp ráp vào mã ARM.
Để giải pháp của bạn cho phép hiểu cú pháp đầu tiên của lệnh IT
đơn giản (được giới thiệu trong Thumb 2) của hội đồng ARM, là cơ sở của ITTE
.
IT{pattern} {cond}
Nếu-thì, đặt điều kiện thực hiện cho đến 4 hướng dẫn sau đây thể được bất kỳ sự kết hợp của lên đến ba T (sau đó) và E (khác) chữ, câu lệnh đầu tiên sau CNTT là luôn cond (T) dẫn mà có thể sửa đổi chương trình truy cập phải là cuối cùng trong một khối CNTT
các then
điều kiện phải phù hợp với mã trạng thái, và bất kỳ else
điều kiện phải có điều kiện ngược lại.Bảng dưới đây cho thấy các mã điều kiện và đối lập của họ:

Hãy hiểu khác cmp
hướng dẫn.
CMP Rn, #imm
Rn phải là đăng ký Lo. phạm vi rộng 0-255. Các hướng dẫn này cập nhật các cờ N, Z, C và V theo kết quả.
Hãy nhớ rằng: IT
cho phép 1-4 hướng dẫn Thumb sau (khối CNTT) để có điều kiện hoặc bạn có thể nói đây ITTE được sử dụng để xử lý các chuỗi mã nhỏ có điều kiện, tối đa 4 hướng dẫn.
ví dụ đơn giản
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
gì ITTE làm gì? là câu hỏi của bạn ở đây
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
Đây ITTE
áp đặt các điều kiện NE trên hai đầu tiên sau hướng dẫn và điều kiện EQ trên tiếp theo.
LƯU Ý: Bất kỳ chi nhánh mà tồn tại trong một khối CNTT phải là hướng dẫn cuối cùng trong tài liệu tham khảo block.Taken từ here dụ sau sẽ có hành vi undefined vì lệnh rẽ nhánh được sử dụng ở giữa của lệnh rẽ nhánh.
ite eq
blxeq some_label @ UNPREDICTABLE during an IT block.
movne r0, #0
cách chính xác để thực hiện ở trên sẽ được đưa mov trước BLX, như sau:
ite ne
movne r0, #0
blxeq some_label @ Ok at the end of an IT block.
Để biết thêm thông THUMB-2 Instruction set reference manual Trang 4-92
IT{x{y{z}}}<q> <Firstcondition>
<x>
điều kiện để được hướng dẫn thứ hai trong khối CNTT
<y>
điều kiện để giảng dạy thứ ba trong lĩnh vực CNTT chặn
<z>
điều kiện để hướng dẫn thứ tư trong lĩnh vực CNTT chặn
<q>
xác định vòng loại lắp ráp tùy chọn trên hướng dẫn
Hai vòng loại định nghĩa ở đây:
.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>
Điều kiện cho lệnh đầu tiên trong khối CNTT tức là EQ, NE, CC, CS.
Ok, vậy các hướng dẫn thực sự là gì? – Johnathon
OT: Tôi biết một số người Nhật, dòng đó vui nhộn phù hợp :) –