1. Trang chủ
  2. » Luận Văn - Báo Cáo

tập lệnh và lệnh trình Assembly cho AVR

13 2,2K 10

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 392,68 KB

Nội dung

tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR tập lệnh và lệnh trình Assembly cho AVR

Trang 1

CHƯƠNG 2: TẬP LỆNH VÀ LẬP TRÌNH ASSEMBLY CHO AVR

2.1 Giới thiệu

Trong phần này sẽ giới thiệu các lậnh trình hợp ngữ và sử dụng trình hợp dịch của Atmel để thực hiện các chương trình chạy trên MCU AVR AT90S Việc lập trình hợp ngữ không thực sự dễ dàng như các ngôn ngữ cấp cao khác, tuy nhiên nó rất hữu dụng cho các sinh viên mới học lần đầu về vi

xử lý, do các lệnh hợp ngữ thường gắn liền với các hoạt động bên trong của vi xử lý

Để thực hiện các chương trình viết bằng hợp ngữ trước hết cần phải có chương trình hợp dịch Chương trình hợp dịch sẽ đổi chương trình hợp ngữ (assembly) thành chương trình mã đối tượng (Object flie), file Object có thể sử dụng cho các chương trình mô phỏng AVR của Atmel Chương trình hợp dịch còn tạo ra file mã nạp ROM và file EEPROM có thể trực tiếp vào bộ nhớ chương trình của AVR

Chương trình hợp dịch AVR của Atmel tạo ra mã chương trình với định vị địa chỉ cố định, nên không cần đến các chương trình liên kết (Link) Chương trình hợp dịch ARV của Atmel chạy dưới Windows, ngoài ra cũng có version chương trình chạy dưới DOS Version Windows của Atmel có các trợ giúp Online cho hầu hết các ứng dụng của nó

Trong phần này chỉ mô tả tập lệnh họ AVR một cách sơ lược, mô tả chi tiết cho từng lệnh có thể xem trong phần phụ lục

Hình 2.1: Màn hình soạn thảo và báo lỗi của trình hợp dịch AVR

2.2 Tham khảo nhanh về trình hợp dịch AVR của Atmel

2.2.1 Bắt đầu với chương trình

Để bắt đầu với AVR Assembler, có thể chọn từ thanh menu hoặc nhấp chuột vào biểu tượng trên thanh toolbar, mở file “tutor1.asm” Thao tác trên sẽ nạp chương trình hợp ngữ lên cửa sổ soạn thảo của chương trình hợp dịch Có thể xem khung chương trình hợp ngữ trong file tutor1.asm, không nên thực hiện các thay đổi trong file này để sử dụng nó cho các lần sau

Trang 2

2.2.2 Hợp dịch chương trình đầu tiên

Sau khi xem xong chương trình, chọn Assemble trong menu Trên màn hình sẽ xuất hiện cửa sổ Message, cửa sổ này chứa các thông báo lỗi Chọn “Window từ Menu để tiên theo dõi các thông báo lỗi khi hợp dịch Màn hình của chương trình hợp dịch như trên hình 2.1

2.2.3 Tìm và sửa lỗi

Trên màn hìh thông báo lỗi có thể thấy mô tả về các lỗi trong chương trình Để tìm và sửa các lỗi đưa con trỏ tới thông báo lỗi đầu tiên (thông báo lỗi trên dòng 54) và nhấn chuột trái, khi đó trên của

sổ soạn thảo dòng 54 sẽ được nhuộm đỏ Thông báo lỗi chỉ thị chỉ có thể gán các thanh ghi R0 – R31

có thể gán làm biến, vì họ AVR chỉ có 32 thanh ghi đa năng nhưng trong dòng 54 đã sử dụng R32 (hình 2.2)

Hình 2.2: Sửa lỗi trong màn hình hợp dịch AVR

Double click vào dòng báo lỗi trên của sổ lỗi, con trỏ trên màn hình sọan thảo sẽ nằm ở đầu dòng chứa lỗi Sửa lỗi bằng cách thay R32 thành R19 sau đó tiếp tục nhấp chuột vào lỗi kế tiếp trong màn hình lỗi

2.2.4 Hợp dịch lại

