3. ARM Instruction Set
a. Tổng quan tập lệnh trong kiến trúc ARM
Từ mã
|
Lệnh
|
Giải thích lệnh
|
Mô tả
|
Tham khảo
|
ADC
|
Add with Carry
|
Phép cộng, kể cả phần dư
|
Rd := Rn + Op2 + Carry
|
4.5
|
ADD
|
Add
|
Phép cộng
|
Rd := Rn + Op2
|
4.5
|
AND
|
AND
|
Phép AND bit
|
Rd := Rn AND Op2
|
4.5
|
BIC
|
Bit Clear
|
|
Rd := Rn AND NOT Op2
|
4.5
|
BL
|
Branch witn Link
|
|
R14 := R15, R15 := address
|
4.4
|
BX
|
Branch and Exchange
|
|
R15 := Rn,
T bit : = Rn[0]
|
4.3
|
CDP
|
Coprocesor Data Processing
|
|
Coprocessor-specific
|
4.14
|
CMN
|
Compare Negative
|
|
CPSR flags := Rn + Op2
|
4.5
|
CMP
|
Compare
|
|
CPRS flags := Rn – Op2
|
4.5
|
EOR
|
Exclusive OR
|
|
Rd := (Rn AND NOT Op2) OR
(Op2 AND NOT Rn)
|
4.5
|
LDC
|
Load Coprocessor from Memory
|
|
Coprocessor load
|
4.15
|
LDM
|
Load Multi Registers
|
|
Stack manipulation (Pop)
|
4.11
|
LDR
|
Load Register from Memory
|
|
d := (address)
|
4.9,10
|
MRC
|
Move CPU Register to Coprocessor Register
|
|
cRn := rRn { cRm}
|
4.16
|
MRS
|
Move PSR status/ flags to register
|
|
Rn := PSR
|
4.6
|
MUL
|
Multiply
|
|
Rd := Rm * Rs
|
4.7,8
|
MVN
|
Move Negative Register
|
|
Rd := 0xFFFF FFFF EOR Op2
|
4.5
|
ORR
|
Or
|
|
Rd := Rn OR Op2
|
4.5
|
RSB
|
Reverse Subtract
|
|
Rd := Op2 – Rn
|
4.5
|
RSC
|
Reverse Subtract with Carry
|
|
Rd := Op2 – Rn – 1 + Carry
|
4.5
|
SBC
|
Subtract with Carry
|
|
Rd := Rn – Op2 – 1 + Carry
|
4.5
|
STC
|
Store Coprocessor Register to Memory
|
|
address : = CRn
|
4.15
|
STM
|
Store Multiple
|
|
Stack manipulation (Push)
|
4.11
|
STR
|
Store Register to Memomy
|
|
:= Rd
|
4.9,10
|
SUB
|
Subtract
|
|
Rd := Rn – Op2
|
4.5
|
SWI
|
Software Interrupt
|
|
OS call
|
4.13
|
SWP
|
Swap Register with Memory
|
|
Rd := [Rn], [Rn] := Rm
|
4.12
|
TEQ
|
Test Bitwise Equality
|
|
CPSR flags := Rn EOR Op2
|
4.5
|
TST
|
Test Bits
|
|
CPRS flags := Rn AND Op2
|
4.5
|
b, Trường điều kiện
Trong chế độ hoạt động ARM, mọi dòng lệnh đều được thực thi có điều kiện, căn cứ vào trạng thái của mã điều kiện CPSR và trường điều kiện của dòng lệnh. Trường điều kiện này (bit 31:28) xác lập một trạng thái điều kiện để một dòng lệnh có thể thực thi. Nếu trạng thái của cờ C, N, Z và V đáp ứng đủ điều kiện, dòng lệnh sẽ được thực thi. Ngược lại, nếu trạng thái các cờ trên vi phạm vào điều kiện thì câu lệnh sẽ được bỏ qua.
Trường điều kiện có thể nhận 16 giá trị, mỗi giá trị được kí hiệu bằng tiếp đầu ngữ gồm 2 kí tự gợi nhớ. Ví dụ, lệnh BEQ – Branch if Equal chỉ được thực thi nếu cờ Z được thiết lập ngay tại thời điểm lệnh ngày được gọi.
Trên thực tế, giá trị 1111b không được sử dụng. Đối với các lệnh không yêu cầu điều kiện, trường điều kiện luôn được gán giá trị AL – “Always”, lúc đấy, lệnh này sẽ luôn được thực thi bất kể giá trị của mã điều kiện CPSR là bao nhiêu. Sau đây là bảng liệt kê 15 giá trị của trường điều kiện.
Code Suffix Flags Meaning
|
|
|
|
0000
|
EQ
|
Z set
|
equal
|
0001
|
NE
|
Z clear
|
not equal
|
0010
|
CS
|
C set
|
unsigned higher or same
|
0011
|
CC
|
C clear
|
unsigned lower
|
0100
|
MI
|
N set
|
negative
|
0101
|
PL
|
N clear
|
positive or zero
|
0110
|
VS
|
V set
|
overflow
|
0111
|
VC
|
V clear
|
no overflow
|
1000
|
HI
|
C set and Z clear
|
unsigned higher
|
1001
|
LS
|
C clear or Z set
|
unsigned lower or same
|
1010
|
GE
|
N equals V
|
greater or equal
|
1011
|
LT
|
N not equal to V
|
less than
|
1100
|
GT
|
Z clear AND (N equals V)
|
greater than
|
1101
|
LE
|
Z set OR (N not equal to V)
|
less than or equal
|
1110
|
AL
|
(ignored)
|
always
|
c, Branch and exchange
Câu lệnh này chỉ thực thi khi điều kiện thoả mãn (tham khảo 4.2). Câu lệnh này sao chép nội dung của thanh ghi Rn vào PC.
d, Branch and Branch with Link (B, BL)
e, lệnh tính toán số học / luận lý
Câu lệnh này sẽ trả về một kết quả tuỳ vào phép tính số học hoặc luận lý cụ thể. Toán hạng đầu tiên là một thanh ghi Rn, toán hạng thứ hai (nếu có) có thể là một thanh ghi dịch Rm hoặc một giá trị 8-bit nhất thời, điều này quy định bởi bit I (bit 25) trong câu lệnh. Một số toán tử, gồm TST, TEQ, CMP, CMN, không ghi kết quả ra thanh ghi Rd, mà chỉ dùng để kiểm tra hoặc thay đổi các thanh ghi điều kiện.
Các phép tính được liệt kê dưới đây:
Các toán tử số học thực hiện trên các toán hạng 32-bit (số không dấu, hay số bù 2 có dấu)
Nếu bit S được thiết lập, và Rd không phải là R15, thì bit cờ V sẽ được thiết lập nếu xảy ra tràn số. Bit cờ C sẽ chứa giá trị nhớ của phép tính. Bit cờ Z được thiết lập chỉ khi và chỉ khi kết quả của phép tính là 0. Và cuối cùng, bit cờ N nhận giá trị của bit thứ 31, để nhận dạng kết quả âm trong trường hợp tính toán trên số bù 2 có dấu.
Khi toán hạng thứ 2 được chỉ định là một thanh ghi dịch, hoạt động dịch thanh ghi được điều khiển bởi phần “Shift” trong câu lệnh. Phần “Shift” này sẽ xác định hành động dịch: dịch luận lý sang trái hay phải, dịch số học sang phải hay đảo sang phải. Số bit được dịch cũng được định rõ.
Số lượng bit được dịch chỉ rõ trong câu lệnh, bao gồm dãy 5-bit, có thể nhận giá trị từ 0 đến 31. Đối với phép dịch trái hay phải, số 0 sẽ được điền vào những vị trí không có ánh xạ. Các bit bị thừa ra cũng bị xoá bỏ, tuy nhiên, bit thừa ra liền kề dãy bit được giữ lại và chuyển vào bit cờ C. Các ví dụ cụ thể được cho dưới đây :
f, Thanh ghi chỉ định số bit được dịch
Chỉ có byte trọng số thấp nhất trong nội dung của các thanh ghi là được dùng để chỉ định cụ thể số lượng bit được dịch. Thanh ghi ở đây có thể là mọi thanh ghi chứ không chỉ là R15.
Nếu giá trị byte này là 0, nội dung thanh ghi Rm không thay đổi và được dùng như là một toán hạng thứ 2, và giá trị hiện tai của bit cờ C được xem như giá trị nhớ.
Nếu giá trị byte này từ 1 đến 31, nội dung thanh ghi Rm được dịch theo định dạng của câu lệnh.
Nếu giá trị byte này lớn hơn 31, kết quả sẽ là một mở rộng luận lý, được mô tả chi tiết như sau:
a, LSL by 32 tạo kết quả 0, carry out = Rm[0]
b, LSL by >32 tạo kết quả 0, carry out = 0
c, LSR by 32 tạo kết quả 0, carry out = Rm[31]
d, LSR by >32 tạo kết quả 0, carry out = 0
e, ASR by >31 tạo kết quả được chèn thên giá trị Rm[31], carry out = Rm[31]
f, ROR by 32 tạo kết quả = Rm, carry out = Rm[31]
g, ROR by n>32 tạo ra kết quả như là ROR by (n MOD 32)
g, Ghi vào thanh ghi R15
Khi thanh ghi Rd không phải là R15, mã điều kiện CPSR có thể cập nhật lại từ cờ ALU.
Khi Rd là R15 và bit cờ S không được thiết lập, kết quả của phép tính được cất vào thanh ghi R15 và cờ CPSR không bị tác động.
Khi Rd là R15 và bit cờ S được thiết lập, kết quả của phép tính được cất vào thanh ghi R15 và CPRS bị thay đổi dựa vào mode thực thi. Dạng thực thi này không nên dùng ở chế độ User.
h, Dùng thanh ghi R15 như là một toán hạng
Khi thanh ghi R15 (chính là PC) được sử dụng như một toán hạng trong thì nó được sử dụng trực tiếp.
Giá trị của PC là địa chỉ của câu lệnh, và được chèn thêm 8 hoặc 12 bytes.
CHƯƠNG 10. KẾT LUẬN
10.1 Tài liệu tham khảo
[1] Trang WEB www.nxp.com
[2] Trang WEB www.keil.com
[3] User manual LPC23xx
[4] Đĩa cd LPC_3_2007
10.2 Kết luận
Công việc đã làm được:
-
Nghiên cứu kiến trúc và tập lệnh ARM7
-
Nghiên cứu và sử dụng board MCB2300
-
Nghiên cứu 1 số chức năng cơ bản của LPC2378
-
Chạy led
-
Đồng hồ hiển thị LCD
-
Truyền serial máy tính và LPC2378
Chia sẻ với bạn bè của bạn: |