14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
Chương 3
Tập lệnh AVR
Nguyễn Thiên Trường 1
Tài liệu tham khảo:
1. Chương 3: Tập lệnh AVR (Giáo trình VXL)
2. AVR Instruction Set
3. Muhammad Ali Mazidi, AVR Microcontroller and Embedded Systems: Using Assembly and C,
Pearson New International Edition, 2014.
4. Datasheet ATmega324P
5. https://nicerland.com/avr/
6. http://www.hocavr.com/
7. https://www.youtube.com/watch?v=Fr2K9pzec8g&list=PLgwJf8NK-
2e55CdbY_WnY6pejPHoojCkJ
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
Nguyễn Thiên Trường 2
3.1 Giới thiệu
3.2 Các phương pháp định vị địa chỉ
3.3 Các nhóm lệnh
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
Nguyễn Lý Thiên Trường 3
3.1 Giới thiệu
▪Các lệnh của điều khiển vi AVR được truy xuất theo từ (word).
▪Mỗi word (2 byte) y được ct trong bộ nhớ chương
trình (Flash ROM) theo Little endian (kiểu tứcbyte cao được
lưu địa chỉ cao, byte thấp được lưu địa chỉ thấp ).
▪Đa số các y dài 2 byte, lệnh có mã một số dài 4 byte. lệnh
▪Thời thực mỗi gian thi cho lệnh đa số 1, 2 chu y (MC) kỳ
một số 3, 4 chu lệnh kỳ máy.
▪Với mỗi điều khiển chip vi khác nhau thuộc họ AVR sẽ có một
chút khác biệt có thể về phần cứng ng n tập lệnh đi
kèm, khi do đó sử dụng một chip cụ thể nào chúng ta cần phải
tham khảo datasheet tương ứng .
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
Nguyễn Lý Thiên Trường 4
3.1 Giới thiệu
▪Little endian Big endian.
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
Nguyễn Lý Thiên Trường 5
3.2 Các phương định chỉ pháp vị địa
▪Tổng cộng 15 phương định địa pháp chỉ khác nhau. Có thể
chia thành 8 nhóm như sau:
•Định địa chỉ thanh ghi .đơn
•Định địa chỉ thanh ghi ( 2 toán cả hạng đều là thanh ghi).
•Định địa chỉ trực tiếp bộ nhớ SRAM.
•Định địa chỉ tiếp gián bộ nhớ SRAM (qua thanh ghi con trỏ).
•Định địa chỉ trực tiếp bộ nhớ FLASH.
•Định địa chỉ gián tiếp bộ nhớ FLASH (qua thanh ghi con trỏ).
•Định địa chỉ tương đối.
•Định địa chỉ bit.
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
Nguyễn Lý Thiên Trường 6
3.2 Các phương định chỉ pháp vị địa
▪Các hiệu dùng trong phương pháp định địa chỉ tập lệnh:
Các thanh ghi toán hạng lệnh trong
Rd: thanh ghi đích nguồn/ trong tập thanh ghi
Rr: thanh ghi nguồn trong tập thanh ghi
R: kết quả sau khi thi thực lệnh
K: hằng liệu số dữ
k: hằng số địa chỉ
b: bit trong tập GPRs hoặc I/O REGs (3-bit)
s: Bit trong SREG (3-bit)
X,Y,Z: Thanh ghi địa chỉ tiếp gián (con trỏ).
X=R27:R26, =R29:R28, Y Z=R31:R30
P: địa chỉ các I/O REGs (I/O bản chuẩn).
q: độ dời hoặc địa chỉ trực tiếp (6-bit)
Thanh ghi trạng thái SREG và các bit trong thanh ghi
SREG: thanh ghi trạng thái
C: Cờ Carry
Z: Cờ Zero
N: Cờ âm
V: Cờ tràn 2
S: Cờ dấu (S = N V)
H: Cờ nhớ phân nửa
T: bit sao chép trong các sử dụng lệnh BLD và BST
I: Cờ cho phép/không cho phép ngắt toàn cục
Hằng số và nội dung ô nhớ
A: hằng số dữ liệu A hay ô nhớ có địa chỉ là A
(A): nội dung ô nhớ có địa chỉ A
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
7
3.2.1 thanh ghi Định địa chỉ đơn
▪Phương pháp này 2 gồm có kiểu tùy theo các toán hạng được
sử dụng trong : toán thanh ghi , hay lệnh hạng chỉ một đơn
1 thanh ghi với trị 1 giá tức thời K.
▪Đối với phương hạng chỉ một đơn pháp toán thanh ghi
sẽ dùng bit cho opcode 5 bit 11 để mã hóa cho trí vị của
Rd (0 ). d31
Nguyễn Lý Thiên Trường
Ví dụ:
INC R2; dung thanh ghi lên 1tăng nội R2
NEG R16; tính dung thanh ghi bù 2 nội R16
Mã máy:
INC 0x9423 [0b ]R2; 1001 0100 0010 0011
NEG 0x9501 [0bR16; 1001 0101 0000 0001]
Cấu trúc lệnh với hạng chỉ toán 1 thanh ghi :đơn
Lưu ý: lệnh CLR Rd
cấu trúc máy
như lệnh EOR Rd,Rd
(xem tập lệnh).
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
8Nguyễn Lý Thiên Trường
ATmega Instruction Set
Ví dụ:
INC R2; tăng nội dung thanh ghi R2 lên 1
[0b máy: 0x9423 1001 0100 0010 0011]
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
9Nguyễn Lý Thiên Trường
ATmega Instruction Set
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
10
3.2.1 thanh ghi Định địa chỉ đơn
▪Phương định địa chỉ pháp thanh ghi đơn với một giá trị tức thời
(hằng số 8 bit) 4 bit cho opcode, 4 bit cho (sử dụng Rd 16d31)
8 bit cho dữ liệu K ( phân, Nhị thập phân, thập lục phân, mã ASCII).
Nguyễn Lý Thiên Trường
Ví dụ:
LDI R16,200; R16 = 200
SUBI R28,0x20; R28 -  R28 20H
Mã máy:
LDI ; 0xEC08 [0b ]R16,200 1110 1100 0000 1000
SUBI ; 0x52C0 [0b ]R28,0x20 0101 0010 1100 0000
Cấu trúc lệnh với hạng với trị toán 1 thanh ghi giá tức thời :
12 11
Lưu ý: chỉ được phép
sử dụng vi các thanh
ghi R từ 16÷R31 → được
hóa 4 bằng bit nhị
phân giá trị tương
ứng từ 0÷15.
I = Immediate: tức thời Nếu K
số âm thì
K −256
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
11
3.2.2 thanh ghi ( 2 toán )Định địa chỉ cả hạng
Nguyễn Lý Thiên Trường
Ví dụ:
MOV R2,R3; R2  R3
ADD R1,R16; R1  R1 + R16
Mã máy:
MOV 0x2C23 [0b ]R2,R3; 0010 1100 0010 0011
ADD R1,R16; 0x0E10 [0b ]0000 1110 0001 0000
Cấu trúc lệnh với cả toán thanh ghi:2 hạng đều là
▪Phương định pháp địa chỉ thanh ghi trong câu 2 toán sử dụng lệnh hạng là
các thanh ghi (GPRs). Rd Rr
▪Thực hiện lệnh các thao tác trên các dữ liệu được đặt trong 2 thanh ghi Rd và
Rr, quy ước Rr toán hạng nguồn, Rd là toán hạng đích kết cất, quả vào .Rd
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
12
3.2.3 SRAMĐịnh địa chỉ trực tiếp bộ nhớ
Nguyễn Lý Thiên Trường
Mã máy:
OUT PORTA,R1; 0xB812 [1011 1000 0001 0010]
OUT 0xB812 [ ]$02,R1; 1011 1000 0001 0010
Cấu trúc lệnh định địa chỉ trực tiếp vùng thanh ghi I/O bản:
▪Dùng để truy xuất trực tiếp đến các thanh ghi I/O vùng SRAM (Data memory).
▪Ký hiệu P (0 P 63) trong tập lệnh thực hiện trên các toán các thanh ghi I/O hạng là bản,
k (0 k 8 ) FFH địa chỉ các ô SRAM (toàn SRAM).nhớ bộ bộ nhớ
▪Nếu k 60H FFH (thuộc vùng I/O mở rộng thể): thay bằng tên thanh ghi I/O tương ứng
thay vì dùng địa chỉ bộ nhớ (SRAM).
▪Sử dụng các lệnh cập IN OUT để truy vùng (hay vùng I/O I/O bản chuẩn). Thông thường là
sử dụng tên thanh ghi thay I/O vì địa chỉ I/O.
Ví dụ:
OUT PORTA,R1; PORTA  R1
OUT $02,R1; (02H) PORTA  R1  R1
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
13
3.2.3 SRAMĐịnh địa chỉ trực tiếp bộ nhớ
Nguyễn Lý Thiên Trường
Mã máy:
IN ; 0xB033 [ ]R3,PINB 1011 0000 0011 0011
IN 0xB033 [ ]R3,$03; 1011 0000 0011 0011
Cấu trúc lệnh định địa chỉ trực tiếp vùng thanh ghi I/O bản:
▪Sử dụng các lệnh IN OUT truy vùng I/O để cập bản (hay vùng I/O chuẩn).
Ví dụ:
IN R3,PINB; R3 PINB
IN R3,$03; R3 (03H) PINB R3 
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
14
3.2.3 SRAMĐịnh địa chỉ trực tiếp bộ nhớ
Nguyễn Lý Thiên Trường
Mã máy:
OUT PORTA,R1; 0xB812 (2 byte), 1MC
STS ,R1; (4 byte)$22 0x9210, 0x0022
; gian thi: 2MC Thời thực
▪Mỗi thanh ghi I/O cơ bản trong không gian bộ nhớ dữ liệu sẽ 2 địa chỉ tương ứng
đó là địa chỉ địa chỉ I/O và bộ nhớ (hay địa chỉ địa chỉ liệu mem, dữ ).
Ví dụ:
OUT PORTA,R1; PORTA  R1
STS $22,R1; (22H)  R1
▪Khi làm việc với bản thể các I/O ta ng trong 2 một
phương định địa chỉ thực hiện lệnh pháp khác nhau để
(OUT/STS, IN/LDS). pháp cho kích Mỗi phương thước
lệnh thời gian thi thực lệnh khác nhau.
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
15
3.2.3 SRAMĐịnh địa chỉ trực tiếp bộ nhớ
Nguyễn Lý Thiên Trường
Mã máy:
IN R3,PINB; 0xB033 (2 byte), 1MC
LDS (4 byte), 2MCR3,$23; 0x9030, 0x0023
▪Mỗi thanh ghi I/O cơ bản trong không gian bộ nhớ dữ liệu sẽ 2 địa chỉ tương ứng
đó là địa chỉ địa chỉ I/O và dữ liệu (hay , địa chỉ bộ nhớ địa chỉ mem).
Ví dụ:
IN R3,PINB; R3 PINB
LDS R3,$23; R3 (23H)
▪Khi làm việc với bản thể các I/O ta ng trong 2 một
phương định địa chỉ thực hiện lệnh pháp khác nhau để
(OUT/STS, IN/LDS). pháp cho kích Mỗi phương thước
lệnh thời gian thi thực lệnh khác nhau.
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
16
3.2.3 SRAMĐịnh địa chỉ trực tiếp bộ nhớ
Nguyễn Lý Thiên Trường
Mã máy:
LDS R0,UDR0; 0x9000, 0x00C6
STS $100,R0; 0x9200, 0x0100
Cấu trúc lệnh định địa chỉ trực tiếp vùng thanh ghi I/O mở rộng SRAM:
▪Sử dụng các STS LDS truy vùng I/O lệnh để cập mở rộng và vùng Data SRAM (2KB).
Lưu ý: các lệnh cập STS LDS dùng để truy trực tiếp
đến tất nội cả dung H 8 .SRAM từ 000 đến FFH
Ví dụ:
LDS R0,UDR0; R0 UDR0
STS $100,R0; (100H)  R0
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
17
3.2.4 gián SRAMĐịnh địa chỉ tiếp bộ nhớ
▪Phương định pháp địa chỉ gián qua thanh ghi tiếp thực hiện trên các lệnh dùng để truy
xuất dữ liệu vùng SRAM sử dụng các thanh ghi con Y Z.trỏ X, hoặc
▪Các thanh ghi X, Z Y, hoạt động như tr các con (pointer) dung các thanh ghi nội của
y các ô trong vùng SRAM, là địa chỉ của nhớ nơi mà dữ liệu được đọc hoặc sẽ ghi.
▪Phương pháp này chia làm 4 khác nhau: gián , gián được ra kiểu dữ liệu tiếp dữ liệu
tiếp với tiền tr liệu tiếp với hậu cộng liệu tiếp với một tố (-), dữ gián tố (+) và dữ gián
độ chuyển dời q (6 bit, 0 q ≤ 63) thông các qua lệnh LD, LDD, ST, STD.
Ví dụ: Để thực hiện việc ghi giá 0xCC vào trị địa chỉ SRAM 0x cùng 800 với việc chọn
thanh ghi Y làm con trỏ trong pháp phương định địa chỉ này, ta thực hiện các sau:lệnh
LDI R16,0xCC ;lưu dữ liệu cần ghi vào R16
LDI R28,0x00 ;lưu địa chỉ ô nhớ vào Y
LDI R29,0X08 ;Y YH:YL R29:R28
ST Y, R16;ghi dữ liệu
0xCC
Bộ nhớ SRAM
0x800
0x801
0x7FF
Trực tiếp ?
Gián tiếp:
LDI R16,0xCC ;R16 = CCH
STS 0x800, R16; (0x800) R16
Nguyễn Lý Thiên Trường
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
18
3.2.4 gián SRAMĐịnh địa chỉ tiếp bộ nhớ
Ví dụ: Đọc nội dung SRAM ô nhớ có địa chỉ 0x cùng 800 với việc chọn thanh ghi X làm
con tr. Kết lưu quả vào thanh ghi R7.
LDI R27,0x08 ; byte cao lưu địa chỉ ô nhớ vào X
LDI R26,0x00 byte ; lưu thấp địa chỉ ô nhớ vào X
LD R7, X; đọc dữ liệu
0xCC
Bộ nhớ SRAM
0x800
0x801
0x7FF
Trực tiếp ?
Gián :tiếp
LDS R7,0x800; R7 (0x800)
Lưu ý: Thanh ghi XH:XL R27:R26X
LDI XH,0x08 ; byte cao lưu địa chỉ ô nhớ vào X
LDI XL,0x00 ; byte lưu thấp địa chỉ ô nhớ vào X
LD R7, X; đọc dữ liệu
Nguyễn Lý Thiên Trường
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
19
3.2.4 gián SRAMĐịnh địa chỉ tiếp bộ nhớ
Ví dụ: Đọc ô nội dung SRAM ở nhớ có địa chỉ 0x cùng 800 với việc chọn thanh ghi Z làm
con trỏ kết với tiền trừ Kết hợp tố . quả lưu vào thanh ghi R7.
LDI R31,0x08 ; byte cao vào Zlưu địa chỉ ô nhớ
LDI R30, ; byte 0x01 lưu thấp địa chỉ ô nhớ vào Z
LD R7, -Z ;Z - 1, Z đọc dữ liệu
0xCC
Bộ nhớ SRAM
0x800
0x801
0x7FF
Gián tiếp:
Lưu ý: Thanh ghi ZH:ZL R31:R30Z ≡
LDI ZH,0x08 ; byte cao lưu địa chỉ ô nhớ vào Z
LDI ZL, ; byte 0x01 lưu thấp địa chỉ ô nhớ vào Z
LD R7, -Z ;Z - 1, Z đọc dữ liệu
▪Phương định pháp địa chỉ tiếp gián với tiền tố trừ (-) thực hiện lệnh trong câu
các toán các thanh ghi con hạng là tr với hiệu dấu trừ phía trước X, Y, Z (- -X, Y,
-Z).
▪Địa chỉ của các toán hạng được định bằng xác cách lấy nội của dung các con trỏ trừ
đi 1 trước khi , thực hiện lệnh kết giữ quả này sẽ nguyên trong con trỏ sau khi
thực hiện xong lệnh.
▪Lưu hậu ý: tố trừ sau Z X, Y, (X-, Y-, Z-) : sai pháp.
Nguyễn Lý Thiên Trường
14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
20
3.2.4 gián SRAMĐịnh địa chỉ tiếp bộ nhớ
Ví dụ: Đọc ô nội dung SRAM ở nhớ địa chỉ 0x800 0x cùng 801 với việc chọn thanh
ghi Z làm con trỏ kết với hậu cộng Kết lưu tương hợp tố . quả vào thanh ghi R7 R8
ứng.
LDI ZH,0x08 ; byte cao lưu địa chỉ ô nhớ vào Z
LDI ZL,0x00 ; byte lưu thấp địa chỉ ô nhớ vào Z
LD R7, Z+ ; , Z Z + 1 đọc dữ liệu
LD R8, Z
0x2A
0xCC
0x12
Bộ nhớ SRAM
0x800
0x801
0x7FF
Gián :tiếp
▪Phương định địa chỉ pháp gián tiếp với hậu cộng tố (+) thực hiện trong câu lệnh có
các toán hạng là các thanh ghi con trỏ với hiệu dấu cộng phía sau Z (X+, Y+, X, Y,
Z+).
▪Phương thực pháp này hiện xong lệnh rồi tăng ni tr Kết dung con lên 1. quả này
sẽ giữ nguyên trong con tr sau khi thực hiện xong . lệnh
▪Lưu tiền ý: tố cộng trước X, Y, Z (+X, +Y, +Z): sai pháp.
Nguyễn Lý Thiên Trường