Có thể lần lượt sửa các lỗi trong chương trình bằng cách nhấp chuột vào màn hình lỗi hoặc có thể hợp dịch lại chương trình nhiều lần, khi tất cả các lỗi đã sửa xong, màn hình lỗi sẽ thông báo quá trình hợp dịch thành công

2.3 Tập tin nguồn hợp ngữ

Chương trình hợp dịch thực hiện việc hợp dịch các chương trình hợp ngữ gọi là các chương trình nguồn Chương trình nguồn chứac các mã gợi nhớ, các nhãn và các chỉ thị hợp dịch (directives) Các lệnh gợi nhớ và các chỉ thị hợp dịch thường có các tóan hạng Một hàng lệnh dài nhất giới hạn trong

120 ký tự Mỗi dòng lệnh có thể bắt đầu bằng một nhãn, nhãn là chuỗi các ký tự và kết thúc bằng dấu

“:” Nhãn được sử dụng làm đích đến cho các lệnh rẽ nhánh hoặc tên các biến trong bộ nhớ chương

Trang 3

trình hoặc bộ nhớ RAM

Một dòng lệnh có thể bắt đầu bằng 4 dạng sau:

1 [Nhãn] Chỉ thị hợp dịch [Toán hạng] [Chú thích] ([label:] directive [operands]

[Comment])

2 [Nhãn:] Lệnh [Toán hạng] [Chú thích] ([label:] instruction [operands] [Comment])

3 Chú thích (Comment)

4 Dòng trống (Empty line)

Một chú thích có dạng như sau:

; [Text]

Các thành phần trong dấu ngoặc vuông [] có thể không sử dụng trong một số trường hợp Chương trình hợp dịch sẽ bỏ qua các lới chú thích nằm sau dấu “;”

Ví dụ:

label: EQU var1=100 ; Chỉ dẫn gán var1 là giá trị 100

.EQU var2=200 ; Chỉ dẫn gán var2 là 200 test: rjmp test ; Lệnh nhảy lặp không thoát

; Dòng chỉ ghi lời chú thích

; Dòng chú thích khác

Chú ý: Không nên đạt các nhãn các chỉ dẫn hợp dịch và các lệnh trên cùng một cột

2.4 Mô tả tập lệnh của AVR

Các lệnh việt trong các chương trình nguồn được cho trong tận lệnh Sau đây là bảng tổng kết các lệnh với các tham số của chúng

2.4.1 CÁC LỆNH SỐ HỌC VÀ LOGIC

Gợi nhớ Toán hạng Mô tả Thực hiện Cờ Clock

ADIW Rd, K Cộng giá trị tức thời vào 1 từ Rd+1:Rd ← Rd+1:Rd + K Z,C,N,V 2

SUBI Rd, K Trừ giá trị tức thời Rd ← Rd - K Z,C,N,V,H 1

SBCI Rd, K Trừ tức thời có nhớ Rd ← Rd - K - C Z,C,N,V,H 1 SBIW Rd, K Trừ tức thời theo từ Rd+1:Rd ← Rd+1:Rd - K Z,C,N,V 2

CBR Rd,K Xóa bit trong thanh ghi Rd ← Rd and ($FFh - K) Z,N,V 1

Trang 4

CLR Rd Xóa thanh ghi Rd ← Rd xor Rd Z,N,V 1

(1)

2.4.2 CÁC LỆNH RẼ NHÁNH

RCALL k Gọi chương trình con t đối PC ← PC + k + 1 None 3

CPSE Rd,Rr So sánh và 0 nhảy khi bằng if (Rd = Rr) PC ← PC + 2 or 3 None 1 / 2 / 3

