Lập trình hợp ngữ_chương 13
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 dạng bằng dấu :
Các ký hiệu: EQU, SEGMENT, BIT, DATA
1. 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
6. Tập lệnh
7. Các mode định địa chỉ (addressing modes)
8. Lập trình IO
9. Tạo trễ
10.Lập trình Timer/Counter
11.Giao tiếp nối tiếp
12.Lập trình ngắt
13.Lập trình hợp ngữ
1
EDITOR
Trình soạn thảo PROGRAM
Myfile.asm
ASSEMBLER
PROGRAM
Trình dịch ASM51
Myfile.lst
Other obj file
Myfile.obj
LINKER
Trình liên kết RL51 PROGRAM
Myfile.abs
Trình dịch sang HEX OH
PROGRAM
Myfile.hex
HEXTOBIN
Trình dịch sang BIN PROGRAM
Myfile.bin
2
13-1. Cấu trúc chương trình Assembly
#INCLUDE "8051EQU.INC" ;include predefined constants
ORG 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
RETI ;or LJMP EX1ISR if enabled
ORG 1BH ;timer 1 interrupt
RETI ;or LJMP T1ISR if enabled 3
ORG 23H ;serial port interrupt
RETI ;or LJMP SPISR if enabled
ORG 30H ;locate beginning of rest of program
INITIALIZE: ;set up control registers
MOV TCON,#xxH
MOV TMOD,#xxH
MOV PSW,#xxH
MOV IE,#xxH
RET
DELAY: ...
RET
ISR: ...
RETI
4
Other Subroutines: ....
RET
Other ISR Subroutines: ....
RET
MAIN:
ACALL INITIALIZE
...
SJMP $
END
5
13-2. Khuôn dạng chương trình hợp ngữ
Các chương trình hợp ngữ chứa:
• Lệnh (instruction)
• Chỉ dẫn (directive)
• Điều khiển (control)
• Chú thích (comment)
[Label:] mnemonic [operand][,operand][…] [;comment]
6
13-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
dạng bằng dấu :
• Các ký hiệu: EQU, SEGMENT, BIT, DATA
• VD:
PARAMETER EQU 500
PORTA EQU 0101H
START: MOV A,#0FFH
7
13-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,…
8
13-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]
9
13-2-4. Trường chú thích
• Các ghi chú để làm rõ chương trình
• Bắt đầu bằng dấu ;
[Label:] mnemonic [operand][,operand][…] [;comment]
10
13-2-5. Các ký hiệu đặc biệt
• A, R0 R7, DPTR, PC, C, AB, $
VD:
• JNB TI,$ ≡ HERE: JNB TI, HERE
tránh dùng 1 nhãn
11
13-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ể
ADD A,@R0 (1)
MOVC A,@A+PC (2)
12
13-2-7. Dữ liệu tức thời
• Các lệnh sử dụng kiểu định địa chỉ tức thời cung cấp dữ liệu
trong trường toán hạng
• Dữ liệu tức thời được đứng trước bởi dấu #
CONST EQU 100
MOV A,#0DAH
ORL 50H, #CONST
13
13-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
• MOV A, SBUF ;≡ MOV A, 99H
• MOV A, 5CH
14
13-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
SETB ACC.7
JNB TI,$ JNB 99H,$
15
13-2-10. Địa chỉ của lệnh
• Một địa chỉ của lệnh được dùng trong trường toán hạng cho
các lệnh nhảy
• Địa chỉ của lệnh thường được cho dưới dạng các nhãn
VD:
HERE:
…
SJMP HERE
• 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)
16
13-2-11. Các lệnh nhảy và gọi tổng quát
LOC OBJ LINE SOURCE
1234 1 ORG 1234H
1234 04 2 START: INC A
1235 80FD 3 JMP START
12FC 4 ORG START+200
12FC 4134 5 JMP START
12FE 021301 6 JMP FINISH
1301 04 7 FINISH: INC A
8 END
17
13-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ử
18
13-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)
• Định nghĩa ký hiệu
(SEGMENT, EQU, SET, DATA, IDATA, XDATA, BIT,
CODE)
• Khởi động/Dành trước vùng nhớ
(DS, DBIT, DB, DW)
• Liên kết chương trình
(PUBLIC, EXTRN, NAME)
• Lựa chọn segment
(RSEG, CSEG, DSEG, ISEG, BSEG, XSEG)
19
13-4-1. Chỉ dẫn điều khiển trạng thái
ORG (Set origin) ORG expression
• 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
• ORG ($+1000H)
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
• USING 3
• PUSH AR7 ;dịch thành PUSH 1FH
• USING 1
• PUSH AR7 ;dịch thành PUSH 0FH
20