1. Trang chủ
  2. » Thể loại khác

VXL-Ch03-8051-3.8 Lap trinh hop ngu_50 slides.PPT

50 10 0

Đ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

Tiêu đề Lập Trình Hợp Ngữ
Tác giả Hồ Trung Mỹ
Trường học Đại Học Bách Khoa Thành Phố Hồ Chí Minh
Chuyên ngành Vi Xử Lý
Thể loại Bài Giảng
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 50
Dung lượng 738 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Hardware Summary of 8051 1 CHƯƠNG 3 HỌ VI ĐiỀU KHIỂN 8051 ĐHBK Tp HCM Khoa Đ ĐT BMĐT GVPT Hồ Trung Mỹ Môn học Vi Xử Lý 2 3 8 Lập trình hợp ngữ Lập trình hợp ngữ – Hoạt động của trình biên dịch hợp ngữ[.]

Trang 2

3.8 Lập trình hợp ngữ

Trang 3

Các điều khiển trình biên dịch hợp ngữ

Hoạt động của trình liên kết

Liên kết các đoạn tái định vị và các module

Các macro

Trang 5

• Tập tin chương trình nguồn có đuôi là asm/a51/src

Trang 6

ASM(input_file) /*assemble source program in

input_file)*/

BEGIN

/*pass 1: build the symbol table */

lc = 0; /*lc=location counter; default to 0*/

mnemonic = null;

open input_file;

WHILE (mnemonic != end) DO BEGIN

get_line(); /*get line from input_file */

scan_line(); /*scan line & get label/symbol & mnemonic */

IF (label) THEN enter_into_symbol_table(label, lc);

CASE mnemonic OF BEGIN

null, comment, END: ; /*do nothing */

Trang 7

/*pass 2: create the object program*/

CASE mnemonic OF BEGIN

null, comment, EQU, END: ; /*do nothing */

ORG: lc = operand_value;

DB: WHILE (operand) DO BEGIN

put_in_objectfile(operand);

lc = lc + 1;

END /* increment number of bytes defined */

Minh họa hoạt động của trình biên dịch hợp ngữ (2/3)

Trang 9

[label:] Mnemonic [operand] [,operand] […] [;comment]

( [nhãn:] Từ gợi nhớ [toán hạng] [, toán hạng] […] [;chú

thích])

Trang 10

Vùng nhãn (label)

Nhãn biểu diễn địa chỉ của lệnh (hoặc dữ liệu) theo

sau nó

Thuật ngữ “nhãn" luôn luôn biểu diễn địa chỉ

Thuật ngữ “ký hiệu” (symbol) thì tổng quát hơn.

Nhãn là 1 kiểu ký hiệu và nó được nhận dạng bằng

cách để dấu hai chấm (:) ở cuối tên nhãn.

Các ký hiệu là các giá trị hay thuộc tính được gán

bằng các chỉ thị như EQU, SEGMENT, BIT, DATA, etc.

Ký hiệu có thể là địa chỉ, hằng số dữ liệu, tên của

đoạn, hoặc các cấu trúc khác được tạo ra bởi lập trình viên.

Dạng chương trình hợp ngữ(2/7)

Trang 11

Ký hiệu (symbol)

PAR EQU 500 ; PAR là ký hiệu biểu

; diễn giá trị 500 START: MOV A,#0FFH ; START là nhãn biểu

; diễn địa chỉ của lệnh MOV

Ký hiệu ( hay nhãn) phải bắt đầu với chữ, dấu hỏi, hoặc

dấu gạch dưới “_” ; phải được theo sau bằng các ký

tự, số , “?” hoặc “_” và có thể dài đến 31 ký tự

Các ký hiệu có thể dùng chữ in hoa hay chữ in thường

nhưng trình biên dịch xử lý chúng như nhau

Không được dùng các từ dành riêng làm ký hiệu

Các ký hiệu đặc biệt của trình biên dịch hợp ngữ

A, R0-R7, DPTR, PC, C, AB, $ (địa chỉ của lệnh hiện tại)

AR0– AR7 biểu diễn các địa của R0– R7 trong bank thanh ghi

Dạng chương trình hợp ngữ(3/7)

Trang 12

Vùng từ gọi nhớ (Mnemonic Field)