SBRC Rr, b 0 nhảy khi bit = 0 (Skip) if (Rr(b)=0) PC ← PC + 2or3 None 1 / 2 / 3 SBRS Rr, b 0 nhảy nếu bit = 1 if (Rr(b)=1) PC ← PC + 2or3 None 1 / 2 / 3 SBIC P, b 0 nhảy nếu bit I/O = 0 if(I/O(P,b)=0) PC←PC+2or3 None 1 / 2 / 3 SBIS P, b 0 nhảy nếu bit I/O= 1 if(I/O(P,b)=1) PC ← PC+2or3 None 1 / 2 / 3 BRBS s, k Rẽ nhánh khi cờ trạng thái=1 if (SREG(s) = 1)then PC←PC+k + 1 None 1 / 2 BRBC s, k Rẽ nhánh khi cờ trạng thái=0 if (SREG(s) = 0) then PC←PC+k + 1 None 1 / 2 BREQ k Rẽ nhánh nếu bằng if (Z = 1) then PC← PC + k + 1 None 1 / 2 BRNE k Rẽ nhánh nếu không bằng if (Z = 0) then PC← PC + k + 1 None 1 / 2 BRCS k Rẽ nhánh nếu CF=1 if (C = 1) then PC← PC + k + 1 None 1 / 2 BRCC k Rẽ nhánh nếu CF=0 if (C = 0) then PC← PC + k + 1 None 1 / 2 BRSH k Rẽ nhánh nếu > hoặc = if (C = 0) then PC ← PC + k + 1 None 1 / 2 BRLO k Rẽ nhánh nếu nhỏ hơn if (C = 1) then PC ← PC + k + 1 None 1 / 2 BRMI k Rẽ nhánh nếu âm if (N = 1) then PC ← PC + k + 1 None 1 / 2 BRPL k Rẽ nhánh nếu dương if (N = 0) then PC ← PC + k + 1 None 1 / 2 BRGE k Rẽ nhánh > hoặc =, có dấu if (NxorV= 0) then PC←PC+ k + 1 None 1 / 2 BRLT k Rẽ nhánh < hoặc =, có dấu if (NxorV= 1) then PC← PC + k + 1 None 1 / 2 BRHS k Rẽ nhánh nếu HF = 1 if (H = 1) then PC ← PC + k + 1 None 1 / 2 BRHC k Rẽ nhánh nếu HF = 0 if (H = 0) then PC ← PC + k + 1 None 1 / 2 BRTS k Rẽ nhánh nếu TF = 1 if (T = 1) then PC ← PC + k + 1 None 1 / 2 BRTC k Rẽ nhánh nếu TF = 0 if (T = 0) then PC ← PC + k + 1 None 1 / 2 BRVS k Rẽ nhánh nếu OF = 1 if (V = 1) then PC ← PC + k + 1 None 1 / 2 BRVC k Rẽ nhánh nếu OF = 0 if (V = 0) then PC ← PC + k + 1 None 1 / 2 BRIE k Rẽ nhánh nếu IF = 1 if (I = 1) then PC ← PC + k + 1 None 1 / 2 BRID k Rẽ nhánh nếu IF = 1 if (I = 0) then PC ← PC + k + 1 None 1 / 2

2.4.3 CÁC LỆNH TRUYỀN DỮ LIỆU

LD Rd, X+ Nạp gián tiếp và tăng Rd ← (X), X ← X + 1 None 2

LD Rd, -X Giảm và nạp gián tiếp X ← X - 1, Rd ← (X) None 2

Trang 5

LD Rd, Y+ Nạp gián tiếp và tăng Rd ← (Y), Y ← Y + 1 None 2

LD Rd, -Y Giảm và nạp gián tiếp ← Y - 1, Rd ← (Y) None 2 LDD Rd,Y+q Nạp gián tiếp với độ dời Rd ← (Y + q) None 2

LD Rd, Z+ Nạp gián tiếp và giảm Rd ← (Z), Z ← Z+1 None 2

LD Rd, -Z Giảm và nạp gián tiếp Z ← Z - 1, Rd ← (Z) None 2 LDD Rd, Z+q Nạp gián tiếp với độ dời Rd ← (Z + q) None 2

ST X+, Rr Lưu gián tiếp và giảm (X) ← Rr, X ← X + 1 None 2

ST -X, Rr Giảm và lưu gián tiếp X ← X - 1, (X) ← Rr None 2

ST Y+, Rr Lưu gián tiếp và tăng (Y) ← Rr, Y ← Y + 1 None 2

ST -Y, Rr Giảm và lưu gián tiếp Y ← Y - 1, (Y) ← Rr None 2 STD Y+q,Rr Lưu gián tiếp với độ dời (Y + q) ← Rr None 2

ST Z+, Rr Lưu gián tiếp và tăng (Z)← Rr, Z ← Z + 1 None 2

ST -Z, Rr Giảm và lưu gián tiếp Z ← Z - 1, (Z) ← Rr None 2 STD Z+q,Rr Lưu gián tiếp với độ dời (Z + q)← Rr None 2