Preview text:

14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu Chương 3 Tập lệnh AVR Tài liệu tham khảo:
1. Chương 3: Tập lệnh AVR (Giáo trình VXL) 2. AVR Instruction Set
3. Muhammad Ali Mazidi, AVR Microcontroller and Embedded Systems: Using Assembly and C,
Pearson New International Edition, 2014. 4. Datasheet ATmega324P 5. https://nicerland.com/avr/ 6. http://www.hocavr.com/
7. https://www.youtube.com/watch?v=Fr2K9pzec8g&list=PLgwJf8NK- 2e55CdbY_WnY6pejPHoojCkJ Nguyễn Lý Thiên Trường 1 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu 3.1 Giới thiệu
3.2 Các phương pháp định vị địa chỉ 3.3 Các nhóm lệnh
Nguyễn Lý Thiên Trường 2 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu 3.1 Giới thiệu
▪Các lệnh của vi điều khiển
AVR được truy xuất theo từ (word).
▪Mỗi word (2 byte) mã máy được cất trong bộ nhớ chương
trình (Flash ROM) theo kiểu Little endian (tức là byte cao được lưu ở địa
chỉ cao, byte thấp được lưu ở địa chỉ thấp).
▪Đa số các lệnh có mã máy dài 2 byte, một số lệnh dài 4 byte.
▪Thời gian thực thi cho mỗi lệnh đa số là 1, 2 chu kỳ máy (MC)
và một số lệnh 3, 4 chu kỳ máy.
▪Với mỗi chip vi điều khiển khác nhau thuộc họ AVR sẽ có một
chút khác biệt có thể là về phần cứng cũ ng n hư t ập lệnh đi
kèm, do đó khi sử dụng một chip cụ thể nào chúng ta cần phải
tham khảo datasheet tương ứng. Nguyễn Lý Thiên Trường 3 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu 3.1 Giới thiệu
▪Little endian và Big endian. Nguyễn Lý Thiên Trường 4 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
3.2 Các phương pháp định vị địa chỉ ▪Tổng c
ộng có 15 phương pháp định đ
ịa chỉ khác nhau. Có thể chia thành 8 nhóm như sau:
•Định địa chỉ thanh ghi đơn. •Định địa
chỉ thanh ghi (cả 2 toán hạng đều là thanh ghi).
•Định địa chỉ trực tiếp bộ nhớ SRAM. •Định địa
chỉ gián tiếp bộ nhớ SRAM (qua thanh ghi con trỏ). •Định địa chỉ trực tiếp bộ nhớ FLASH.
•Định địa chỉ gián tiếp bộ nhớ FLASH (qua thanh ghi con trỏ). •Định địa chỉ tương đối. •Định địa chỉ bit. Nguyễn Lý Thiên Trường 5 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
3.2 Các phương pháp định vị địa chỉ ▪Các
ký hiệu dùng trong phương pháp định địa chỉ và tập lệnh:
Thanh ghi trạng thái SREG và các bit trong thanh ghi Các thanh ghi và toán hạng trong lệnh SREG: thanh ghi trạng thái
Rd: thanh ghi đích/nguồn trong tập thanh ghi
Rr: thanh ghi nguồn trong tập thanh ghi
R: kết quả sau khi thực thi lệnh C: Cờ Carry Z: Cờ Zero K: hằng số dữ liệu N: Cờ âm k: hằng số địa chỉ V: Cờ tràn bù 2 S: Cờ dấu (S = N ⊕ V)
b: bit trong tập GPRs hoặc I/O REGs (3-bit) H: Cờ nhớ phân nửa s: Bit trong SREG (3-bit)
T: bit sao chép sử dụng trong các lệnh BLD và BST
I: Cờ cho phép/không cho phép ngắt toàn cục
X,Y,Z: Thanh ghi địa chỉ gián tiếp (con trỏ).
X=R27:R26, Y=R29:R28, Z=R31:R30
Hằng số và nội dung ô nhớ
A: hằng số dữ liệu A hay ô nhớ có địa chỉ là A
P: địa chỉ các I/O REGs cơ bản (I/O chuẩn).
(A): nội dung ô nhớ có địa chỉ là A
q: độ dời hoặc địa chỉ trực tiếp (6-bit) Nguyễn Lý Thiên Trường 6 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
3.2.1 Định địa chỉ thanh ghi đơn
▪Phương pháp này gồm có 2 kiểu tùy theo các toán hạng được
sử dụng trong lệnh: toán hạng chỉ là một thanh ghi đơn, hay
1 thanh ghi với 1 giá trị tức thời K.
▪Đối với phương pháp có toán hạng chỉ là một thanh ghi đơn
sẽ dùng 11 bit cho opcode và 5 bit để mã hóa cho vị trí của Rd (0 d ).
31 Cấu trúc mã lệnh với toán hạng chỉ là 1 thanh ghi đơn: Ví dụ: INC
R2; tăng nội dung thanh ghi R2 lên 1 NEG
R16; tính bù 2 nội dung thanh ghi R16 Lưu ý: lệnh CLR Rd Mã máy: có cấu trúc mã máy INC R2;
0x9423 [0b1001 0100 0010 0011] như lệnh EOR Rd,Rd NEG R16;
0x9501 [0b1001 0101 0000 0001] (xem tập lệnh). Nguyễn Lý Thiên Trường 7 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu Ví dụ: INC R2; tăng nội dung thanh ghi R2 lên 1
Mã máy: 0x9423 [0b1001 0100 0010 0011] ATmega Instruction Set Nguyễn Lý Thiên Trường 8 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu ATmega Instruction Set Nguyễn Lý Thiên Trường 9 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
3.2.1 Định địa chỉ thanh ghi đơn
▪Phương pháp định địa chỉ thanh ghi đơn với một giá trị tức thời
(hằng số 8 bit) sử dụng 4 bit cho opcode, 4 bit cho Rd (16 d 31) và
8 bit cho dữ liệu K (Nhị phân, thập phân, thập lục phân, mã ASCII).
Cấu trúc mã lệnh với toán hạng là 1 thanh ghi với giá trị tức thời: 12 11
Ví dụ: I = Immediate: tức thời Nếu K là Lưu ý: chỉ được phép LDI R16,200; R16 = 200 số âm thì sử dụng với các thanh SUBI
R28,0x20; R28 R28 - 20H K ≥ −256
ghi từ R16÷R31 → được Mã máy: mã hóa bằ ng 4 bit nhị LDI
R16,200; 0xEC08 [0b1110 1100 0000 1000] phân có giá trị tương SUBI
R28,0x20; 0x52C0 [0b0101 0010 1100 0000] ứng từ 0÷15. Nguyễn Lý Thiên Trường 10 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
3.2.2 Định địa chỉ thanh ghi (cả 2 toán hạng)
▪Phương pháp định địa chỉ thanh ghi sử dụng trong câu lệnh có 2 toán hạng là
các thanh ghi Rd và Rr (GPRs).
▪Thực hiện các thao tác lệnh trên các dữ liệu được đặt trong 2 thanh ghi Rd và
Rr, quy ước Rr là toán hạng nguồn, Rd là toán hạng đích, kết quả cất vào Rd.
Cấu trúc mã lệnh với cả 2 toán hạng đều là thanh ghi: Ví dụ: MOV R2,R3; R2 R3 ADD R1,R16; R1 R1 + R16 Mã máy: MOV
R2,R3; 0x2C23 [0b0010 1100 0010 0011] ADD
R1,R16; 0x0E10 [0b0000 1110 0001 0000] Nguyễn Lý Thiên Trường 11 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM
▪Dùng để truy xuất trực tiếp đến các thanh ghi I/O và vùng SRAM (Data memory).
▪Ký hiệu P (0 ≤ P ≤ 63) trong tập lệnh thực hiện trên các toán hạng là các thanh ghi I/O cơ bản,
k (0 ≤ k ≤ 8FFH) là địa chỉ các ô nhớ SRAM (toàn bộ bộ nhớ SRAM).
▪Nếu 60H ≤ k ≤ FFH (thuộc vùng I/O mở rộng): có thể thay bằng tên thanh ghi I/O tương ứng
thay vì dùng địa chỉ bộ nhớ (SRAM).
▪Sử dụng các lệnh IN và OUT để truy cập vùng I/O cơ bản (hay vùng I/O chuẩn). Thông thường là
sử dụng tên thanh ghi I/O thay vì địa chỉ I/O.
Cấu trúc mã lệnh định địa chỉ trực tiếp vùng thanh ghi I/O cơ bản: Ví dụ: OUT PORTA,R1; PORTA R1 OUT $02,R1; (02H) R1 ⇔ PORTA R1 Mã máy: OUT
PORTA,R1; 0xB812 [1011 1000 0001 0010] OUT
$02,R1; 0xB812 [1011 1000 0001 0010] Nguyễn Lý Thiên Trường 12 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM
▪Sử dụng các lệnh IN và OUT để truy cập vùng I/O cơ bản (hay vùng I/O chuẩn).
Cấu trúc mã lệnh định địa chỉ trực tiếp vùng thanh ghi I/O cơ bản: Ví dụ: IN R3,PINB; R3 PINB IN R3,$03; R3 (03H) ⇔ R3 PINB Mã máy: IN
R3,PINB; 0xB033 [1011 0000 0011 0011] IN
R3,$03; 0xB033 [1011 0000 0011 0011] Nguyễn Lý Thiên Trường 13 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM
▪Mỗi thanh ghi I/O cơ bản trong không gian bộ nhớ dữ liệu sẽ có 2 địa chỉ tương ứng
đó là địa chỉ I/O và địa chỉ bộ nhớ (hay địa chỉ mem, địa chỉ dữ liệu).
▪Khi làm việc với các I/O cơ bản ta có thể dùng một trong 2 phương pháp định địa chỉ khác nhau để thực hiện lệnh
(OUT/STS, IN/LDS). Mỗi phương pháp cho kích thước mã
lệnh và thời gian thực thi lệnh khác nhau. Ví dụ: OUT PORTA,R1; PORTA R1 STS $22,R1; (22H) R1 Mã máy: OUT PORTA,R1; 0xB812 (2 byte), 1MC STS $22,R1; 0x9210, 0x0022 (4 byte) ; Thời gian thực thi: 2MC Nguyễn Lý Thiên Trường 14 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM
▪Mỗi thanh ghi I/O cơ bản trong không gian bộ nhớ dữ liệu sẽ có 2 địa chỉ tương ứng
đó là địa chỉ I/O và địa chỉ dữ liệu (hay địa chỉ bộ nhớ, địa chỉ mem).
▪Khi làm việc với các I/O cơ bản ta có thể dùng một trong 2 phương pháp định địa chỉ khác nhau để thực hiện lệnh
(OUT/STS, IN/LDS). Mỗi phương pháp cho kích thước mã
lệnh và thời gian thực thi lệnh khác nhau. Ví dụ: IN R3,PINB; R3 PINB LDS R3,$23; R3 (23H) Mã máy: IN R3,PINB; 0xB033 (2 byte), 1MC LDS
R3,$23; 0x9030, 0x0023 (4 byte), 2MC Nguyễn Lý Thiên Trường 15 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
3.2.3 Định địa chỉ trực tiếp bộ nhớ SRAM
▪Sử dụng các lệnh STS và LDS để truy cập vùng I/O mở rộng và vùng Data SRAM (2KB).
Cấu trúc mã lệnh định địa chỉ trực tiếp vùng thanh ghi I/O mở rộng và SRAM: Ví dụ: LDS R0,UDR0; R0 UDR0 STS $100,R0; (100H) R0 Mã máy: LDS R0,UDR0; 0x9000, 0x00C6 STS $100,R0; 0x9200, 0x0100
➢Lưu ý: các lệnh STS và LDS dùng để truy cập trực tiếp
đến tất cả nội dung SRAM từ 000H đến 8FFH. Nguyễn Lý Thiên Trường 16 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM
▪Phương pháp định địa chỉ gián tiếp qua thanh ghi thực hiện trên các lệnh dùng để truy
xuất dữ liệu vùng SRAM sử dụng các thanh ghi con trỏ X, Y hoặc Z.
▪Các thanh ghi X, Y, Z hoạt động như các con trỏ (pointer) và nội dung của các thanh ghi
này là địa chỉ của các ô nhớ trong vùng SRAM, nơi mà dữ liệu sẽ được đọc hoặc là ghi.
▪Phương pháp này được chia ra làm 4 kiểu khác nhau: dữ liệu gián tiếp, dữ liệu gián tiếp với tiền tố tr ừ (-), dữ li ệu giá ti n ếp với hậu
tố cộng (+) và dữ liệu giá t n iếp với một
độ chuyển dời q (6 bit, 0 ≤ q ≤ 63) thông qua các lệnh LD, LDD, ST, STD.
Ví dụ: Để thực hiện việc ghi giá trị 0xCC vào địa chỉ SRAM 0x 800 cùng với việc chọn
thanh ghi Y làm con trỏ trong phương pháp định địa chỉ này, ta thực hiện các lệnh sau: Bộ nhớ SRAM Gián tiếp: LDI
R16,0xCC ;lưu dữ liệu cần ghi vào R16 0x7FF LDI
R28,0x00 ;lưu địa chỉ ô nhớ vào Y 0x800 0xCC LDI R29,0X08 ;Y YH:YL R29:R28 ST Y, R16;ghi dữ liệu 0x801 Trực tiếp ? LDI R16,0xCC ;R16 = CCH STS 0x800, R16; (0x800) R16 Nguyễn Lý Thiên Trường 17 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM
Ví dụ: Đọc nội dung SRAM ở ô nhớ có địa chỉ 0x cùng 800
với việc chọn thanh ghi X làm
con trỏ. Kết quả lưu vào thanh ghi R7. Bộ nhớ SRAM Gián tiếp: LDI
R27,0x08 ;lưu byte cao địa chỉ ô nhớ vào X 0x7FF LDI
R26,0x00 ; lưu byte thấp địa chỉ ô nhớ vào X 0x800 0xCC LD R7, X; đọc dữ liệu 0x801
➢Lưu ý: Thanh ghi X ≡ XH:XL ≡ R27:R26 LDI
XH,0x08 ;lưu byte cao địa chỉ ô nhớ vào X LDI
XL,0x00 ;lưu byte thấp địa chỉ ô nhớ vào X LD R7, X; đọc dữ liệu Trực tiếp? LDS R7,0x800; R7 (0x800) Nguyễn Lý Thiên Trường 18 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM
▪Phương pháp định địa chỉ gián tiếp với tiền tố trừ (-) thực hiện trong câu lệnh có
các toán hạng là các thanh ghi con trỏ với ký hiệu dấu trừ phía trước X, Y, Z (-X, -Y, -Z).
▪Địa chỉ của các toán hạng được xác định bằng cách lấy nội dung của các con trỏ trừ
đi 1 trước khi thực hiện lệnh, và kết quả này sẽ giữ
nguyên trong con trỏ sau khi thực hiện xong lệnh.
▪Lưu ý: hậu tố trừ sau X, Y, Z (X-, Y-, Z-) : sai cú pháp.
Ví dụ: Đọc nội dung SRAM ở ô nhớ có địa chỉ 0x800 cùng với việc chọn thanh ghi Z làm
con trỏ kết hợp với tiền tố trừ Kết . quả lưu vào thanh ghi R7. Bộ nhớ SRAM Gián tiếp: LDI
R31,0x08 ;lưu byte cao địa chỉ ô nhớ vào Z 0x7FF LDI R30, ;
0x01 lưu byte thấp địa chỉ ô nhớ vào Z 0x800 0xCC LD R7, -Z ;Z Z - 1, đọc dữ liệu 0x801
➢Lưu ý: Thanh ghi Z ≡ ZH:ZL ≡ R31:R30 LDI
ZH,0x08 ;lưu byte cao địa chỉ ô nhớ vào Z LDI
ZL,0x01 ;lưu byte thấp địa chỉ ô nhớ vào Z LD R7, -Z ;Z Z - 1, đọc dữ liệu Nguyễn Lý Thiên Trường 19 14:17, 10/01/2026
Chương 3: Tập Lệnh AVR cho ATmega 324P - Hướng Dẫn và Ví Dụ - Studocu
3.2.4 Định địa chỉ gián tiếp bộ nhớ SRAM
▪Phương pháp định địa chỉ gián tiếp với hậu tố cộ ng (+) thực hiện trong câu lệnh có
các toán hạng là các thanh ghi con trỏ với ký hiệu dấu cộng phía sau X, Y, Z (X+, Y+, Z+).
▪Phương pháp này thực hiện xong lệnh rồi tăng nội dung con trỏ lên 1. Kết quả này
sẽ giữ nguyên trong con trỏ sau khi thực hiện xong lệnh.
▪Lưu ý: tiền tố cộng trước X, Y, Z (+X, +Y, +Z): sai cú pháp.
Ví dụ: Đọc nội dung SRAM ở ô nhớ có địa chỉ 0x800 và 0x801 cùng với việc chọn thanh ghi Z làm con trỏ k ết hợp v ới hậu tố cộng . Kết quả lưu
vào thanh ghi R7 và R8 tương ứng. Bộ nhớ SRAM Gián tiếp: 0x7FF 0x2A LDI
ZH,0x08 ;lưu byte cao địa chỉ ô nhớ vào Z LDI
ZL,0x00 ;lưu byte thấp địa chỉ ô nhớ vào Z 0x800 0xCC LD R7, Z+ ;đọc dữ liệu, Z Z + 1 0x801 0x12 LD R8, Z Nguyễn Lý Thiên Trường 20