Trường nhãn• Nhãn biểu thị địa chỉ của lệnh hoặc dữ liệu theo sau • Phân biệt với ký hiệu, nhãn là 1 loại ký hiệu & được nhận... Trường toán hạng• Theo sau trường mã gợi nhớ • Chứa địa c
Trang 11 Giới thiệu
2 Sơ đồ khối và chân
3 Tổ chức bộ nhớ
4 Các thanh ghi chức năng đặc biệt (SFR)
5 Dao động và hoạt động reset
Trang 2EDITOR PROGRAM
ASSEMBLER PROGRAM
LINKER PROGRAM
OH PROGRAM
Myfile.bin
Trình dịch sang BIN
Trang 313-1 Cấu trúc chương trình Assembly
#INCLUDE "8051EQU.INC" ;include predefined constantsORG 0H ;reset routine ;locate routine at 00H
LJMP MAIN ;jump to MAIN
;place interrupt routines at appropriate memory locations
ORG 03H ;external interrupt 0
RETI ;or LJMP EX0ISR if enabled
ORG 0BH ;timer 0 interrupt
RETI ;or LJMP T0ISR if enabled
ORG 13H ;external interrupt 1
Trang 4ORG 23H ;serial port interrupt
RETI ;or LJMP SPISR if enabled
ORG 30H ;locate beginning of rest of program
INITIALIZE: ;set up control registers
Trang 713-2-1 Trường nhãn
• Nhãn biểu thị địa chỉ của lệnh (hoặc dữ liệu) theo sau
• Phân biệt với ký hiệu, nhãn là 1 loại ký hiệu & được nhận
Trang 813-2-2 Trường mã gợi nhớ
• Mã gợi nhớ của lệnh: ADD, MOV, DIV, INC,…
• Mã gợi nhớ của chỉ dẫn: ORG, EQU, DB,…
Trang 913-2-3 Trường toán hạng
• Theo sau trường mã gợi nhớ
• Chứa địa chỉ hoặc dữ liệu mà lệnh sử dụng
[Label:] mnemonic [operand][,operand][…] [;comment]
Trang 1213-2-6 Địa chỉ gián tiếp
• Trường toán hạng có thể xác định 1 thanh ghi mà nội dung
thanh ghi là địa chỉ của dữ liệu
• @ chỉ ra một địa chỉ gián tiếp và thanh ghi theo sau có thể làR0 hoặc R1, DPTR hay PC tùy lệnh cụ thể
Trang 1413-2-8 Địa chỉ dữ liệu
• Các lệnh sử dụng kiểu định địa chỉ trực tiếp và yêu cầu 1 địa chỉ của bộ nhớ dữ liệu trên chip (00H-7FH) hoặc địa chỉ của 1 thanh ghi chức năng đặc biệt SFR (80H-0FFH) trong trường toán hạng
Trang 1513-2-9 Địa chỉ bit
• Đặc trưng mạnh của 8051 là khả năng truy xuất bit riêng rẽ
mà không cần lập mặt nạ trên các byte
• 3 cách xác định địa chỉ bit trong một lệnh:
1 Địa chỉ bit đã biết
2 Dùng toán tử dot (.) giữa địa chỉ byte và vị trí bit
3 Dùng ký hiệu tiền định nghĩa
VD:
SETB 0E7H
Trang 16• Bao gồm các lệnh nhảy tương đối (SJMP và các lệnh nhảy có đk), các lệnh nhảy và gọi tuyệt đối (AJMP, ACALL), các lệnh nhảy và gọi dài (LJMP, LCALL)
Trang 1713-2-11 Các lệnh nhảy và gọi tổng quát
LOC OBJ LINE SOURCE
Trang 1813-3 Đánh giá biểu thức trong thời gian dịch
1 Cơ số: binary - B, octal - O or Q, decimal - D or nothing,
hexa - H
2 Chuỗi ký tự: ‘ ‘
3 Các toán tử số học: +, -, *, /, MOD
4 Các toán tử logic: OR, AND, XOR, NOT
5 Các toán tử đặc biệt: SHR, SHL, HIGH, LOW, ( )
6 Các toán tử quan hệ: EQ, NE, LT, LE, GT, GE
7 Ưu tiên của các toán tử
Trang 1913-4 Các chỉ dẫn
• Điều khiển trạng thái của trình dịch hợp ngữ
(ORG, END, USING)
Trang 2013-4-1 Chỉ dẫn điều khiển trạng thái
• Chỉ dẫn thay đổi nội dung bộ đếm vị trí để thiết lập 1 gốc mới của chương trình cho các phát biểu theo sau
• ORG 100H ;Bộ đếm vị trí = 100H
END Phát biểu cuối cùng của chương trình nguồn
USING expression thông báo cho ASM51 về dãy thanh ghi tích cực hiện hành, AR0-7 thay cho R0-7
Trang 2113-4-2 Chỉ dẫn định nghĩa ký hiệu
Symbol SEGMENT segment_type
Các loại segment (các không gian bộ nhớ) cho 8051:
• CODE (segment chương trình hay mã)
• XDATA
• DATA
• IDATA
• BIT
Note: khai báo này chỉ đơn giản khai báo EPROM là gì Còn để
Trang 22symbol EQU expression
Gán giá trị số cho tên của ký hiệu
VD:
MESSAGE DB ‘this is a message’
Trang 2413-4-3 Khởi động/dành trước vùng nhớ
DS (define storage): khuôn dạng:
[Label:] DS expression
• Dành trước vùng nhớ tính bằng byte, chỉ dẫn này dùng cho bất
kỳ loại segment nào, trừ BIT
DSEG AT 30H ;đặt trong segment dữ liệu
Xóa vùng đệm trên:
MOV R7, #LENGTHMOV R0, #BUFFER
DJNZ R7, LOOP
Trang 25• $Tạo vùng đệm 1000 bytes trong bộ nhớ ngoài ở địa chỉ bắt đầu là 4000H; xóa vùng đệm vừa tạo.
Trang 26[Label:] DBIT expression
• Dành trước vùng nhớ tính bằng bit, chỉ dẫn này có thể dùng cho segment BIT
BSEG ;segment bit tuyệt đốiKBFLAG: DBIT 1 ;trạng thái của keyboard
PRFLAG: DBIT 1 ;trạng thái của printer
DKFLAG: DBIT 1 ;trạng thái của disk
Trang 27DB (define byte)
[Label:] DB expression [,expression] […]
• khởi động vùng nhớ mã cùng với các giá trị của byte, 1
segment CODE phải được tích cực
SQUARES: DB 0, 1, 4, 9, 16, 25 ; binh phuong
MESSAGE: DB ‘Login:’,0 ; chuoi ky tu kt boi 0
Khi hợp dịch sẽ tạo ra KQ gán cho bộ nhớ chương trình ngoài ở
dạng HEX như sau:
Trang 2813-4-4 Liên kết chương trình
PUBLIC symbol [,symbol][…]
EXTRN segment_type (symbol [,symbol][…]…)
NAME module_name
MESSAGES.SRC
… HELLO: (start subroutine)
….
RET GOOD_BYTE: (start subroutine)
… RET
Trang 2913-4-5 Lựa chọn segment
RSEG (relocatable segment): RSEG segment_name
CSEG [AT address]
DSEG [AT address]
ISEG [AT address]
BSEG [AT address]
XSEG [AT address]
Trang 3013-5 Các điều khiển của trình dịch
• Các đk ảnh hưởng đến cách trình bày tập tin liệt kê, không ảnh hưởng đến bản thân chương trình
• Vị trí của chúng:
– Đưa vào dòng lệnh khi hợp dịch
– Đặt trong tập tin nguồn (đứng trước bởi $)
Vd:
$DEBUG
$TITLE()
…
Trang 31ASSEMBLER PROGRAM
LINKER PROGRAM
Myfile.asm
Myfile.obj
Other obj file Myfile.lst
Trang 32Bài toán
Phân tích ví dụ tổng hợp trang 161 Æ 171