Chương 3 : Lp trình hp ng 1 Giá trình Vi x
Chương 3
LP TRÌNH HP NG
3.1. TNG QUAN V TRÌNH DCH HP NG
3
3.
.1
1.
.1
1.
.
G
Gi
i
i
i
t
th
hi
i
u
u
:
:
Ngôn ng assembly gia ngôn ng máy và ngôn ng cp cao. Ngôn ng cp cao được
đặc trưng như: Pascal, C ... Còn chương trình ngôn ng máy là mt chui các byte nh phân
được đặc trưng bi các lnh mà máy tính có th thc thi.
Ngôn ng assembly thay thế các mã nh phân ca ngôn ng máy để s dng các “thut
nh“ d dàng trong quá trình lp trình. Ví d lnh cng trong ngôn ng máy được đặc trưng
bi mã nh phân “10110011” trong khi ngôn ng assembly là “ADD“.
Mt chương trình ngôn ng assembly không th thc thi bi máy tính mà nó phi được
dch sang mã nh phân ngôn ng máy.
Mt linker là mt chương trình mà nó kết hp các chương trình đặc trưng Relocatable
(modul) và thiết kế mt chương trình đặc trưng tuyt đối thc thi bng máy tính.
Segment là mt phn ca b nh mã hoc d liu, nó có th tái định v được
(Relocatable) hoc tuyt đối (Absolute ). Segment Relocatable có tên, kiu và có th được
kết ni vi Segment cc b khác. Segment Absolute không có tên và không th đựơc kết ni
Segment khác.
Modul cha 1 hoc nhiu segment hay các segment cc b . Mt modul có th là mt
“file” nhiu trường hp cá bit .
Mt chương trình Modul Absolute đơn được hòa vào toàn b các Segment Absolute và
Segment Relocatable t tt c các mode nhp.
Chương trình ch cha các mã nh phân thay cho các lnh (vi các địa ch và các hng
d liu ) được hiu bi máy tính.
3
3.
.1
1.
.2
2.
.
H
Ho
o
t
t
đ
đ
n
ng
g
c
c
a
a
t
tr
rì
ìn
nh
h
b
bi
iê
ên
n
d
d
c
ch
h
(
(A
As
ss
se
em
mb
bl
le
er
r
O
Op
pe
er
ra
at
ti
io
on
n)
)
Có nhiu trình biên dch vi mc đích khác nhau có tác dng là d hiu các ng dng vi
điu khin. ASM51 là tiêu biu chun biên dch ca h MSC-51. ASM51 là trình biên dch
mnh có tác dng hu hiu trên h thng phát trin INTEL và h IBM PC ca máy vi tính.
ASM51 được gi hin lên t s ch dn ca h thng bi:
ASM51 Source file (Assembly Control).
Trình biên dch nhn mt file ngun vi tư cách là ngõ nhp (PROGRAM.SCR) và h
phát ra mt file đối tượng (PROGRAM.OBJ) và file listing (PROGRAM.LST).
Canquynhon.blogtiengviet.net Đại hc Quy Nhơn
Chương 3 : Lp trình hp ng 2 Giá trình Vi x
Hình 3.1: Hp dch mt chương trình ngun
Vì hu hết các biên dch xem xét chương trình ngun 2 ln trong lúc thi hành s dch
ngôn ng máy, nên chúng được mô t qua 2 Pass biên dch là Pass1 và Pass2.
Trong pass1, file ngun được xem xét tng dòng và bng ký hiu xây dng.
B đếm Location mc nhiên chn 0 hoc được đặt bi ch th ORG (đặt Origin).
Cũng như file được xem xét, b đếm Location được tăng lên bng độ dài mi lnh.
Ch th data định nghĩa (đặc bit hoc DW) tăng b đếm Location bng vi s byte định
rõ, các ch th nh lưu tr (DSO tăng b đếm Location bi s byte d tr). Mi ln mt
nhãn được tìm thy s bt đầu ca mt đường, thì nó được đặc trong bng ký hiu theo
giá tr hin hành ca b đếm Location. Các ký hiu được định nghĩa bi dùng các ch th
tương đương (EQU) được đặc trong bng ký hiu, được ct gi và sau đó dùng trong pass2.
Trong Pass2, file Object và file Listing được to ra, các thut nh được biến đổi thành
Opcode và đặt trong các file output. Các toán hng được xác định giá tr đặt phía sau
Opcode lnh. nơi các ký hiu xut hin trong toán hng, các ký hiu ca chúng s đưc
ly li t bng ký hiu (được to ra trong sut Pass1 và dùng trong s sp xếp d liu đúng
hoc đúng địa ch bi các lnh).
Bi vì Pass2 được thc thi nên chương trình ngun có th dùng “s tham kho trước “
là dùng ký hiu trước khi định nghĩa.
File Object nếu tuyt đối thì ch cha các byte nh phân (00H - FFH) ca chương trình
ngôn ng máy. File Object Relocatable cha mt bng ký hiu và thông tin khác được yêu
cu bi s kết hp và xác định đúng v trí. File Listing cha mã nguyên bng ASCII (20H –
7FH) cho c hai chương trình ngun và các byte Hexadecimal trong chương trình ngôn ng
máy.
3
3.
.1
1.
.3
3.
.
S
S
s
s
p
p
đ
đ
t
t
t
tr
ro
on
ng
g
t
tr
rì
ìn
nh
h
d
d
c
ch
h
n
ng
g
Chương trình ngôn ng Asembly bao gm: Các lnh máy, li ch ch ca trình biên
dch, s điu khin biên dch và các chú thích.
Canquynhon.blogtiengviet.net Đại hc Quy Nhơn
Chương 3 : Lp trình hp ng 3 Giá trình Vi x
Các lnh máy là các k xo ca lnh có th thc thi (ví d như ANL). Các ch th ca
trình biên dch là các lnh để trình biên dch định cu trúc chương trình, các d liu, ký
hiu, hng, … (ví d Org ). Các s điu khin trình biên dch set các mode ca trình biên
dch và điu khin s chy chương trình Assembly (ví d STILLE ).
Các chú thích hot động ca lnh.
Các lnh phi ghi theo nguyên tc rõ ràng để được trình biên dch hiu.
S sp xếp ca chúng như sau:
(Label:) mnemonic [operand][:operand][...][:comment]
3
3.
.1
1.
.3
3.
.1
1
V
Vù
ùn
ng
g
n
nh
hã
ãn
n
(
(l
la
ab
be
el
l
F
Fi
ie
el
ld
d
)
):
:
Mt nhãn tượng trưng cho địa ch ca lnh (hoc d liu ) theo sau nhãn. Khi các r
nhánh đến lnh này, nhãn được dùng trong vùng toán hng ca nhánh (hoc lnh nhy).
Các “nhãn“ là mt kiu ký hiu, sau nhãn phi có du hai chm (:) còn sau ký hiu thì
không.
Các kiu ký hiu được quy cho các giá tr hoc quy cho vic dùng các ch th như: EQU,
SEGMENT, BIT, DATA, … Các ký hiu có thđịa ch, hng, data, tên các segment hoc
s xây dng khác được hiu bi người lp trình. Sau đây là mt ví d để phân bit nhãn và
ký hiu:
PRA EQU 500 : PRA là ký hiu tượng trưng giá tr 500
START :MOV A , #0FFH :START là nhãn tương trưng địa ch lnh MOV
Mt ký hiu hoc mt nhãn phi bt đầu mt ch cái du “?”, hoc du “-“; phi được
theo sau bng mt ch cái, các s, du “?” hay “-“, và có th cha ti 31 ký t.
3
3.
.1
1.
.3
3.
.2
2
V
Vù
ùn
ng
g
t
th
hu
u
t
t
n
nh
h
(
(M
Mn
ne
em
mo
on
ni
ic
c
F
Fi
ie
el
ld
d
)
):
:
Các thut nh hay các ch ch biên dch đi vào vùng thut nh theo sau vùng nhãn. Ví
d các thut nh lnh như: ADD, MOV, DIV, INC, … ; các ch th biên dch như : ORG ,
EQU.
3
3.
.1
1.
.3
3.
.3
3
V
Vù
ùn
ng
g
t
to
oá
án
n
h
h
n
ng
g
(
(O
Op
pe
er
ra
an
nd
d
F
Fi
ie
el
ld
d)
):
:
Vùng toán hng theo sau vùng thut nh. Vùng này cha địa ch hay d liu được dùng
bi lnh. Mt nhãn có th dùng để tượng trưng cho hng d liu. Các kh năng cho phép
vùng toán hng ph thuc ln vào các hot động. Mt vài hot động không có toán hng
như : RET, NOP trong khi các hot động khác cho phép nhiu toán hng được phân ra bng
du phy.
Canquynhon.blogtiengviet.net Đại hc Quy Nhơn
Chương 3 : Lp trình hp ng 4 Giá trình Vi x
3
3.
.1
1.
.3
3.
.4
4
V
Vù
ùn
ng
g
c
ch
hú
ú
t
th
hí
íc
ch
h
(
(C
Co
om
mm
me
en
nt
t
F
Fi
ie
el
ld
d
)
):
:
Các chú thích phi d hiu đặt để gii thích lnh, và có du chm phy đầu. Khi chú
thích trong khung để gii thích tính cht chung ca phn chương trình được ct ra bên dưới.
3
3.
.1
1.
.3
3.
.5
5
C
Cá
ác
c
k
ký
ý
h
hi
i
u
u
b
bi
iê
ên
n
d
d
c
ch
h
đ
đ
c
c
b
bi
i
t
t
(
(S
Sp
pe
ec
ci
ia
al
l
A
As
ss
se
em
mb
bl
le
er
r
S
Sy
ym
mb
bo
ol
l
)
):
:
Các ký hiu biên dch đặc bit được dùng trong các mode định v thanh ghi c th
chúng bao gm các thanh ghi A, R0 – R7, DPTR, PC,C, AB, hay các ký hiu $ được dùng
để quy vào giá tr hin hành ca b đếm Location.
Ví d : lnh JNZ TI , $ tương đương vi lnh sau : HERE : JNZ T1, HERE
3
3.
.1
1.
.3
3.
.6
6
Đ
Đ
a
a
c
ch
h
g
gi
iá
án
n
t
ti
iế
ếp
p
(
(I
In
nd
di
ir
re
ec
ct
t
A
Ad
dd
dr
re
es
ss
s)
):
:
Đối vi mt s lnh dùng toán hng có th xác định thanh ghi mà nó cha địa ch gián
tiếp và nó ch có th dùng vi R0, R1 , DPTR. Ví d lnh MOV A, @R0 khôi phc li byte
d liu t RAM ni ti địa ch được định rõ trong R0.
Lnh MOVC, @A + PC khôi phc li byte d liu t b nh d liu ngoài ti địa ch
được to thành bi vic cng ni dung thanh ghi tích lũy A và b đếm chương trình.
3
3.
.1
1.
.3
3.
.7
7
D
D
l
li
i
u
u
t
t
c
c
t
th
h
i
i
(
(I
Im
mm
me
ed
di
ia
at
te
e
D
Da
at
ta
a
)
):
:
Các lnh dùng s định v tc thi cung cp d liu vào vùng toán hng, ký hiu # đặt
trước d liu tc thi. Ví d:
CONSTANT EQU 100
MOV A, 0FFH
ORL 40H, # CONSTANT
Các d liu tc thi (ngoi tr lnh MOV DPTR, #data) đều yêu cu d liu 8 bit. D
liu tc thi được đánh giá như hng s 16 bit và sau đó byte thp được s dng. Tt c các
bit trong byte cao ging nhau (00H hoc FFH) hoc 1 thông báo li “ giá tr s không lp
đầy 1 byte” được to ra. Ví d:
MOV A, #0FF00H
MOV A, #00FFH
Li : MOV A, #0FE00H
MOV A, #01FFH
Các hng s thp phân có du -256 đến + 256 như:
MOV A, #-256 ; đặt giá tr 00H vào thanh A
MOV A, 0FF00H ; đặt giá tr 00H vào thanh A
Canquynhon.blogtiengviet.net Đại hc Quy Nhơn
Chương 3 : Lp trình hp ng 5 Giá trình Vi x
3
3.
.1
1.
.3
3.
.8
8
Đ
Đ
a
a
c
ch
h
d
d
l
li
i
u
u
(
(D
Da
at
ta
a
A
Ad
dd
dr
re
es
ss
s)
):
:
Nhiu lnh truy xut các vùng nh dùng s định v trc tiếp và đòi hi mt địa ch nh
d liu trên chip (00 – FFH) hay mt địa ch SFR (80H – FFH) trên vùng toán hng. Các ký
hiu đã được định nghĩa có th được dùng cho các địa ch SFR. Ví d:
MOV A, 45H hay MOV A, SBUF ;tương đương lnh MOV A, 99H
3
3.
.1
1.
.3
3.
.9
9
Đ
Đ
a
a
c
ch
h
B
Bi
it
t
(
(B
Bi
it
t
A
Ad
dd
dr
re
es
ss
s)
):
:
Mt trong nhng đim mnh ca 8951 là kh năng truy xut các bit riêng l, không cn
các hot động trang b trên byte. Các lnh truy xut các bit định v phi cung cp mt địa ch
trong b nh d liu ni (00H – 7FH) hoc địa ch bit trong các SFR (80H - FFH).
Có 3 cách để xác định địa ch bit trong ô nh d liu: Dùng địa ch bit trc tiếp, dùng
hot động đim gia địa ch byte và địa ch bit, dùng ký hiu biên dch đã được định nghĩa.
Ví d:
SETB 0E7H : Dùng địa ch trc tiếp.
SETB ACC, 7 :Dùng hot động đim.
JNZ TI ,$ : Dùng ký hiu được định nghĩa “TI”.
3
3.
.1
1.
.3
3.
.1
10
0
Đ
Đ
a
a
c
ch
h
m
mã
ã
(
(C
Co
od
de
e
A
Ad
dd
dr
re
es
ss
s)
):
:
Địa chđược dùng trong toán hng cho các lnh nhy, bao gm các s nhy tương
đối (như SJMP và các lnh nhy có điu kin), các s nhy và các s gi tuyt đối (ACALL
, AJMP), các lnh nhy và gi dài (LJMP, LCALL). Địa ch mã thường được cho dng
nhãn sau:
HERE:
….
SJMP HERE
ASM51 s xác định địa chđúng và lng vào Offset đúng được ký hiu 8 bit lnh,
địa ch trang 11 bit hoc địa ch dài 16 bit cho thích hp.
3
3.
.1
1.
.3
3.
.1
11
1
C
Cá
ác
c
s
s
n
nh
h
y
y
v
và
à
g
g
i
i
c
ch
hu
un
ng
g
(
(
g
ge
en
ne
er
ri
ic
c
J
Ju
um
mp
p
a
an
nd
d
C
Ca
al
ll
ls
s)
):
:
ASM51 cho phép người lp trình dùng thut nh JMP chung hay CALL chung. Lnh
“JMP “có th được dùng thay cho “SJMP, AJMP, LJMP“ và “CALL” có th thay cho
ACALL hay LCALL. S biên dch biến đổi thut nh chung đếm mt lnh “thc tế“ sau vài
qui lut đơn gin, thut nh chung biến đổi thành dng tuyt đối nếu nhy hay gi trong
trang 2k. Nếu các dng ngn và tuyt đối không dùng thì s được chuyn thành dng dài.
Canquynhon.blogtiengviet.net Đại hc Quy Nhơn