PUSH Rr Nạp thanh ghi vào đỉnh stack STACK ← Rr None 2

2.4.4 CÁC LỆNH VỀ BIT VÀ KIỂM TRA BIT

LSL Rd Dịch trái logic Rd(n+1) ← Rd(n),Rd(0) ← 0,C ← Rd(7) Z,C,N,V,H 1 LSR Rd Dịch phải logic Rd(n) ← Rd(n+1),Rd(7) ← 0,C ← Rd(0) Z,C,N,V 1 ROL Rd Quay trái qua CF Rd(0) ← C,Rd(n+1) ← Rd(n),C ← Rd(7) Z,C,N,V,H 1 ROR Rd Quay phải qua CF Rd(7) ← C,Rd(n) ← Rd(n+1),C ← Rd(0) Z,C,N,V 1 ASR Rd Dịch phải số học Rd(n) ← Rd(n+1), n=0 6 Z,C,N,V 1

BSET s Lập cờ SREG(s) ← 1 SREG(s) 1

CBI P, b Clear Bit in I/O Register I/O(P, b) ← 0 None 2

BLD Rd, b Bit load from T to Register Rd(b) ← T None 1 SEC Lập CF C ← 1 C 1

SEN Lập NF N ← 1 N 1

SEZ Lập ZF Z ← 1 Z 1

SEI Cho phép ngắt tổng I ← 1 I 1

SES Lập cờ kiểm tra dấu S ← 1 S 1

SEV Lập cờ tràn bù 2 V ← 1 V 1

SET Lập T trong SREG T ← 1 T 1

Trang 6

SEH Lập cờ HF trong SREG H ←1 H 1

Trong tập lệnh trên các ký hiệu toán hạng như sau:

Rd: R0-R31 hoặc R16-R31 (tùy thuộc vào từng lệnh)

Rr: R0-R31

b: Hằng số 0-7

s: Hằng số 0-7

P: Hằng số 0-31/63

K: Hằng số 0-255

k: Là hằng số với giá trị tùy thuộc vào từng lệnh

q: Hằng số 0-63

2.5 Các chỉ thị hợp dịch

Các trình hợp dịch luôn hỗ trợ một số chỉ thị hợp dịch, các chỉ thị hợp dịch không được dịch trục tiếp thành mã máy mà chúng thường sử dụng để định vị trí cho bộ nhớ chương trình, định nghĩa các macro khởi động bộ nhớ … Các chỉ thị của trình hợp dịch AVR bao gồm:

Chỉ thị Mô tả

BYTE Tạo một biến Byte

CSEG Định đoạn mã lệnh

DB Định nghĩa hằng số byte trong bộ nhớ

DEF Định nghĩa tên cho một thanh ghi

DSEG Định đọan dữ liệu

DW Định nghĩa hằng số 1 từ trong bộ nhớ

ENDMACRO Kết thúc macro

EQU Gán tên cho một giá trị thường sử dụng

EXIT Thoát ra từ file

INCLUDE Đọc file nguồn từ một filt List khác

NOLIST Tắt tính năng tạo file List

ORG Định địa chỉ cho đọan chương trình

2.5.1 BYTE - Reserve bytes to a variable

Chỉ thị BYTE tạo ra tài nguyên bộ nhớ trong SRAM cho chương trình Để truy cập tới vị trí này cần có một tên (label) đi trước chỉ thị BYTE Chỉ thị này có một tham số là số byte được tạo ra trong

bộ nhớ cho chương trình Chỉ thị này chỉ có thể sử dụng trong đọan bộ nhớ dữ liệu, và chỉ thị này không chỉ định địa chỉ bắt đầu của vùng nhớ

Cú pháp: LABEL: BYTE expression

.CSEG

var1: BYTE 1 ; tạo biến var1 chứa 1 byte

table: BYTE tab_size ; Tạo biến table với tab_size byte

ldi r30,low(var1) ; Nạp địa chỉ thấp biến var1cho Z

ldi r31,high(var1) ; Nạp địa chỉ cao của var1 cho Z

ld r1,Z ; Nạp VAR1 vào r1

Trang 7

2.5.2 CSEG – Code Segment

