Professional Documents
Culture Documents
• CPU sử dụng các thanh ghi để lưu trữ dữ liệu tạm thời. Để lập trình bằng ngôn ngữ Assembly,
chúng ta phải hiểu các thanh ghi và kiến trúc của một CPU nhất định và vai trò của chúng trong
việc xử lý dữ liệu.
• Bộ vi điều khiển AVR có nhiều thanh ghi cho các phép toán số học và logic. Phần lớn các thanh
ghi AVR là các thanh ghi 8 bit.
• Các phạm vi này từ MSB (bit quan trọng nhất) D7 tới LSB (bit có ý nghĩa nhỏ nhất) D0 (hình 1).
3
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
• Các thanh ghi mục đích chung trong AVR giống như bộ tích lũy trong
các bộ vi xử lý khác, được sử dụng bởi tất cả các lệnh số học và logic.
❖ Lệnh LDI
• Lệnh LDI sao chép dữ liệu 8 bit vào thanh ghi cho mục đích chung. Định dạng câu lệnh:
• K là giá trị 8 bit có thể là 0–255 ở dạng thập phân hoặc 00–FF ở dạng hex và Rd là R16 đến R31
(bất kỳ thanh ghi nào trong số 16 thanh ghi mục đích chung phía trên). Lệnh sau tải thanh ghi R20
với giá trị 0x25 (25 ở dạng hex):
• Lưu ý: không thể tải giá trị vào các thanh ghi từ R0 đến R25 bằng lệnh LDI.
5
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
❖ Lệnh ADD
• Định dạng câu lệnh ADD:
• Lệnh ADD yêu cầu CPU cộng giá trị của Rr vào Rd và đưa kết quả trở lại thanh ghi Rd:
• Thanh ghi mục đích chung (GPRs) và ALU vị trí và quan hệ được biểu diễn trong hình 3.
6
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
• GPR sử dụng 32 byte dung lượng bộ nhớ dữ liệu. Chúng luôn lấy vị trí địa chỉ $00–$1F trong
bộ nhớ dữ liệu không gian, bất kể số chip AVR (hình 3).
• Bộ nhớ I/O được dành riêng cho các chức năng cụ thể như thanh ghi trạng thái bộ timer, giao
tiếp nối tiếp, cổng I/O, ADC, …
• Bộ nhớ I/O AVR là được tạo thành từ các thanh ghi 8 bit. Số lượng vị trí trong bộ nhớ dữ liệu
được dành riêng cho bộ nhớ I/O phụ thuộc vào số chân và chức năng ngoại vi được hỗ trợ bởi
loại chip AVR
9
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
• Mỗi vị trí của SRAM có thể được truy cập trực tiếp bằng địa chỉ của nó..
• Mỗi vị trí rộng 8 bit và có thể được sử dụng để lưu trữ bất kỳ dữ liệu nào chúng ta muốn miễn là
dữ liệu đó là 8 bit. Bảng 1. Kích cỡ bộ nhớ của các chip AVR
11
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
• Lệnh LDS yêu cầu CPU tải (sao chép) một byte từ một địa chỉ trong bộ nhớ dữ liệu tới GPR.
• Sau khi lệnh này được thực thi, GPR sẽ có cùng giá trị với vị trí trong bộ nhớ dữ liệu.
• Lệnh sau tải R5 với nội dung của vị trí 0x200. 0x200 nằm trong SRAM (hình 5).
12
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
• Chương trình sau thêm nội dung của vị trí 0x300 vào vị trí 0x302.
• Lệnh STS yêu cầu CPU lưu trữ (sao chép) nội dung của GPR đến một vị trí địa chỉ trong không
gian bộ nhớ dữ liệu.
• Chương trình sau đây trước tiên tải thanh ghi R16 có giá trị 0x55, sau đó di chuyển giá trị này
xung quanh các thanh ghi I/O của cổng B, C và D.
14
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
15
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
16
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
• CPU thực thi lệnh IN nhanh hơn LDS. Lệnh IN kéo dài 1 chu kỳ máy, trong khi LDS kéo dài 2
chu kỳ máy.
• IN là lệnh 2 byte, trong khi LDS là lệnh 4 byte. Lệnh IN chiếm ít bộ nhớ mã hơn.
• Khi sử dụng lệnh IN, chúng ta có thể sử dụng tên của các thanh ghi I/O thay vì địa chỉ.
• Lệnh IN có sẵn trong tất cả các AVR, trong khi LDS thì không được triển khai ở một số AVR.
▪ Sử dụng lệnh IN chúng ta chỉ có thể truy cập vào I/O tiêu chuẩn bộ nhớ. Lệnh LDS truy cập tất
cả các phần của bộ nhớ dữ liệu.
17
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
• Lệnh OUT yêu cầu CPU lưu GPR vào thanh ghi I/O.
• Chúng ta không thể sao chép một giá trị tức thời vào thanh ghi I/O cũng như vào vị trí SRAM.
18
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
❖ LỆNH MOVE
• Lệnh MOV được sử dụng để sao chép dữ liệu giữa các thanh ghi GPR của R0–R31.
• Chương trình sau thêm 0x19 vào nội dung của vị trí 0x220 và lưu trữ kết quả ở vị trí 0x221.
19
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
❖ LỆNH INC
❖ LỆNH SUB
• Lệnh SUB báo cho CPU trừ giá trị của Rr khỏi Rd và đưa nội dung về Rd.
20
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
• Các lệnh trong Bảng 2 hoạt động trên hai thanh ghi GPR nguồn (Rr) và đích (Rd) sau đó đặt kết
quả vào thanh ghi đích (Rd).
• Các lệnh trong Bảng 3 hoạt động trên một thanh ghi GPR và đặt kết quả sau đó đặt kết quả vào
thanh ghi GPR đó.
Bảng 2. Lệnh ALU sử dụng 2 GPR
21
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
❖ LỆNH DEC
22
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
❖ LỆNH COM
• Lệnh COM bổ sung (đảo ngược) nội dung của Rd và đặt kết quả trở lại nội dung vào Rd.
• Ví dụ: Viết 1 chương trình để chuyển đổi liên tục thanh ghi I/O của cổng B
23
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
• Giống như tất cả các bộ vi xử lý khác, AVR có một thanh ghi cờ để biểu thị các điều kiện số học
chẳng hạn như bit mang (carry bit).
▪ Cấu trúc thanh ghi trạng thái
• Thanh ghi trạng thái là thanh ghi 8 bit. Nó còn được gọi là bộ đăng ký cờ. Các bit C, Z, N, V, S và
H được gọi là cờ điều kiện, xảy ra sau khi một lệnh được thực thi.
• Cờ 0 phản ánh kết quả của phép toán số học hoặc logic. Nếu kết quả bằng 0 thì Z = 1. Do đó, Z =
0 nếu kết quả khác 0.
25
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
• Nếu có sự mang từ D3 đến D4 trong hoạt động lệnh ADD hoặc SUB, bit này được thiết lập; nếu
không, nó sẽ bị xóa. Bit cờ này được sử dụng bởi các lệnh thực hiện theo hệ số BCD (binary
coded decimal)
26
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
▪ Ví dụ:
27
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
▪ Ví dụ:
28
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
▪ Ví dụ:
29
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
▪ Ví dụ:
30
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
31
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
32
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
▪ Bài tập:
• Tìm giá trị bit cờ C, H, Z sau khi thực hiện 3 đoạn chương trình
33
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
• Có bốn cách để biểu diễn một byte dữ liệu trong trình biên dịch AVR: dạng hex, nhị phân, thập
phân hoặc ASCII
34
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
• Đặt 0x (or 0X) lên phía trước của phần số trong lệnh ví dụ: LDI R16, 0x99.
• Viết $ vào trước số như sau: LDI R22, $99.
• Ví dụ:
35
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
▪ Ký tự ASCII
36
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
• Ví dụ: LDI và ADD các lệnh là các lệnh gửi đến CPU, nhưng .EQU, .DEVICE và .ORG là các
lệnh gửi đến trình biên dịch mã.
37
Chương 3: Cấu trúc AVR và lập trình hợp ngữ (Assembly)
38
THANK YOU !