H?p ng?
Danh sach H?p ng? Motorola MC6800, cho th?y h?p ng? th?i đ?u va hinh th?c k?t h?p
|
M?u hinh
| B?t bu?c
,
Phi c?u truc
|
---|
Xu?t hi?n l?n đ?u
| 1949
; 75 n?m tr??c
(
1949
)
|
---|
Trong
l?p trinh may tinh
,
H?p ng?
(hay
assembly
[1]
) th??ng đ??c vi?t t?t la
asm
la b?t k?
ngon ng? l?p trinh c?p th?p
nao co s? t??ng ?ng r?t m?nh gi?a cac t?p l?nh trong ngon ng? va t?p l?nh ma may c?a
ki?n truc
.
[2]
B?i vi h?p ng? ph? thu?c vao t?p l?nh ma may, m?i
trinh bien d?ch
co h?p ng? rieng đ??c thi?t k? cho chinh xac m?t ki?n truc may tinh c? th?. H?p ng? c?ng co th? đ??c g?i la
ma may
t??ng tr?ng (
symbolic machine code)
.
[3]
[4]
Ma h?p ng? đ??c chuy?n đ?i thanh ma may th?c thi b?ng m?t ch??ng trinh đ??c g?i la
assembler
. Qua trinh chuy?n đ?i đ??c g?i la
assembling
. H?p ng? th??ng co m?t cau l?nh tren m?t l?nh may (1:1), nh?ng cac
comment
va cac cau l?nh la ch? th? trinh bien d?ch,
[5]
macros,
[1]
[6]
va cac
nhan
ch??ng trinh va
đ?a ch? b? nh?
c?ng đ??c h? tr?
M?i m?t h?p ng? la danh rieng cho m?t ki?n truc may tinh c? th? va đoi khi cho m?t
h? đi?u hanh
.
[7]
Tuy nhien, m?t s? h?p ng? khong cung c?p
cu phap
rieng cho l?i g?i h? đi?u hanh, va h?u h?t cac h?p ng? co th? đ??c s? d?ng ph? bi?n v?i b?t k? h? đi?u hanh nao, vi ngon ng? nay cung c?p quy?n truy c?p vao t?t c? cac kh? n?ng th?c s? c?a
b? x? ly
, theo đo t?t c? cac c? ch?
g?i h? th?ng
đ?u d?ng l?i. Trai ng??c v?i h?p ng?, h?u h?t cac
ngon ng? l?p trinh b?c cao
th??ng co kh? n?ng di đ?ng tren nhi?u ki?n truc nh?ng yeu c?u
thong d?ch
ho?c
bien d?ch
, m?t cong vi?c ph?c t?p h?n nhi?u so v?i assembling.
H?p ng? đa t?ng đ??c dung r?ng rai trong t?t c? cac khia c?nh l?p trinh, nh?ng ngay nay no co xu h??ng ch? đ??c dung trong m?t s? lanh v?c h?p, ch? y?u đ? giao ti?p tr?c ti?p v?i
ph?n c?ng
ho?c x? ly cac v?n đ? lien quan đ?n t?c đ? cao đi?n hinh nh? cac
trinh đi?u khi?n thi?t b?
, cac
h? th?ng nhung
c?p th?p va cac ?ng d?ng
th?i gian th?c
.
Cach dung cac thu?t nh? (mnemonics) than thi?n đ? vi?t ch??ng trinh đa thay th? cach l?p trinh tr?c ti?p len may tinh b?ng ma may d?ng s? (numeric machine code) - t?ng ap d?ng cho nh?ng may tinh đ?u tien - v?n r?t m?t nh?c, d? gay l?i va t?n nhi?u th?i gi?.
H?p ng? dung m?t thu?t nh? (
mnemonic
) đ? th? hi?n t?ng l?nh may ho?c opcode c?p th?p, th??ng la m?i
thanh ghi
ki?n truc, bit c?... Nhi?u thao tac yeu c?u m?t ho?c nhi?u toan h?ng đ? t?o thanh m?t l?nh hoan ch?nh. H?u h?t cac
trinh h?p d?ch
cho phep cac h?ng s?, thanh ghi va nhan đ??c đ?t ten cho cac v? tri ch??ng trinh va b? nh? va co th? tinh toan cac bi?u th?c cho toan h?ng. Do đo, cac
l?p trinh vien
đ??c gi?i phong kh?i cac tinh toan l?p đi l?p l?i t? nh?t va cac ch??ng trinh bien d?ch ch??ng trinh d? đ?c h?n nhi?u so v?i ma may. Tuy thu?c vao ki?n truc, cac y?u t? nay c?ng co th? đ??c k?t h?p cho cac t?p l?nh c? th? ho?c ch? đ? đ?a ch? b?ng cach s? d?ng offset ho?c d? li?u khac c?ng nh? đ?a ch? c? đ?nh. Nhi?u trinh h?p d?ch cung c?p cac c? ch? b? sung đ? t?o đi?u ki?n phat tri?n ch??ng trinh, ki?m soat qua trinh l?p rap va h? tr?
g? l?i
.
- M?t
trinh h?p d?ch macro
bao g?m m?t t?p l?nh macro sao cho v?n b?n h?p ng? (parameterized) đ??c tham s? hoa) co th? đ??c bi?u th? b?ng m?t ten va ten đo co th? đ??c s? d?ng đ? chen v?n b?n m? r?ng vao ma khac.
- Trinh h?p d?ch đa n?n t?ng
la m?t trinh h?p d?ch co th? ho?t đ?ng đ??c tren h? th?ng may tinh ho?c h? đi?u hanh (
h? th?ng ch?
) thu?c lo?i khac v?i h? th?ng ma ma k?t qu? s? ch?y (
h? th?ng đich
). Trinh h?p d?ch cheo t?o đi?u ki?n phat tri?n cac ch??ng trinh cho cac h? th?ng khong co tai nguyen đ? h? tr? phat tri?n ph?n m?m, ch?ng h?n nh?
h? th?ng nhung
ho?c
vi đi?u khi?n
. Trong tr??ng h?p nay, ma đ?i t??ng k?t qu? ph?i đ??c chuy?n đ?n h? th?ng đich, thong qua
b? nh? ch? đ?c
(ROM, EPROM, v.v.), m?t l?p trinh vien (khi b? nh? ch? đ?c đ??c tich h?p trong thi?t b?, nh? trong vi đi?u khi?n) ho?c lien k?t d? li?u b?ng cach s? d?ng b?n sao chinh xac t?ng bit c?a ma đ?i t??ng ho?c bi?u di?n d?a tren v?n b?n c?a ma đo (ch?ng h?n nh?
Motorola S-record
ho?c
Intel HEX
).
- Trinh h?p d?ch b?c cao
la m?t ch??ng trinh cung c?p cac tom t?t ngon ng? th??ng đ??c lien k?t v?i cac ngon ng? b?c cao, ch?ng h?n nh? cac c?u truc đi?u khi?n nang cao (IF/THEN/ELSE, DO CASE...) va cac lo?i d? li?u tr?u t??ng c?p cao, bao g?m c?u truc/b?n ghi, unions,
l?p
, va sets.
- M?t
vi h?p d?ch
la m?t ch??ng trinh giup chu?n b? m?t ch??ng trinh vi mo, đ??c g?i la ph?n s?n, đ? ki?m soat ho?t đ?ng ? m?c đ? th?p c?a may tinh.
- Trinh h?p d?ch meta
la m?t thu?t ng? đ??c s? d?ng trong m?t s? vong tron cho "ch??ng trinh ch?p nh?n mo t? cu phap va ng? ngh?a c?a h?p ng? va t?o trinh bien d?ch cho ngon ng? đo
."
[8]
- Assembly time
la b??c tinh toan n?i trinh bien d?ch đ??c ch?y.
Trinh h?p d?ch (Assembler)
[
s?a
|
s?a ma ngu?n
]
Thong th??ng, m?t trinh h?p d?ch hi?n đ?i t?o ra
ma đ?i t??ng
(object code) b?ng cach
phien d?ch
cac l?nh h?p ng? thanh
ma th?c thi
(opcodes) va phan tich cac
bi?u danh
(symbolic names) ?ng v?i cac vung nh? cung cac th?c th? khac.
[9]
Vi?c dung cac
bi?u danh
đ? tham chi?u la m?t tinh n?ng then ch?t c?a cac
trinh h?p d?ch
, no ti?t ki?m m?t kh?i l??ng l?n cong vi?c tinh toan va s?a đ?i th? cong sau m?i l?n c?i ti?n ?ng d?ng. H?u h?t cac trinh h?p d?ch đ?u h? tr?
macro
nh?m giup cho vi?c thay th? m?t nhom l?nh b?ng m?t đ?nh danh ng?n g?n. Trong qua trinh d?ch, nhom l?nh t??ng ?ng s? đ??c chen tr?c ti?p vao v? tri macro thay vi m?t l?i g?i
ham
(subroutine).
M?t s? trinh h?p d?ch c?ng co th? th?c hi?n m?t s? lo?i t?i ?u hoa c? th? theo t?p l?nh. M?t vi d? c? th? v? đi?u nay co th? la trinh h?p d?ch
x86
ph? bi?n t? cac nha cung c?p khac nhau. H?u h?t trong s? chung co th? th?c hi?n thay th? l?nh nh?y (nh?y dai thay th? b?ng nh?y ng?n ho?c t??ng đ?i) trong b?t k? s? l?n v??t qua, theo yeu c?u. Nh?ng trinh h?p d?ch khac th?m chi co th? th?c hi?n s?p x?p l?i đ?n gi?n ho?c chen cac l?nh, ch?ng h?n nh? m?t s? trinh h?p d?ch cho
ki?n truc RISC
co th? giup t?i ?u hoa l?ch trinh t?p l?nh h?p ly đ? khai thac
kenh chuy?n d? li?u
(pipeline) c?a
CPU
m?t cach hi?u qu? nh?t co th?.
Gi?ng nh? cac ngon ng? l?p trinh ban đ?u nh?
Fortran
,
Algol
,
Cobol
va
Lisp
, cac trinh h?p d?ch đa co s?n t? nh?ng n?m 1950 va cac th? h? giao di?n may tinh d?a tren v?n b?n đ?u tien. Tuy nhien, cac trinh h?p d?ch xu?t hi?n đ?u tien vi chung đ?n gi?n h?n nhi?u so v?i
trinh bien d?ch
cho cac
ngon ng? b?c cao
. đi?u nay la do m?i mnemonic cung v?i cac ch? đ? đ?a ch? va toan h?ng c?a m?t l?nh d?ch tr?c ti?p thanh cac bi?u di?n s? c?a l?nh đo, ma khong co nhi?u b?i c?nh ho?c phan tich. C?ng đa co m?t s? l?p d?ch gi? va trinh t?o ma ban t? đ?ng co cac thu?c tinh t??ng t? c? h?p ng? va ngon ng? b?c cao, v?i
Speedcode
co l? la m?t trong nh?ng vi d? đ??c bi?t đ?n nhi?u h?n.
Co th? co m?t s? trinh bien d?ch v?i cu phap khac nhau cho m?t c?u truc CPU ho?c t?p l?nh c? th?. Ch?ng h?n, m?t l?nh đ? them d? li?u b? nh? vao m?t thanh ghi trong b? x? ly h? x86 co th? la
add eax,[ebx]
, trong cu phap g?c c?a
Intel
, trong khi đi?u nay s? đ??c vi?t la
addl (%ebx),%eax
trong cu phap c?a
AT&T
đ??c dung trong
GNU Assembler
. M?c du xu?t hi?n khac nhau, cac hinh th?c cu phap khac nhau th??ng t?o ra cung m?t ma may. Xem ben d??i. M?t trinh bien d?ch đ?n c?ng co th? co cac ch? đ? khac nhau đ? h? tr? cac bi?n th? trong cac hinh th?c cu phap c?ng nh? cac di?n gi?i ng? ngh?a chinh xac c?a chung (nh? cu phap FASM, cu phap TASM, ch? đ? ly t??ng, v.v., trong tr??ng h?p đ?c bi?t c?a l?p trinh h?p ng? x86).
Cac trinh h?p d?ch noi chung d? t?o h?n so v?i cac ch??ng trinh d?ch cho ngon ng? c?p cao. Nh?ng trinh h?p ng? đ?u tien xu?t hi?n t? nh?ng
th?p nien 1950
, trong bu?i đ?u s? khai c?a
may tinh
đa t?o ra m?t b??c ngo?t l?n đ?i v?i nh?ng
l?p trinh vien
v?n r?t m?t m?i vi vi?c l?p trinh b?ng ngon ng? may. Cac trinh h?p d?ch hi?n đ?i ngay nay, đ?c bi?t cho cac dong chip
RISC
nh?
MIPS
,
Sun
SPARC
va
HP
PA-RISC
, th??ng t?i ?u vi?c s?p x?p va đ?ng b? cac ch? th? l?nh (instruction scheduling) đ? t?n d?ng cac
kenh chuy?n d? li?u
(pipeline) c?a
CPU
m?t cach hi?u qu?.
Co hai lo?i trinh h?p d?ch d?a tren s? l?n truy?n qua ngu?n c?n thi?t (s? l?n trinh bien d?ch đ?c ngu?n) đ? t?o t?p đ?i t??ng.
- Trinh h?p d?ch m?t l?n
đi qua ma ngu?n m?t l?n. B?t k? ky hi?u nao đ??c s? d?ng tr??c khi đ??c xac đ?nh s? yeu c?u "errata" ? cu?i ma đ?i t??ng (ho?c, it nh?t, khong s?m h?n đi?m ma bi?u t??ng đ??c xac đ?nh) bao cho trinh lien k?t ho?c trinh t?i "quay l?i" va ghi đe len gi? ch? đa đ??c đ? l?i n?i s? d?ng bi?u t??ng ch?a xac đ?nh.
- Trinh h?p d?ch nhi?u l?n
t?o m?t b?ng co t?t c? cac ky hi?u va gia tr? c?a chung trong cac l??t đ?u tien, sau đo s? d?ng b?ng trong cac l?n truy?n sau đ? t?o ma.
Trong c? hai tr??ng h?p, trinh bien d?ch ph?i co kh? n?ng xac đ?nh kich th??c c?a m?i l?nh tren cac đ??ng chuy?n ban đ?u đ? tinh đ?a ch? c?a cac ky hi?u ti?p theo. đi?u nay co ngh?a la n?u kich th??c c?a m?t ho?t đ?ng đ? c?p đ?n m?t toan h?ng đ??c xac đ?nh sau ph? thu?c vao lo?i ho?c kho?ng cach c?a toan h?ng, trinh bien d?ch s? đ?a ra ??c tinh bi quan khi l?n đ?u tien g?p thao tac va n?u c?n, hay đ?m no b?ng m?t ho?c nhi?u l?nh "
no-operation
" trong m?t l?n v??t qua ho?c errata. Trong m?t trinh bien d?ch v?i t?i ?u hoa l? nhin tr?m, cac đ?a ch? co th? đ??c tinh toan l?i gi?a cac l?n chuy?n đ? cho phep thay th? ma bi quan b?ng ma đ??c đi?u ch?nh theo kho?ng cach chinh xac t? m?c tieu.
Ly do ban đ?u cho vi?c s? d?ng b? h?p d?ch m?t l?n la t?c đ? h?p d?ch - th??ng thi l?n th? hai s? yeu c?u tua l?i va đ?c l?i ngu?n ch??ng trinh tren
b?ng
ho?c đ?c l?i m?t chu?i
bia đ?c l?
. Cac may tinh sau nay co b? nh? l?n h?n nhi?u (đ?c bi?t la l?u tr? đ?a), co khong gian đ? th?c hi?n t?t c? cac x? ly c?n thi?t ma khong c?n đ?c l?i. ?u đi?m c?a trinh h?p d?ch nhi?u l??t la vi?c khong co errata lam cho qua trinh lien k?t (ho?c t?i ch??ng trinh n?u trinh bien d?ch tr?c ti?p t?o ma th?c thi) nhanh h?n.r.
[10]
Vi d?:
trong đo?n ma sau, trinh h?p d?ch m?t l?n co th? xac đ?nh đ?a ch? c?a
BKWD
tham chi?u ng??c khi h?p d?ch cau l?nh
S2
, nh?ng khong th? xac đ?nh đ?a ch? c?a FWD tham chi?u chuy?n ti?p khi h?p d?ch cau l?nh nhanh
S1
; th?t v?y, FWD co th? khong đ??c xac đ?nh. Trinh h?p d?ch hai l?n s? xac đ?nh c? hai đ?a ch? trong l?n 1, vi v?y chung s? đ??c bi?t khi t?o ma trong l?n 2.
S1
B
FWD
...
FWD
EQU *
...
BKWD
EQU *
...
S2
B
BKWD
Nhi?u trinh h?p d?ch b?c cao con h? tr? kh? n?ng ngon ng? tr?u t??ng nh?:
Tham kh?o ph?n
Thi?t k? ngon ng?
ben d??i đ? ro h?n.
H?p ng? (Assembly language)
[
s?a
|
s?a ma ngu?n
]
M?t ch??ng trinh vi?t b?ng h?p ng? bao g?m m?t chu?i cac l?nh (instructions) d? nh? t??ng ?ng v?i m?t lu?ng cac ch? th? kh? thi (executable) ma khi đ??c d?ch b?ng m?t
trinh h?p d?ch
, chung co kh? n?ng n?p đ??c vao b? nh? đ?ng th?i th?c thi đ??c.
Vi d?, b? vi x? ly
x86
/
IA-32
co th? th?c hi?n đ??c ch? th? nh? phan sau (th? hi?n ? d?ng ngon ng? may):
- 10110000 01100001 (th?p l?c phan: 0xb061)
L?nh tren t??ng đ??ng v?i m?t ch? th? h?p ng? d? nh? h?n sau:
Ch? th? l?nh tren co ngh?a la: gan gia tr? th?p l?c phan 61 (97 d?ng th?p phan) cho thanh ghi trong b? vi x? ly co ten la "al". Thu?t t? "mov" la ma th?c thi (operation code / opcode), đ??c ng??i thi?t k? t?p l?nh đ?t ten thay th? cho t? "move", cac đ?i/ tham s? c?a l?nh theo sau va ng?n cach v?i opcode b?i m?t d?u ph?y ",".
Trinh h?p d?ch th?c hi?n chuy?n đ?i h?p ng? sang
ngon ng? may
va
trinh phan d?ch
(disassembler) th?c hi?n qua trinh tren ng??c l?i. Khong gi?ng cac ngon ng? b?c cao, cac ch? th? h?p ng? c? b?n th??ng co m?i lien h? t??ng ?ng 1-1 v?i cac ch? th? ngon ng? may. Tuy nhien trong m?t s? tr??ng h?p, m?t trinh h?p d?ch co th? b? sung cac
l?nh gi?
(pseudo-instructions) vao t?p l?nh ngon ng? may nh?m cung c?p cac ch?c n?ng đ??c dung th??ng xuyen. H?u h?t cac trinh h?p d?ch đa ch?c n?ng đ?u cung c?p them m?t t?p macro phong phu đ? nha s?n xu?t thi?t b? va
l?p trinh vien
co th? t?o cac ma l?nh va cac day
d? li?u
ph?c t?p.
M?i
ki?n truc may tinh
đ?u co ngon ng? may rieng va do đo c?ng co h?p ng? rieng, chung phan bi?t v?i nhau b?ng s? l??ng va ki?u c?a cac l?nh ma chung h? tr?. Chung c?ng co th? khac nhau v? s? l??ng va kich c? c?a cac
thanh ghi
c?ng nh? cach th? hi?n cac ki?u d? li?u trong b? l?u tr? (b? nh?). H?u h?t cac may tinh cong d?ng chung đ?u co kh? n?ng th?c hi?n cung ch?c n?ng nh?ng cach ma chung th?c hi?n thi khac nhau, đi?u đo ph?n anh s? khac nhau gi?a cac h?p ng? t??ng ?ng v?i m?i ki?u may tinh.
Ngon ng? may (Machine language)
[
s?a
|
s?a ma ngu?n
]
Ngon ng? may đ??c xay d?ng t? cac ch? th? va cac l?nh r?i r?c, tuy vao m?i ki?n truc x? ly ma t?p l?nh đ??c xac l?p b?i cac đ?c thu rieng:
- Cac thanh ghi dung cho tinh toan
s? h?c
- Cach b? tri
b? nh?
va tinh đ?a ch?
- Cach
đi?u khi?n r? nhanh
- Cac ki?u đanh đ?a ch? đ?c thu dung đ? gi?i cac toan h?ng
Nhi?u l?nh ph?c h?p đ??c t?o d?ng b?ng cach k?t h?p nhi?u ch? th? đ?n gi?n v?i nhau, cac ch? th? nay tuan theo nguyen ly
may tinh Von Neumann
, t?c la th?c thi tu?n t? va r? nhanh theo l?nh phan lu?ng. M?t s? l?nh đi?n hinh co m?t trong h?u h?t cac t?p l?nh g?m co:
- L?nh gan
- Gan cho m?t thanh ghi (m?t vung nh? t?m th?i trong
CPU
) m?t gia tr? h?ng s? xac đ?nh
- Chuy?n d? li?u t? m?t vung nh? sang m?t thanh ghi ho?c ng??c l?i. Thao tac nay dung đ? chu?n b? d? li?u cho m?t tinh toan sau đo ho?c đ? l?u k?t qu? c?a m?t tinh toan tr??c đo.
- đ?c /ghi d? li?u t?/vao cac thi?t b? ph?n c?ng
- L?nh cho tinh toan
- C?ng, tr?, nhan ho?c chia cac gia tr? ch?a trong cac thanh ghi va l?u k?t qu? vao m?t thanh ghi
- Th?c hi?n cac phep thao tac bit "va"/"ho?c" (AND/OR) tren m?t c?p thanh ghi, ho?c phep ph? đ?nh bit tren m?t thanh ghi
- So sanh nh? h?n/l?n h?n/ b?ng nhau gi?a hai gia tr? l?u trong hai thanh ghi
- L?nh đi?u khi?n r? nhanh
- Nh?y t?i m?t v? tri trong ch??ng trinh va th?c thi cac l?nh ? đo
- Nh?y t?i m?t v? tri khac n?u m?t đi?u ki?n nh?t đ?nh đ??c th?a man
- Nh?y t?i m?t v? tri nh?ng l?u l?i v? tri c?a l?nh ti?p theo đ? lam đi?m nh?y tr? v? (th??ng la m?t l?i g?i ham)
M?t s? may tinh bao g?m cac ch? th? l?nh ph?c h?p trong t?p l?nh c?a chung. M?t l?nh ph?c h?p th??ng th?c hi?n nh?ng tac v? c?n nhi?u ch? th? l?nh tren nhi?u may khac nhau, chung th?c hi?n trong nhi?u b??c, đi?u khi?n nhi?u đ?n v? ch?c n?ng. Danh sach minh h?a m?t s? l?nh ph?c h?p:
- L?u l?i nhi?u thanh ghi tren ng?n x?p ch? m?t l?n
- Di chuy?n cac kh?i vung nh? l?n
- Cac phep toan d?u ph?y đ?ng ph?c t?p (sine, cosine, square root, etc.)
- Cac l?nh ALU lien k?t v?i m?t toan h?ng t? b? nh? thay vi v?i m?t thanh ghi
M?t ki?u l?nh ph?c h?p đ??c dung ph? bi?n ngay nay la cac phep toan
SIMD
hay cac l?nh vector (
vector instruction
) co kh? n?ng th?c hi?n cung m?t phep toan s? h?c tren nhi?u ph?n c?a d? li?u trong cung m?t th?i đi?m. Cac l?nh
SIMD
(single instruction multile data) cho phep th?c hi?n song song nhi?u thu?t toan lien quan đ?n x? ly am thanh, hinh ?nh va video m?t cach d? dang. Nhi?u t?p l?nh th?c thi
SIMD
tich h?p trong CPU đa đ??c th??ng m?i hoa d??i cac th??ng hi?u nh?
MMX
va
SSE, SSE2, SSE3, SSE4
(
Intel
),
3DNow!
(
AMD
),
AltiVec
(
IBM
),
tm3260
va
tm5250
(
Nexperia
-
Philips
) …
Ch? th? l?nh trong h?p ng? noi chung la đ?n gi?n, khong gi?ng nh? trong ngon ng? b?c cao. M?i ch? th? l?nh đi?n hinh th??ng bao g?m m?t ma l?nh (operation/ opcode hay đ?n gi?n la instruction) theo v?i m?t ho?c nhi?u
toan h?ng
(operands), ho?c khong co toan h?ng nao. H?u h?t cac ch? th? l?nh đ?u tham kh?o t?i m?t gia tr? đ?n ho?c c?p gia tr?. M?i ch? th? l?nh th??ng đ??c ma hoa t??ng ?ng tr?c ti?p v?i m?t ch? th? ngon ng? may kh? thi đ?n l?.
Nh?ng thanh ph?n thong th??ng co trong h?u h?t cac h?p ng? g?m co:
- Cac
đ?nh ngh?a d? li?u
(Data definitions). Cac ch? th? ph? cho phep l?p trinh vien danh rieng m?t vung nh? cho cac cau l?nh ngon ng? may tham kh?o t?i. Vung nh? nay th??ng đ??c kh?i t?o b?ng cac
ky t?
,
chu?i
va cac ki?u d? li?u c? s? khac
- Nhan
(Labels). Cac đ?nh ngh?a d? li?u đ??c tham chi?u t?i b?ng cach s? d?ng cac đ?nh danh (nhan ho?c ky hi?u) do l?p trinh vien ch? đ?nh. Chung co th? la cac
h?ng s?
, cac
bi?n
hay cac thanh ph?n c?a
c?u truc
. Nhan c?ng co th? đ??c gan cho cac vung ma th?c thi nh? đ?a ch? b?t đ?u c?a m?t th? t?c ho?c đich nh?y t?i c?a l?ng
GOTO
. H?u h?t cac trinh h?p d?ch đ?u co kh? n?ng qu?n ly cac nhan m?t cach linh ho?t, giup cho l?p trinh vien thao tac tren nhi?u
khong gian ten
khac nhau, t? đ?ng tinh
đ? l?ch đ?a ch?
trong cac
c?u truc d? li?u
va tham chi?u t?i cac nhan ch?a gia tr? đ?nh tr??c hay k?t qu? c?a m?t tinh toan.
- Chu d?n
(Comments). Gi?ng nh? nhi?u ngon ng? may tinh khac, h?p ng? c?ng h? tr? vi?c them cac chu d?n vao trong
ma ngu?n
, chung s? đ??c trinh h?p d?ch b? qua trong qua trinh bien d?ch
- T?p l?nh bo
(Macros). H?u h?t cac trinh h?p d?ch đ?u nhung
ngon ng? macro
vao t?p l?nh chinh. L?p trinh vien dung macro đ? tranh ph?i l?p l?i nh?ng đo?n ma t??ng t?, trong qua trinh ti?n bien d?ch tuy vao cac đ?i s? c?a macro ma cac l?nh trong than macro s? đ??c s?a đ?i va chen vao v? tri g?i macro. Ngoai ra macro c?ng đ??c nha s?n xu?t thi?t b? dung đ? đong goi cac phep tinh đ?c bi?t vi d? nh?:
- Cac b? vi x? ly 8 bit th??ng dung macro đ? t?ng ho?c gi?m m?t gia tr? 16 bit l?u trong hai byte lien t?c, đay la phep toan th??ng ph?i th?c hi?n trong ba ho?c b?n ch? th? l?nh đ?n l?. (b? vi x? ly
MOS Technology 6502
)
- Nha s?n xu?t c?ng h? tr? cac macro đ? dung cho cac giao ti?p h? th?ng nh? cac thao tac vao/ra (I/O) hay cac yeu c?u c?p th?p t? h? đi?u hanh. Trong cac may tinh l?n c?a IBM, cac th? vi?n macro kh?ng l? cung c?p cac ph??ng th?c truy xu?t va cac d?ch v? h? th?ng khac
Nh?ng tinh n?ng tren đ??c m??n t? cac thi?t k? ngon ng? b?c cao nen đa đ?n gi?n hoa nh?ng v?n đ? trong l?p trinh va b?o tri ma ngu?n c?p th?p. Ma ngu?n h?p ng? tho c?ng co th? t?o ra b?ng cac trinh bien d?ch ngon ng? b?c cao (compiler) ho?c b?ng cac trinh phan
d?ch ma
may (disassembler), nh?ng chung th??ng khong co chu d?n c?ng nh? cac đ?nh danh d? hi?u nen r?t kho đ?c.
Ngoai cac đ?c tinh c? b?n ? tren, tuy nhien vai h?p ng? c?ng co nh?ng tinh n?ng ngo?i l? nh?:
- Nhi?u trinh h?p d?ch bao g?m cac ngon ng? macro r?t ph?c t?p, cho phep ph?i h?p v?i cac ph?n t? c?a ngon ng? b?c cao nh? cac bi?n t??ng tr?ng, cac l?nh đi?u ki?n, cac thao tac chu?i va cac phep tinh s? h?c. Do đo m?t macro co th? thay th? m?t l??ng l?n cac l?nh h?p ng? ho?c cac đ?nh ngh?a d? li?u d?a tren cac tham s? c?a no. No co th? dung đ? sinh ra cac c?u truc ki?u
b?n ghi
hay cac vong l?p "m?" (unrolled) ho?c d?a tren cac tham
s? ph?c
t?p no co th? gi?i quy?t tr?n v?n m?t thu?t gi?i.
V? m?t l?ch s?, đa t?ng co m?t s? l??ng l?n cac ch??ng trinh đa đ??c vi?t hoan toan b?ng h?p ng?. Tr??c khi xu?t hi?n ngon ng? C vao nh?ng n?m 1970 va đ?u th?p nien 1980, cac h? đi?u hanh đ?c quy?n h?u nh? đ??c vi?t b?ng h?p ng?. Nhi?u ?ng d?ng th??ng m?i c?ng đ??c vi?t b?ng h?p ng?, bao g?m m?t kh?i l??ng l?n cac ph?n m?m cho
may tinh l?n
c?a
IBM
đ??c cac t?p đoan l?n vi?t. Cu?i cung thi ngon ng?
COBOL
va
FORTRAN
đa thay th? h?p ng? m?c du con nhi?u t? ch?c v?n gi? l?i cac ki?n truc ?ng d?ng ki?u h?p ng? trong su?t th?p nien 1980.
H?u h?t cac
may vi tinh
(micro-computer) bu?i đ?u ch? y?u v?n hanh b?ng h?p ng?, bao g?m cac h? đi?u hanh va cac ?ng d?ng l?n. Ly do la b?i cac h? th?ng nay b? h?n ch? v? tai nguyen, thi?t b?, b? nh? va ki?n truc hi?n th? c?ng nh? cac d?ch v? h? th?ng d? l?i. Ly do quan tr?ng h?n, co l? la s? thi?u h?t cac trinh bien d?ch b?c cao tien ti?n v?n thich h?p cho cac h? th?ng vi tinh. Cac ?ng d?ng l?n vi?t b?ng h?p ng? đi?n hinh nh? h? đi?u hanh
CP/M
va
MS-DOS
, b?ng tinh
spreadsheet
va
Lotus-123
trong cac may
IBM-PC
đ?i đ?u, va nhi?u cac tro ch?i ph? bi?n cho may
Commodore 64
. Th?m chi t?i nh?ng n?m 1990, nhi?u cac tro ch?i video gi?i tri v?n đ??c vi?t b?ng h?p ng?, bao g?m cac tro ch?i cho may
Mega Drive/Genesis
va
Super Nintendo Entertainment System
.
Ngoai ra con m?t d?ng "?ng d?ng" khong đ??c khuy?n khich đo la
virus may tinh
. Trong cac nh?ng n?m '80 va đ?u nh?ng n?m '90 h?u h?t virus may tinh đ??c vi?t b?ng h?p ng?, ly do la s? gi?m thi?u kich th??c c?a virus c?ng nh? kh? n?ng can thi?p sau vao h? th?ng c?a h?p ng?.
đa t?ng co nhi?u tranh lu?n v? ti?n d?ng va hi?u n?ng c?a h?p ng? so v?i cac ngon ng? b?c cao, tuy ngay nay ng??i ta it chu y t?i đi?u đo n?a. H?p ng? v?n đong vai tro quan tr?ng trong m?t s? nhu c?u c?n thi?t. Noi chung, cac trinh bien d?ch hi?n đ?i ngay nay đ?u co kh? n?ng bien d?ch cac ngon ng? b?c cao thanh ma ma co th? th?c thi nhanh it nh?t b?ng h?p ng?. đ? ph?c t?p c?a cac b? vi x? ly hi?n đ?i cho phep t?i ?u ma m?t cach hi?u qu?, h?n n?a, ph?n l?n th?i gian ho?t đ?ng c?a CPU r?i vao tr?ng thai r?i b?i no ph?i đ?i k?t qu? t? ca cac tinh toan "th?t c? chai" nh? cac thao tac I/O va truy xu?t b? nh?. Vi th? t?c đ? th?c thi ma tho (raw code) tr? thanh v?n đ? it quan tr?ng đ?i v?i h?u h?t l?p trinh vien, s? xu?t hi?n cac ngon ng?
thong d?ch
(interpreted language) ngay cang nhi?u la m?t minh ch?ng cho đi?u nay.
Ngay nay co m?t s? it tinh hu?ng ma cac chuyen gia th?c s? mu?n dung h?p ng? cho cong vi?c c?a h? la:
- Khi cac thi?t b? ho?t đ?ng đ?c l?p ma khong c?n tai nguyen hay cac th? vi?n lien k?t v?i ngon ng? b?c cao. đay co l? la tr??ng h?p ph? bi?n nh?t
- Khi c?n giao ti?p tr?c ti?p v?i ph?n c?ng nh? trinh đi?u khi?n thi?t b?, ho?c khi mu?n dung cac ch? th? vi x? ly ma trinh bien d?ch khong t?n d?ng đ??c
- Khi c?n t?i ?u kh?t khe nh? cac thu?t toan co dung vong l?p tieu t?n nhi?u n?ng l?c x? ly
- Khi m?t h? th?ng c?n ph?i vi?t ma th? cong đ? t?n d?ng ngu?n tai nguyen h?n h?p. Ngay nay đi?u đo co v? khong ph? bi?n n?a do gia c? CPU gi?m đ?ng th?i hi?u n?ng ho?t đ?ng CPU đa c?i thi?n đang k?.
- Khi cac ngon ng? b?c cao khong th? ap d?ng đ??c tren m?t CPU m?i ho?c CPU chuyen d?ng.
Ngay nay l?p trinh vien co th? ch?n m?t ngon ng? c?p th?p nh?
C
đ? vi?t cac ?ng d?ng c?n hi?u n?ng cao, tuy đi?u đo khong d? dang b?i m?t ?ng d?ng vi?t b?ng C s? khong hi?u qu? h?n ?ng d?ng vi?t b?ng h?p ng?. Ngoai ra, h?p ng? v?n con đ??c gi?ng d?y trong h?u h?t cac ch??ng trinh
Khoa h?c may tinh
, cac khai ni?m n?n t?ng v?n co y ngh?a quan tr?ng. Ch?ng h?n nh?
s? h?c nh? phan
,
c?p phat b? nh?
,
x? ly ng?n x?p
, ma hoa
t?p ky t?
,
x? ly ng?t
va
thi?t k? trinh d?ch
v?n đ??c nghien c?u m?t cach chi ti?t va h? th?ng b?t k? ph?n c?ng may tinh ho?t đ?ng nh? th? nao. Cach ho?t đ?ng c?a may tinh đ??c xac đ?nh b?i t?p l?nh c? s? c?a no, vi v?y đ? hi?u cac khai ni?m c? s? đo cach t?t nh?t la nghien c?u h?p ng? c?a no. May thay, h?u nh? cac may tinh hi?n đ?i đ?u co cac t?p l?nh t??ng t? nhau, do đo ch? n?m đ??c m?t h?p ng? c?ng co đ? đ? hi?u đ??c cac khai ni?m c? b?n ? cac h?p ng? tren h? th?ng khac.
H?p ng? ma c?p th?p th??ng đ??c dung cho
BIOS
l?u trong
ROM
c?a m?t h? th?ng đ? kh?i t?o va ki?m tra ph?n c?ng h? th?ng tr??c khi kh?i t?o
h? đi?u hanh
. Khi kh?i t?o ph?n c?ng hoan thanh, quy?n đi?u khi?n h? th?ng s? đ??c chuy?n qua cho cac ph?n ma th? thi khac (th??ng đ??c vi?t b?ng ngon ng? b?c cao). đi?u nay c?ng đung cho h?u h?t cac
trinh kh?i đ?ng
(boot loader).
Nhi?u trinh bien d?ch chuy?n đ?i cac ngon ng? b?c cao thanh h?p ng? tr??c khi bien d?ch th?c s?, đi?u nay cho phep ki?m tra ma ph?c v? m?c đich g? r?i va t?i ?u. Cac ngon ng? c?p th?p nh? C th??ng cung c?p cac
cu phap
đ?c bi?t cho phep nhung tr?c ti?p h?p ng? vao ma ngu?n. Cac ch??ng trinh t?n d?ng tinh n?ng nay nh?
Nhan Linux
co th? t?o ra cac t?ng tr?u t??ng đ? s? d?ng tren nhi?u ki?n truc ph?n c?ng khac nhau.
H?p ng? c?ng co gia tr? trong
k? thu?t d?ch ng??c
(reverse engineering). Cac ch??ng trinh l?n v?n ch? đ??c phan ph?i d??i d?ng ma may, chung th??ng d? dang d?ch ng??c thanh h?p ng? đ? ki?m tra nh?ng r?t kho d?ch ng??c ra ma ngon ng? b?c cao.