Chỉ thị CSEG định nghĩa địa chỉ bắt đầu của đọan lệnh Một chương trình hợp ngữ có thể bao gồm một số đọan lệnh và sẽ được tạo thành một đọan lệnh sau khi hợp dịch.Chỉ thị BYTE không thể sử dụng trong đọan lệnh Đọan lệnh có bộ đếm lệnh 1 từ, chỉ thị ORG có thể chỉ định vị trí của đọan lệnh

và các hằng số tại các vị trí cụ thể trong bộ nhớ Chỉ thi CSEG không có tham số

Cú pháp: .CSEG

Ví dụ:

vartab: BYTE 4 ; Tạo biến vartab 4 bytes trong SRAM

const: DW 2 ; Tạo hằng số 0x0002 trong vùng nhớ chương trìn

mov r1,r0 ; Lệnh chương trình

2.5.3 DB-định nghĩa hằng số trong bộ nhớ chương trình hoặc trong EEPROM

Chỉ thị DB khai báo tài nguyên bộ nhớ trong vùng nhớ chương trình hoặc trong EEPROM Các vị trí này có thể truy cập bằng tên đặt trước DB

Chỉ thị DB có thể có nhiều tham số phía sau, và nó cần ít nhất 1 tham số Chỉ thị này cần đặt trong đọan chương trình hoặc EEPROM

Các tham số của DB cách nhau bằng dấu phẩy, mỗi một tham số có giá trị trong khỏang -128 đến

255 Khi tham số là số âm nó sẽ được lưu trữ dưới dạng số bù 2

Khi chỉ thị DB sử dụng trong bộ nhớ chương trình, nếu có nhiều hơn 1 tham số thì các tham số sẽ được lưu theo từng từ (16 bit) đặt trong một ô nhớ chương trình 16 bit Khi các tham số là một số lẻ thì tham số cuối cùng (1 byte) sẽ được đặt riêng trong một ô nhớ 16 bit, ngay cả khi lệnh kế tiếp của chương trình là một lệnh DB khác

Cú pháp: LABEL: DB expressionlist

Ví dụ:

.CSEG

.ESEG

consts: DB 0, 255, 0b01010101, -128, 0xaa

eeconst:.DB 0xff

2.5.4 DEF – Đặt tên cho một thanh ghi

Chi thị DEF cho phép truy cập tới các thanh ghi bằng tên dễ nhớ hơn do người lập trình tự đặt Tên này sẽ có thể sử dụng cho toàn bộ phần chương trình còn lại, mọt thanh ghi có thể gán nhiều tên khác nhau trong nhiều đọan của chương trình

Cú pháp

.DEF Symbol=Register

Ví dụ:

.DEF temp=R16

.DEF ior=R0

.CSEG

ldi temp,0xf0 ; Nạp giá trị 0xf0 vào thanh ghi temp

in ior,0x3f ; Đọc SREG vào thanh ghi ior

eor temp,ior ; Xor temp và ior

2.5.5 DEVICE – Định nghĩa loại MCU cho chương trình

Chỉ thị DEVICE cho phép người sử dụng chỉ thị cho chương trình hợp dịch biết các thế hệ MCU AVR mà chương trình sẽ thực hiện Khi sử dụng chỉ thị này chương trình hợp dịch sẽ thông báo các lệnh không hỗ trợ cho một thế hệ MCU nào đó hoặc khi chương trình lớn quá dung lượng bộ nhớ của

Trang 8

MCU Nếu chỉ thị DEVICE không sử dụng trong chương trình nguồn,chương trình hợp dịch xem như tất cả các lệnh đều được hỗ trợ và không có thông báo quá dung lượng bộ nhớ

Cú pháp:

.DEVICE AT90S1200 | AT90S2313 | AT90S4414 | AT90S8515

Ví dụ:

.DEVICE AT90S1200 ; Chương trình viết cho AT90S1200

.CSEG

push r30 ; Lệnh này sẽ tạo ra thông báo lỗi vì AT90S1200 không có lệnh này

2.5.6 DSEG – Đoạn dữ liệu