Sau vùng nhãn là vùng từ gợi nhớ chứa các từ gợi nhớ

lệnh hoặc các chỉ thị trình biên dịch hợp ngữ

TD:

Các từ gợi nhớ lệnh như ADD, MOV, DIV,

Các chỉ thị trình biên dịch hợp ngữ như ORG, EQU, DB,

Dạng chương trình hợp ngữ(4/7)

Trang 13

Vùng toán hạng

Vùng toán hạng theo sau vùng từ gợi nhớ.

Vùng này chứa địa chỉ hoặc dữ liệu mà lệnh sử dụng.

Có thể dùng “nhãn” để biểu diễn địa chỉ, hoặc dùng “ký

hiệu” để biểu diễn hằng số dữ liệu.

Vùng toán hạng phụ thuộc vào tác vụ cụ thể của lệnh.

Vùng chú thích

Chú thích ở cuối dòng để làm rõ giải thuật chương trình.

Chú thích phải được bắt đầu bằng “;”

Dạng chương trình hợp ngữ(5/7)

Trang 14

Địa chỉ dữ liệu

Nhiều lệnh truy cập các ô nhớ dùng định địa chỉ trực

tiếp và cần có địa chỉ bộ nhớ dữ liệu nội (00H to

7FH) hoặc địa chỉ SFR (80H to 0FFH) trong vùng toán hạng.

Các ký hiệu định nghĩa trước có thể dùng cho các

Trang 15

Địa chỉ bit

Một trong các đặc tính mạnh nhất của 8051 là khả năng

truy cập các bit riêng lẻ không cần các phép toán che bit trên byte.

Địa chỉ bit trong bộ nhớ dữ liệu nội (20H to 2FH) hoặc

địa chỉ bit trong vùng SFR (80H to 0FFH).

Có 3 cách chỉ ra địa chỉ bit:

(a) cho địa chỉ bit cụ thể,

(b) dùng toán tử chấm giữa địa chỉ byte và vị trí bit, và (c) Dùng ký hiệu đã được định nghĩa trước.

TD:

SETB 0E7H ; địa chỉ bit cụ thể SETB ACC.7 ; dùng toán tử chấm (giống lệnh trên) JNB TI, $ ; TI là ký hiệu đã được định nghĩa trước JNB 99H, $ ; (giống lệnh trên)

Dạng chương trình hợp ngữ(7/7)

Trang 16

Các giá trị và các hằng số trong vùng toán hạng có

thể được biểu diễn bằng 3 cách:

(a) với trị cụ thể (TD: 0EFH),

(b) với ký hiệu được định nghĩa trước (TD: ACC),

hoặc (c) Với biểu thức (TD: 2 + 3).

Sử dụng các biểu thức là 1 kỹ thuật hữu dụng làm cho

chương trình hợp ngữ dễ đọc hơn và linh hoạt hơn.

Tất cả các tính toán biểu thức được thực hiện bằng số

học 16 bit; tuy nhiên tùy theo lệnh mà 8 hay 16 bit

được chèn vào trong lệnh khi cần.

Định trị biểu thức lúc biên dịch hợp ngữ

Trang 17

Các cơ số

Các hằng số phải được theo sau bằng "B" với số nhị

phân (Binary), "O" hoặc "Q" với bát phân (Octal), "D"

hoặc không có gì với thập phân (Decimal), hoặc "H" với thập lục phân (Hex).

Các lệnh sau đều giống nhau:

Trang 18

Chuỗi ký tự

Các chuỗi dùng 1 hay 2 ký tự làm toán hạng trong

biểu thức Các mã ASCII được đổi thành nhị phân

tương đương bởi trình biên dịch hợp ngữ Các hằng

