Lập trình Assembly

Một phần của tài liệu Họ vi điều khiển 8051 (Trang 53 - 57)

Các thành phần cơ bản của ngôn ngữ Assembly:

- Lables: Nhãn – đánh dấu cho một đoạn lệnh - Orders: Lệnh

- Directives: Định hướng chương trình dịch - Comments: Các lời chú thích

Một dòng lệnh trong chương trình hợp ngữ gồm có các trường sau:

+ Các quy tắc của Assembly.

Để có thể dịch thành file mã máy dạng HEX-Code trước khi download vào Chip thì một

chương trình assembly phải tuân thủ các nguyên tắc sau: - Mỗi dòng lệnh không vượt quá 255 ký tự

- Mỗi dòng lệnh phải bắt đầu bằng 1 ký tự, nhãn, lệnh hoặc chỉ thị định hướng chương trình dịch

- Mọi thứ sau dấu “;” được xem là lời giải thích và chương trình dịch sẽ bỏ qua. - Các thành phần của mỗi dòng lệnh cách biệt nhau it nhất bằng một dấu cách.

+ Hằng số trong Assembly. a) Cơ số 10.

Sử dụng 10 ký tự (0,1,2,..,9) để mã hóa các số. Trong hầu hết các vi điều khiển có sử dụng 2

byte để lưu các số cơ số 10, như vậy số lớn nhất có thể là 65535. Để tường minh cho 1 số ở số mười thì sau các ký tự số kèm theo ký tự “D”.

VD: 1234D b) Số Hexa.

Sử dụng 16 ký tự (0,1,2,..,9,A,B,C,D,E,F) để mã hóa các số, tương tự cơ số 10 hầu hết các vi

điều khiển sử dụng 2 byte để lưu các số hexa, vì thế số lớn nhất có thể là FFFF (65535). Mỗi số hexa kết thúc bởi ký tự “h”.

VD: 23h

c) Số nhị phân.

Sử dụng 2 lý tự 0 và 1 để mã hóa. Các số nhị phân kết thúc bằng ký tự “B” VD: 1101010101B

Các toán tử

+ Cách đặt tên.

Thay vì phải nhớ tên từng thanh ghi, hay từng bit, ta có thể gán cho nó một cái nhã gợi nhớ

tương ưngs với chức năng của nó, assembly hỗ trợ việc đặt tên theo quy tắc sau:

- Tên được tổ hợp từ các ký tự (A-Z, a-z), các số (0-9), các ký tự đặc biệt (“?” Và “_”) và không phâ biệt chữ cái và chữ thường.

- Độ dài tên tối đa là 255 ký tự, nhưng chỉ 32 ký tự đầu được dùng để phân biệt - Tên phải bắt đầu bằng ký tự.

+ Định hướng chương trình dịch.

Không giống như các lệnh sẽ được dịch thành mã máy và ghi vào bộ nhớ của vi điều khiển,

các chỉ thị định hướng chương trình dịch là các lệnh của chính Assembly, có tác dụng cho trình biên dịch mà không có tác dụng cho vi điều khiển

Một số chỉ thị định hướng chương trình dịch: - EQU: thay symbol bằng hằng số.

VD bien_x EQU 96

- BIT: Thay thế một địa chỉ bit bằng một symbol.

VD motor BIT P0.0

- CODE: Đánh dấu vùng mã lệnh

- DATA: Đánh dâu vùng dữ liệu khai báo

- XDATA: Gán một tên cho một vùng nhớ ở bộ nhớ ngoài

VD: Bien xdata 1000

- IDATA: Gán một tên cho một vùng nhớ ở bộ nhớ trong

VD: Bien idata 1000

- ORG: Chỉ ra địa chỉ của vùng nhớ trong bộ nhớ chương trình để lưu các đoạn chương trình

sau chỉ thị này VD: ORG 100h

- USING: Chỉ ra bank thanh ghi nào được dùng

VD: USING 2

- END: Đánh dau kết thức một chương trình

- DBIT: Đặt nhãn cho một bit trong vùng địa chỉ bit trong RAM (dùng để khai báo 1 biết kiểu

bit)

- DB: Đặt nhãn cho một vùng byte trong RAM (dùng để khai báo 1 biến kiêu byte) - DW: Đặt nhãn cho một vùng 2byte trong RAM (dùng để khai báo biến kiểu nguyên) + Cấu trúc một chương trình ASSEMBLY.

Một dòng lệnh trong chương trình hợp ngữ gồm có các trường sau:

Tên Lệnh Toán hạng Chú thích

A: Mov AH, 10h ; Đưa giá trị 10h vào thanh ghi AH Cấu trúc thông thường của một chương trình hợp ngữ

.model <Khai báo kiểu chương trình> .stack <Khai báo kích thước ngăn xếp>

.data

<Khai báo dữ liệu>

.code

<Các lệnh>

end

- Khung chương trình dịch ra .exe data segment

; Thêm dữ liệu ở đây

pkey db "press any key to exit ...$" ends stack segment dw 128 dup(0) ends code segment start:

;Thiết lập giá trị cho thanh ghi đoạn

mov ax, data mov ds, ax mov es, ax

; Thêm mã nguồn vào đây

lea dx, pkey mov ah, 9

int 21h ;Xuất chuỗi tại ds:dx

; Chờ bấm 1 phím bất kỳ...

mov ah, 1 int 21h

mov ax, 4c00h ; Thoát về Hệ điều hành.

int 21h ends

end start ; Dừng chương trình ASM.

- Khung chương trình dịch ra .com

; Có thể chọn kiểu cấu hình như thế này hoặc chọn kiểu khác theo ; mô tả trong file: c:\emu8086\inc\0_com_template.txt

CSEG SEGMENT ; Mã segment bắt đầu tại đây.

org 100h

; Mã nguồn ở đây

ret

Ví dụ: Chương trình sau in ra màn hình dòng chữ “Hello !”

.modelsmall

.stack 100h

.data

s DB “Hello !$”; khai báo xâu kí tự cần in

.code

mov AX,@data ; lấy địa chỉ data segment ghi vào DS mov DS,AX; Vì model small, đây cũng là địa chỉ

; segment của xâu s ; xuất chuỗi

mov DX, OFFSET s ; lấy địa chỉ offset ghi vào DX mov AH , 9

int 21h ; gọi hàm 9, ngắt 21h để in

mov AH, 4Ch ; Thoát khỏi chương trình int 21h

end

Lưu ý:Mọi chương trình đều phải có đoạn code thoát khỏi chương trình, nếu không chương

trình sẽ không dừng khi hết chương trình của mình.

CHƯƠNG 3. CÁC HỆ VI ĐIỀU KHIỂN TIÊN TIẾN 3.1 Atmel AVR.

Một phần của tài liệu Họ vi điều khiển 8051 (Trang 53 - 57)

Tải bản đầy đủ (DOCX)

(70 trang)
w