Chỉ thị DSEG định nghĩa bắt đầu của đọan dữ liệu Trong một chương trình hợp ngữ có thể khai báo một số đoạn dữ liệu và chúng sẽ được trình hợp dịch gom thành 1 đọan khi hợp dịch Đọan dữ liệu thông thường chứa các chỉ thị BYTE (và các tên) Đọan lệnh có bộ đếm địa chỉ riêng có độ lớn 1 byte Chỉ thị ORG sẽ định địa chỉ bắt đầu cho đọan dữ liệu trong không gian bộ nhớ Chỉ thị này không có tham số

Cú pháp:

.DSEG

Ví dụ:

var1:.BYTE 1 ; tạo biến var1 chứa 1 byte table:.BYTE tab_size ; tạo biến table chứa tab_size byte .CSEG

Ldi r30,low(var1) ; Nạp phần thấp thanh ghi Z

Ldi r31,high(var1) ; Nạp phần cao thanh ghi Z

Ld r1,Z ; Nạp biến var1 và thanh ghi r1

2.5.7 DW-Define constant word(s) in program memory or E2PROM memory

Chỉ thị DW khai báo vùng nhớ trong bộ nhớ chương trình hoặc EEPROM.Có thể sử dụng tên đặt trước chỉ thị DW để truy cập tới vùng nhớ này Chỉ thị DW sẽ có nhiều tham số khai báo phía sau (ít nhất 1 tham số) Chỉ thị này chỉ sử dụng trong đọan lệnh hoặc đọan EEPROM

Các tham số của chỉ thị sẽ cách nhau bằng dấu phẩy,mỗi giá trị nằm trong khỏang -32768 đến

65535 Nếu tham số âm, trong bộ nhớ nó sẽ được lưu dưới dạng số bù 2

Cú pháp: LABEL: DW expressionlist

.ESEG varlist:.DW 0,0xffff,0b1001110001010101,-32768,65535

eevar: DW 0xffff

2.5.8 ENDMACRO - End macro

Chỉ thị ENDMACRO định nghĩa điểm kết thúc một Macro Chỉ thị này không có tham số

Cú pháp:

.ENDMACRO

Ví dụ:

.MACRO SUBI16 ; Bắt đầu Macro

subi r16,low(@0) ; trừ byte thấp sbci r17,high(@0) ; trừ byte cao

Trang 9

2.5.9 EQU - Set a symbol equal to an expression

Chỉ thị EQU gán tên cho một giá trị nào đó, giá trị đã gán là hằng số không thể thay đổi được và

nó chỉ có ý nghĩ trong chương trình nguồn, trong chương trình mã máy nó được thay bằng giá trị, nó không có ô nhớ để lưu trữ

Cú pháp:

.EQU label = expression

Ví dụ:

.EQU io_offset = 0x23

.EQU porta = io_offset + 2

out porta,r2 ; Ghi cổng A

2.5.10 ESEG – đoạn EEPROM

Chỉ thị ESEG định nghĩa bắt đầu đoạn EEPROM Một chương trình có thể khai báo nhiểu đọan EEPROM, trình hợp dịch sẽ tự gom thành 1 đọan Chỉ thị BYTE không sử dụng được trong vùng nhớ này Đoạn EEPROM có bộ đếm địa chỉ 1byte riêng Chỉ thị ORG có thể sử dụng chỉ thị địa chỉ cụ thể cho đọan EEPROM

Cú pháp: ESEG

Ví dụ:

vartab: BYTE 4 ; Khai báo biến 4 byte trong SRAM .ESEG

eevar: .DW 0xff0f ; Khởi động 1 từ bằng 0xff0f trong EEPROM

const: .DW 2 ; Ghi giá trị 0x0002 vào bộ nhớ chương trình mov r1,r0 ; Lệnh chương trình

2.5.11 EXIT – Thóat khỏi file

Chỉ thị EXIT chỉ thị chi trình hợp dịch ngưng hợp dịch file tại vị trí này Nếu không có EXIT chương trình sẽ được dịch cho tới kết thúc file Nếu sử dụng EXIT trong một file included, hợp dịch

sẽ tiếp tục từ dòng lệnh chứa chỉ thị INCLUDE trong file chứa chủ thị này

Cú pháp: EXIT

Ví dụ: .EXIT

2.5.12 INCLUDE – Hợp dịch thêm một file khác

Chỉ thị INCLUDE chỉ thị trình hợp dịch bắt đầu đọc từ một file khác Trình hợp dịch sau đó sẽ dịch file được chỉ định cho đến khi kết thúc file đó (EOF) hoặc gặp phải chỉ thị EXIT Một file Include cũng có thể chứa chỉ thị INCLUDE