số ký tự được để trong dấu nháy đơn (') hoặc dấu

nháy kép (“) (tùy trình biên dịch hợp ngữ).

TD:

CJNE A, #'Q', AGAIN ; chuyển đổi ký số ASCII

SUBB A, #'0' ; sang ký số nhị phân

MOV DPTR, #'AB'

MOV DPTR, #4142H ; giống như trên

Định trị biểu thức lúc biên dịch hợp ngữ (3/7)

Trang 19

MOV A,#10 + 10H (MOV A,#1AH)

MOV A,#’9’ AND 0FH (MOV A,#9)

MOV A,#8 SHL 1 (MOV A,#10H)

MOV A,#HIGH 1234H (MOV A,12H)

Định trị biểu thức lúc biên dịch hợp ngữ (4/7)

Trang 20

Các toán tử quan hệ : kết quả luôn luôn là sai (0000H)

hoặc đúng (FFFFH)

EQ = Equal (bằng)

NE <> Not Equal (không bằng )

LT< Less Than (nhỏ hơn)

LE <= Less than or Equal to (nhỏ hơn hoặc bằng)

GT > Greater Than (lớn hơn)

GE >= Greater than or Equal to (lớn hơn hoặc bằng)

Trang 22

Thứ tự ưu tiên của các toán tử

Khi có cùng ưu tiên thì các toán tử được định trị từ

trái sang phải

Trang 23

Các chỉ thị trình biên dịch hợp ngữ

Điều khiển trạng thái trình biên dịch hợp ngữ (ORG,

END, USING)

Định nghĩa ký hiệu (SEGMENT, EQU, SET, DATA,

IDATA, XDATA, BIT, CODE)

Khởi trị vùng nhớ hay dành chỗ trong vùng nhớ (DS,

DB, DW, DBIT)

Liên kết chương trình (PUBLIC, EXTRN, NAME)

Chọn đoạn (RSEG, CSEG, DSEG, ISEG, BSEG, XSEG)

Trang 24

Điều khiển trạng thái trình biên dịch hợp ngữ

ORG 100H

ORG ($ + 1000H) AND 0F000H ; chọn biên giới 4K kế

END ; phải là phát biểu sau cùng trong chương trình

USING expression ; chọn bank thanh ghi làm việc

MOV PSW,#00011000B ; Chọn bank 3

USING 3 ; dùng bank thanh ghi

PUSH AR7 ; 1FH (R7 trong bank 3)

MOV PSW,#00001000B

USING 1

PUSH AR7 ; 0FH (R7 trong bank 1)

Trang 25

Định nghĩa ký hiệu

Chỉ thị định nghĩa ký hiệu tạo ra các ký hiệu biểu diễn

các đoạn ( segment ), thanh ghi ( register ), số

( numbers ) và địa chỉ ( address ).

Trang 26

Segment (CODE, XDATA, DATA,IDATA,BIT)

symbol SEGMENT segment_type

XDATA (vùng nhớ dữ liệu bên ngoài)

BIT (vùng nhớ bit; trong vùng nhớ dữ liệu byte bên

trong từ 20H-2FH)

TD:

EPROM SEGMENT CODE (khai báo EPROM là đoạn

mã Để thật sự bắt đầu dùng đoạn này, ta dùng chỉ thị RSEG)

Định nghĩa ký hiệu (2/4)

Trang 27

EQU và SET – dùng để gán hằng số/chuỗi

symbol EQU expression (gán giá trị số vào tên

ký hiệu cụ thể)

MESSAGE: DB ‘This is a message’

symbol SET expression (tương tự với EQU

ngoại trừ ký hiệu này có thể được định nghĩa lại sau này dùng chỉ thị SET)

Định nghĩa ký hiệu (3/4)

Trang 28

• DATA, IDATA, XDATA, BIT, & CODE : gán các địa chỉ của các kiểu đoạn tương ứng vào ký hiệu.

(thông báo lỗi: cần có địa chỉ đoạn dữ liệu [data

segment address expected ])

Định nghĩa ký hiệu (4/4)

Trang 29

Khởi trị /dành chỗ vùng nhớ

DS (define storage = định nghĩa vùng nhớ)

[nhãn:] DS biểu thức

dành chỗ trong vùng nhớ với số tính từ biểu thức,

có thể dùng trong bất kỳ đoạn nào, ngoại trừ đoạn BIT

Trang 30

TD: Tạo 1000 byte ở RAM ngoài từ địa chỉ 4000H

XSTART EQU 4000H

XLENGTH EQU 1000

XSEG AT XSTART ; put I data segment

; (absolute , internal) XBUFFER: DS XLENGTH ; dành 1000 byte

MOV DPTR,#XBUFFER LOOP: CLR A

MOV @DPTR,A INC DPTR

MOV A,DPL CJNE A,#LOW( XBUFFER + XLENGTH + 1 ),LOOP MOV A,DPH

CJNE A,#HIGH( XBUFFER + XLENGTH + 1 ),LOOP (tiếp tục)

Khởi trị /dành chỗ vùng nhớ (2/3)

Trang 31

• DBIT: dành chỗ tính theo bit

[nhãn:] DBIT biểu thức

BSEG ; đoạn bit, tuyệt đối (00H-7FH) KBFLAG: DBIT 1 ; keyboard status (bit 0 của byte có đ/c 20H)

PRFLAG: DBIT 1 ; printer status (bit 1 của byte có đ/c 20H) DKFLAG: DBIT 1 ; disk status (bit 2 của byte có đ/c 20H)

• DB (định nghĩa byte): khởi trị bộ nhớ mã với các giá trị byte

[nhãn:] DB biểu thức [, biểu thức] […]

CSEG AT 0100H SQUARES: DB 0,1,4,9,16,25 ; bình phương của các số 0-5

MESSAGE: DB ‘Login:’,0 ; chuỗi ký tự kết thúc bằng null

Trang 32

Liên kết chương trình

Cho phép các module (tập tin) được biên dịch riêng liên lạc với nhau bằng cách cho phép tham chiếu giữa các module và đặt tên các module.

• PUBLIC (khai báo công khai cho các module khác tham chiếu)

PUBLIC symbol [,symbol] […]

cho phép các ký hiệu có trong danh sách trên được dùng trong các module khác.

• EXTRN (declare symbols defined outside current module)

EXTRN segment_type symbol [,symbol] […]

RET GOOD_BYE: (begin sub)

MAIN.SRC MESSAGE.SRC

Trang 33

Chọn các đoạn tuyệt đối

CSEG [AT address]

DSEG [AT address]

ISEG [AT address]

BSEG [AT address]

XSEG [AT address]

Mỗi đoạn có bộ đếm vị trí riêng của nó mà ban đầu có trị là 0

Trang 34

LOC OBJ LINE SOURCE

1 ONCHIP SEGMENT DATA

2 EPROM SEGMENT CODE 3

4 BSEG AT 70H ;begin abs bit seg

7 8 RSEG ONCHIP ;begin relocatable data seg

12 13 RSEG EPROM ;begin relocatable code seg

0000 750000 F 14 BEGIN: MOV TOTAL,#0

15 (continue program)

Chọn đoạn – Thí dụ (2/2)

Trang 35

Điều khiển trình biên dịch hợp ngữ

Thiết lập dạng các tập tin đối tượng và các tập tin

liệt kê để in Điều khiển cách trình bày tập tin in ra

mà không ảnh hưởng đến chương trình.

Dòng điều khiển trình biên dịch hợp ngữ có $ đi đầu.

Các điều khiển cơ bản và điều khiển tổng quát

TD: DATE, INCLUDE, LIST, MACRO(50), XREF

Trang 36

NAME Primary/

General DEFAULT Abbrev. Meaning

DATE(date) P DATA() DA Places string in header (9 Char

EJECT G Not applicable EJ Continue listing on next page

ERRORPRINT P NOERRORPRINT EP Designates a file to receive error

Messages in addition to the listing file (defaults to console)

NOERRORPRINT P NOERRORPRINT NOEP Designates that error messages will

be printed in listing file only

GEN P GENONLY GO List only the fully expanded source

as if all lines generated by a macro call were already in the source file

Điều khiển trình biên dịch hợp ngữ (2/6)

Trang 37

GENONLY G GENONLY NOGE List only the original source

text in the listing file

INCLUDE(file) G Not applicable IC Designates a file to be

included as part of the program

source code in listing file

NOLIST G NOLIST NOLI Do not print subsequent lines

of source code in listing file

NOMACRO P MACRO(50) NOMR Do not evaluate macro calls

predefined special function registers

8051-specific predefined special

Điều khiển trình biên dịch hợp ngữ (3/6)

Trang 38

PAGING P PAGING PI Designates that listing file

be broken into pages and each will have a header

NOPAGING P PAGING NOPI Designates that listing file will

contain no page breaks

PAGELENGTH P PAGELENGTH(60) PL Sets maximum number of lines in

each page of listing file (range = 10

to 65,536)

PAGEWIDTH P PAGEWIDTH(120) PW Sets maximum number of

characters in each line of listing file (range = 72 to 132)

PRINT(file) P PRINT(source.LST) PR Designates file to receive source

Trang 39

SAVE G Not applicable SA Stores current control settings from

SAVE stack

RESTORE G Not applicable RS Restores control settings

from SAVE stack

REGISTERBANK(rb, ) P REGISTERBANK(0) RB Indicates one or more banks

used in program module

NOREGISTERBANK P REGISTERBANK(0) NORB Indicates that no register banks are

used

SYMBOLS P SYMBOLS SB Creates a formatted table of all

symbols used in program

NOSYMBOLS P SYMBOLS NOSB Designates that no symbol table is

created

TITLE(string) G TITLE() TT Places a string in all subsequent

page headers (max 60 characters)

WORKFILES(path) P Same as source WF Designates alternate path for

temporary workfiles

Điều khiển trình biên dịch hợp ngữ (5/6)

Trang 40

XREF P NOXREF XR Creates a cross reference listing of

all symbols used in program

NOXREF P NOXREF NOXR Designates that no cross

reference list is created

Điều khiển trình biên dịch hợp ngữ (6/6)

Trang 41

Hoạt động của trình liên kết (Linker )

Intel RL51: liên kết các module thành 1 tập tin xuất:

RL51 input_list [TO output_file] [location_controls] input_list: danh sách các module (tập tin) đối tượng tái định vị được cách nhau bằng dấu phẩy.

Output_file: tên của module đối tượng xuất (chương trình thực thi được).

Location controls: đặt các địa chỉ bắt đầu cho các đoạn có tên.

• TD:

RL51 MAIN.OBJ,MESSAGE.OBJ, SUBROUTINE.OBJ TO

EXAMPLE & CODE (EPROM(4000H)) DATA(ONCHIP(30H))

Trang 42

Hoạt động của trình liên kết (Linker ) (2/2)

Trang 43

Macro cho phép các đoạn mã thường dùng sẽ được

định nghĩa 1 lần dùng 1 từ gợi nhớ đơn giản và có thể dùng bất cứ chỗ nào trong chương trình bằng cách chèn từ gợi nhớ vào đó.

ASM51’s MPL: thay thế chuỗi.

• %DEFINE (call_pattern) (macro_body)

%DEFINE (PUSH_DPTR)

(PUSH DPH PUSH DPL)

%PUSH_DPTR sẽ được thay thế bằng 2 lệnh PUSH

DPH và PUSH DPL trong tập tin.LST

Trang 44

Các thuận lợi của việc dùng macro

Dễ đọc hơn

Chương trình nguồn được viết ngắn hơn

Dùng macro làm giảm các lỗi

Dùng macro làm cho người lập trình không cần biết

chi tiết cấp thấp hơn

Trang 45

%CMPA# (20H) = CJNE A,#20H,$+3

Trang 47

Các nhãn cục bộ

• %DEFINE (macro_name [(parameter_list)])

[LOCAL list_of_local_labels] (macro_body)

%DEFINE (DEC_DPTR) LOCAL SKIP

MOV A,DPL CJNE A,#0FFH, %SKIP DEC DPH

%SKIP: )

DEC DPL

MOV A,DPL CJNE A,#0FFH, SKIP00 DEC DPH

SKIP00:

Trang 48

Bảo toàn A bằng các Push-Pop

%DEFINE (DEC_DPTR) LOCAL SKIP

DEC DPL MOV A,DPL CJNE A,#0FFH,%SKIP DEC DPH

%SKIP: POP A

)

Trang 49

Lặp lại các tác vụ– Macro có sẵn

• %REPEAT (expression) (text)

TD:

%REPEAT (100) (NOP)

Trang 50

Các tác vụ luồng điều khiển

Biên dịch theo điều kiện trong ASM51:

• %IF (expression) THEN (balanced_text)

[ELSE (balanced_text)]

%IF (INTERNAL) THEN

Ngày đăng: 20/04/2022, 11:19

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w