Trung tâm đào tạo thiết kế vi mạch Semicon


  • ĐĂNG KÝ TÀI KHOẢN ĐỂ TRUY CẬP NHIỀU TÀI LIỆU HƠN!
  • Create an account
    *
    *
    *
    *
    *
    Fields marked with an asterisk (*) are required.
semicon_lab.jpg

Lệnh Lập trình ASM cho AVR cơ bản

E-mail Print PDF
Article Index
Lệnh Lập trình ASM cho AVR cơ bản
trang 2
All Pages

Phần này Chip giới thiệu một số instruction mà  rất hay sử dụng khi lập trình cho AVR. Chip sẽ chia các instruction này ra thành nhiều nhóm dựa theo phạm vi tác động và chức năng của chúng.

Trước hết chúng ta thống nhất một số cách sử dụng ký hiệu trong cách viết cú pháp của các instruction như sau:


Rd: thanh ghi nguồn và cũng là đích thuộc Register File.
Rr: thanh ghi nguồn thuộc Register File.
Khái niệm nguồn (Source), đích (Destination) là chỉ các toán hạng và kết quả trong các phép toán đại số và Logic, ví dụ ADD R1, R2 là lệnh cộng 2 giá trị chứa trong 2 thanh ghi R1, R2, trong trường hợp này cả R1 và R2 đều được gọi là nguồn vì chứa giá trị trước khi thực hiện phép cộng. Sau khi phép cộng được thực hiện, kết quả được chứa lại trong R1 và vì thế R1 được gọi là đích trong trường hợp này. R1 vừa là nguồn, vừa là đích trong khi R2 chỉ là nguồn, nếu viết ví dụ này dưới dạng tổng quát sẽ là : ADD Rd, Rr.
R: kết quả sau khi lệnh được thực thi.
K: hằng số.
k: hằng số chỉ địa chỉ tuyệt đối của thanh ghi.
b: (0 đến 7) số thứ tự bit trong các thanh ghi của Register File và vùng nhớ I/O.
s: (0 đến 7) số thứ tự bit trong thanh ghi trạng thái SREG.
X,Y,X: các thanh ghi địa chỉ tương đối (X=R27:R26, X=R29:R28, X=R31:R30).
A: địa chỉ I/O.
q: độ dịch chuyển của địa chỉ tuyệt đối.
I. Instruction chỉ dùng cho Register Files.

- LDI (LoaD Immediate).

Cú pháp: LDI Rd,K
Chức năng: Load hằng số K vào thanh ghi Rd.
Giới hạn: chỉ áp dụng cho các thanh ghi từ R16 đến R31.
Ví dụ: LDI R16, 99 kết quả là thanh ghi R1 mang giá trị 99.

- MOV (MOVE).

Cú pháp: MOV Rd, Rr
Chức năng: Copy giá trị trong thanh ghi Rr vào thanh ghi Rd.
Giới hạn: áp dụng cho tất cả các thanh ghi trong RF.
Ví dụ: MOV R15, R16 kết quả là R15 có cùng giá trị với R16 (R15=R16=99).

- CLR (CLEAR Register).

Cú pháp: CLR Rd
Chức năng: Copy giá trị trong thanh ghi Rr vào thanh ghi Rd.
Giới hạn: áp dụng cho tất cả các thanh ghi trong RF.
Ví dụ: áp dụng cho tất cả các thanh ghi trong RF.

- SER (SET Register).

Cú pháp: SER Rd
Chức năng: set tất cả các bit trong thanh ghi Rd lên 1, sau lệnh này thanh ghi Rd=0xFF.
Giới hạn: chỉ áp dụng cho các thanh ghi từ R16 đến R31.
Ví dụ: SER R16 kết quả là R16 = 0xFF.

- CBR (CLEAR Bit in Register).

Cú pháp: CBR Rd, K
Chức năng: xóa các bit trong thanh ghi Rd với “mặt nạ”  K, nếu Bit nào trong K là 1 thì Bit tương ứng trong Rd sẽ bị xóa.
Giới hạn: chỉ áp dụng cho các thanh ghi từ R16 đến R31.
Ví dụ: CBR R16, 0xF0  kết quả là 4 bit cao nhất của  R16 bị xóa vì K=11110000 (B).

- SBR (SET Bit in Register).

Cú pháp: SBR Rd, K
Chức năng: set các bit trong thanh ghi Rd với “mặt nạ”  K, nếu Bit nào trong K là 1 thì Bit tương ứng trong Rd sẽ được set lên 1.
Giới hạn: chỉ áp dụng cho các thanh ghi từ R16 đến R31.
Ví dụ: SBR R16, 0xF0  kết quả là 4 bit cao nhất của  R16 được set lên 1 vì K=11110000 (B).

- BLD (Bit LoaD from T Flag).

Cú pháp: BLD Rd,b
Chức năng: Load giá trị trong cờ T của thanh ghi SREG vào bit thứ b trong thanh ghi Rd. Đây cũng chính là chức năng chính của cờ T.
Giới hạn: áp dụng cho tất cả các thanh ghi trong RF.
Ví dụ:
SET ; set bit T lên 1
BLD R16, 4
Kết quả là bit 4 của thanh ghi R16 được set lên 1 vì giá trị của bit T là 1.