Cú pháp: .INCLUDE “filename”

Ví dụ:

.EQU sreg=0x3f ; Thanh ghi trạng thái

; incdemo.asm .INCLUDE “iodefs.asm” ; Định nghĩa biên dịch file iodefs.asm

in r0,sreg ; Đọc SREG

2.5.13 LIST - Turn the listfile generation on

Chỉ thị LIST chỉ thị trình biên dịch tạo ra list file Listfile bao gồm mã nguồn hợp ngữ kèm theo

mã máy của nó và địa chỉ của lệnh sẽ nằm trong bộ nhớ Việc tạo ra listfile là mặc định khi hợp dịch,

Trang 10

tuy nhiên cũng có thể sử dụng LIST cùng với chỉ thị NOLIST để tạo ra từng phần list của file nguồn

Cú pháp: .LIST

Ví dụ:

.NOLIST ; Không cho phép tạo đọan List

.INCLUDE “macro.inc” ; Includefile sẽ không list trong listfile

.INCLUDE “const.def” ;

.LIST ; cho phép tạo list trở lại

2.5.14 LISTMAC - Turn macro expansion on

Chỉ thị LISTMAC thông báo cho trình hợp dịch có lệnh gọi Macro và cần tạo thêm phần list cho macro thêm vào listfile Nếu không có chỉ dẫn này chỉ có trong listfile chỉ có lệnh gọi macro và các tham số của nó

Cú pháp: .LISTMAC

Ví dụ:

.MACRO MACX ; Định nghĩa một macro

add r0,@0 ; Lệnh trong macro eor r1,@1 ; Lệnh trong macro .ENDMACRO ; Chỉ thị kết thúc macro

.LISTMAC ; Cho phép thêm phần list lệnh macro trog listfile

MACX r2,r1 ; Gọi macro

2.5.15 MACRO – Bắt đầu macro

Chỉ thị MACRO thông báo cho trình hợp dịch biết điểmbắt đầu của macro,chỉ thị này cần cung cấp tên Macro Khi tên của Macro được gọi trong chương trình, các lệnh trong macro sẽ được thực hiện Một macro có thể khai báo 10 tham số @0 - @9, khi gọi macro cần cung cấp các tham số tuần

tự cách nhau bằng dấu phẩy Một macro sẽ kết thúc bằng chỉ thị ENDMACRO

Cú pháp: .MACRO macroname

Ví dụ:

.MACRO SUBI16 ; Bắt đầu Macro

subi @1,low(@0) ; trừ byte thấp sbci @2,high(@0) ; trừ byte cao

SUBI16 0x1234,r16,r17 ; trừ 0x1234 từ r17:r16

2.5.16 NOLIST – Tắt chức năng tạo listfile

Chỉ thị NOLIST thông báo cho trình hợp dịch tắt chức năng tạo list Mặc định chương trình biên dịch luôn tạo ra listfile, chỉ thị NOLIST có thể sử dụng chung với chỉ thị LIST để tạo ra các đọan list cần thiết trong chương trình

Cú pháp: .NOLIST

Ví dụ:

.INCLUDE “macro.inc” ; included files không thể hiện tring listfile

.INCLUDE “const.def” ;

.LIST ; Cho phép tạo list trở lại

2.5.17 ORG – Lập điểm địa chỉ bắt đầu cho chương trình

Chỉ thị ORG thiết lập địa chỉ tuyệt đối cụ thể cho một đọan chương trình, giá trị địa chỉ thiết lập sẽ làthamsố của lệnh Khi ORG sử dụng trong đoạn dữ liệu, giá trị bộ đếm địa chỉ SRAM sẽ được chọn, nếu ORG sử dụng trong đoạn lệnh, giá trị bộ đếm chương trình sẽ được lập, ORG cũng có thể sử dụng thiết lập địa chỉ trong đoạn EEPROM Nếu phía trước chỉ thị ORG là một nhãn, nhãn này sẽ được gán giá trị bằng giá trị địa chỉ đã được khởi động Giá trị mặc định khi bắt đầu chương trình của bộ đếm

Ngày đăng: 25/04/2015, 01:24

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w