Trong phần này giới thiệu cách đặt lệnh của 8951 thơng qua sự kiểm tra các chế độ và những ví dụ tình huống lập trình liên quan. Cách đặt lệnh này chỉ tối ưu với
Opcode
Opcode
Opcode Dữ liệu trực tiếp
Opcode Độ lệch tương đối
Địa chỉ trực tiếp
Địa chỉ tức thời
những ứng dụng điều khiển 8 bit. Trong 8951 cĩ tất cả 256 lệnh được thực thi và 1 lệnh khơng định nghĩa. Một lệnh cĩ hoặc 2 byte dữ liệu hoặc địa chỉ được thêm vào. Nĩi chung 8951 cĩ 139 lệnh 1 byte, 92 lệnh 2 byte và 24 lệnh 3 byte.
Định địa chỉ thanh ghi :
8951 cĩ 8 thanh ghi được đánh số từ R0 đến R7 mà ta truy suất được với nĩ.
Ví dụ:ADD A, R5
Định địa chỉ trực tiếp :
8951 cĩ thể truy suất bất kỳ nào trong RAM nội.
Vídụ :MOV A,5BH
Định địa chỉ gián tiếp :
Ví dụ :MOV A,@R1
Định địa chỉ tức thời :
Ví dụ :MOV A,#12 MOV DPTR,#2000H
Định địa chỉ tương đối :
Sử dụng trong lệnh nhảy khơng hay cĩ điều kiện Opcode
Nội dung PC = PC hiện hành + offset bù 2 cĩ dấu Ví dụ: SJMP 20H
Định vị địa chỉ tuyệt đối :
Thường sử dụng cho lệnh ACALL, AJMP. Những lệnh 2 bytes này cho phép rẽ nhánh trong trang 2K bytes của bộ nhớ mã bởi sự cung cấp 11 bit thấp của địa chỉ đích trong opcode (A104A8) và byte 2 của lệnh (A74A0).
Định vị địa chỉ :
Địa chỉ dài chỉ dùng chỉ dùng với những lệnh LCALL, LJMP. Những lệnh 3 byte này gồm địa chỉ đích 16 bit và mã lệnh 8 bit.
Định vị địa chỉ chỉ số :
Định vị địa chỉ chỉ số sử dụng một thanh ghi nền (hoặc bộ đếm chương trình hoặc con trỏ dữ liệu) và độ lệch (bộ tích lũy) trong việc hình thành địa chỉ hiệu dụng cho lệnh JMP hoặc MOVC.
+ =
Ví dụ : MOVC A,@A+<Thanh ghi cơ bản>\
TẬP LỆNH :
8951 cĩ 255 lệnh chia là 5 nhĩm. Thời gian thực thi của các lệnh khơng giống nhau, cĩ thể là 1, 2, 3 hay 4 chu kỳ máy. Nếu 8951 hoạt động ở 12MHz thì mỗi chu kỳ lệnh sẽ là 1µs.
Trang 36
Opcode ADDR 740
ADDR 1048
Độ lệch
PC (hoặc DPTR) ACC Địa chỉ hiệu dụng
Thanh ghi cơ bản
Những lệnh về số học :
Ví dụ : Lệnh ADD A,<byte> được viết với nhiều cách khác nhau ADD A,7FH (định địa chỉ trực tiếp)
ADD A,@R0 (định địa chỉ gián tiếp) ADD A,R7 (định địa chỉ thanh ghi) ADD A,#127 (định địa chỉ tức thời)
Thời gian thực thi của tất cả những lệnh số học là 1µs ngoại trừ lệnh INC DPTR là 2µs và các lệnh MUL AB và DIV AB là 4µs. Sau đây là bảng tĩm tắt các lệnh về số học :
Mnemonic Sự hoạt động Thời gian thực thi
ADD A,<byte> A = A + <byte> 1µs ADDC A,<byte> A = A + <byte> + C 1µs SUBB A,<byte> A = A - <byte> - C 1µs
INC A A = A + 1 1µs
INC <byte> <byte> = <byte> + 1 1µs
INC DPTR DPTR = DPTR + 1 2µs
DEC A A = A – 1 1µs
DEC <byte> <byte> = <byte>-1 1µs
MUL AB B_A = A*B 4µs
DIV AB A = Int[A/B] 4µs
B = Mod[A/B]
DAA Decimal Adjust 1µs
Nhĩm lệnh logic :
Là những lệnh biểu diễn phép tốn luận lý (AND, OR, XOR, NOT) trên byte dữ liệu hay trên bit.
Ví dụ : ANL A,#10000000B
ANL <byte>,A <byte> = <byte> and A 1µs ANL <byte>,#data <byte> = <byte> and #data 2µs ORL A, <byte> A = A or <byte> 1µs ORL <byte>,A <byte> = <byte> or A 1µs ORL <byte>,#data <byte> = <byte> or #data 2µs XRL A, <byte> A = A xor <byte> 1µs XRL <byte>,A <byte> = <byte> xor A 1µs XRL <byte>,#data <byte> = <byte> xor #data 2µs
CLR A A = 0, clear A 1µs
CPL A A = not A 1µs
RL A Quay ACC sang trái 1 bit 1µs
RLC A Quay ACC sang trái qua cờ C 1µs
RR A Quay ACC sang phải 1 bit 1µs
RRC A Quay ACC sang trái qua cờ C 1µs SWAP A Hốn chuyển giữa hai nipbles 1µs
Nhĩm lệnh truyền dữ liệu : a. Lệnh truyền dữ liệu RAM nội :
Là những lệnh chuyển dữ liệu trong khơng gian bộ nhớ nội thực thi trong 1 hoặc hai chu kỳ máy.
Lệnh MOV <des>,<src> cho phép truyền dữ liệu giữa bất kỳ RAM nội hoặc thanh ghi đặc biệt nào mà khơng qua ACC.
Mnemonic Sự hoạt động Thời gian thực thi
MOV A,<src> A = <src> 1µs MOV <des>,A <des> = A 1µs MOV <des>,<src> <des> = <src> 2µs MOV DPTR,#data16bit DPTR = #data16 bit 2µs PUSH <scr> cất <scr> vào stack 2µs POP <des> lấy <des> từ stack 2µs XCH A,<byte> dữ liệu ACC và <byte> 1µs
hốn đổi nhau
XCHD A,Ri 4 bit thấp của ACC và Ri 1µs hốn đổi nhau