- BST (Bit Storage from T Flag).

Cú pháp: BST Rd,b
Chức năng: Copy bit thứ b trong thanh ghi Rd vào trong cờ T của thanh ghi SREG. Đây cũng chính là chức năng chính của cờ T.
Giới hạn: áp dụng cho tất cả các thanh ghi trong RF.
Ví dụ: BST R16, 4 kết quả là cờ T chứa giá trị của bit 4 của thanh ghi R16.

- CPI (COMPARE with Immediate).

Cú pháp: CPI Rd, K
Chức năng: so sánh thanh ghi Rd với hằng số K, lệnh này làm thay đổi nhiều bit trong thanh ghi SREG trong đó sự thay đổi của cờ Zero là quan trọng nhất, nếu Rd = K cờ Z=1, ngược lại Z=0, sử dụng đặc điểm thay đổi của cờ Z kết hợp với lệnh BRNE hoặc BREQ chúng ta có thể tạo thành một lệnh rẽ nhánh.
Giới hạn: chỉ áp dụng cho các thanh ghi từ R16 đến R31.
Ví dụ:
LDI R16, 10
CPI R16, 10
Kết quả là cờ Z được set thành 1 vì lúc này R16 =10.

- ANDI (AND with Immediate).

Cú pháp: ANDI Rd, K
Chức năng: thực hiện phép Logic AND giữa thanh ghi Rd với hằng số K và kết quả đặt lại trong Rd.
Giới hạn: chỉ áp dụng cho các thanh ghi từ R16 đến R31.
Ví dụ: ANDI R17, 0x00 kết quả là R17 có 0x00.

- AND (Logical AND).

Cú pháp: AND Rd, Rr
Chức năng: thực hiện phép Logic AND giữa 2 thanh ghi Rd và Rr , kết quả đặt lại trong Rd.
Giới hạn: áp dụng cho tất cả các thanh ghi trong RF.
Ví dụ:
LDI R1, 0xFF ;(11111111)
LDI R17, 0xAA; (10101010)
AND R1, R17
Kết quả là R1=0xAA vì 11111111 & 10101010 =10101010.

- ORI (Logical OR with Immediate).

Cú pháp: ORI Rd, K
Chức năng: thực hiện phép Logic OR giữa thanh ghi Rd với hằng số K và kết quả đặt lại trong Rd.
Giới hạn: chỉ áp dụng cho các thanh ghi từ R16 đến R31.
Ví dụ: ORI R17, 0xFF kết quả là R17 có 0xFF.

- OR (Logical OR).

Cú pháp: OR Rd, Rr
Chức năng: thực hiện phép Logic OR giữa 2 thanh ghi Rd và Rr , kết quả đặt lại trong Rd.
Giới hạn: áp dụng cho tất cả các thanh ghi trong RF.
Ví dụ:
LDI R1, 0xFF ;(11111111)
LDI R17, 0xAA; (10101010)
OR R1, R17
Kết quả là R1=0xFF vì 11111111 or 10101010 =11111111.

- LSL (Logical Shift Left).

Cú pháp: LSL Rd
Chức năng: dịch tất thanh ghi Rd sang trái 1 vị trí, Bit 7 (bit lớn nhất) của Rd sẽ được chứa trong cờ nhớ C, bit 0 của Rd bị xóa thành 0. Thực chất LSL tương đương với phép nhân thanh ghi Rd với 2. Bạn xem hình minh họa bên dưới.

Giới hạn: áp dụng cho tất cả các thanh ghi trong RF.
Ví dụ:
LDI R1, 0B11000011 ; (dạng nhị phân của 195)
LSL R1
Kết quả là R1=10000110 và cờ C =1 vì thanh ghi R1 đã được dịch sang trái 1 vị trí, trước khi dịch bit 7 của R1 là 1 nên sau khi dịch bit này được chứa trong C, cho nên C=1.

- LSR (Logical Shift Right).

Cú pháp: LSR Rd
Chức năng: dịch tất thanh ghi Rd sang phải 1 vị trí, Bit 0 (bit nhỏ nhất) của Rd sẽ được chứa trong cờ nhớ C, bit 7 của Rd bị xóa thành 0. Thực chất LSR tương đương với phép chia thanh ghi Rd cho 2. Bạn xem hình minh họa bên dưới.

Giới hạn: áp dụng cho tất cả các thanh ghi trong RF.
Ví dụ:
LDI R1, 0B11000110 ; (dạng nhị phân của 195)
LSR R1
Kết quả là R1=01100001 và cờ C =1 vì thanh ghi R1 đã được dịch sang phải 1 vị trí, trước khi dịch bit 0 của R1 là 1 nên sau khi dịch bit này được chứa trong C, cho nên C=1.

- ADD (ADD without Carry).

Cú pháp: ADD Rd, Rr
Chức năng: thực hiện phép cộng 2 thanh ghi Rd và Rr , kết quả đặt lại trong Rd. Cờ nhớ C không được sử dụng.
Giới hạn: áp dụng cho tất cả các thanh ghi trong RF.
Ví dụ:
LDI R16, 30
LDI R17, 25
ADD R16, R17
Kết quả là R16=55.


 

Related Articles

Chat Zalo