한국   대만   중국   일본 
H?p ng? ? Wikipedia ti?ng Vi?t B??c t?i n?i dung

H?p ng?

Bach khoa toan th? m? Wikipedia
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 .

Cu phap [ s?a | s?a ma ngu?n ]

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 .

Thu?t ng? [ s?a | s?a ma ngu?n ]

  • 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.

Cac khai ni?m [ s?a | s?a ma ngu?n ]

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?.

S? l?n [ s?a | s?a ma ngu?n ]

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

Trinh h?p d?ch b?c cao [ s?a | s?a ma ngu?n ]

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:

  • mov al, 061h

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:

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 ) …

Thi?t k? [ s?a | s?a ma ngu?n ]

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.

?ng d?ng [ s?a | s?a ma ngu?n ]

Trong qua kh? [ s?a | s?a ma ngu?n ]

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?.

Hi?n nay [ s?a | s?a ma ngu?n ]

đ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.

Cac ?ng d?ng đi?n hinh [ s?a | s?a ma ngu?n ]

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.

Xem them [ s?a | s?a ma ngu?n ]

Tham kh?o [ s?a | s?a ma ngu?n ]

  1. ^ a b “Assembler language” .
  2. ^ James Saxon; William Plette (1962). Programming the IBM 1401 . Prentice-Hall. LCCN   62-20615 – qua HathiTrust. [use of the term assembly program ]
  3. ^ “Assembly: Review ? The Ohio State University” (PDF) . 2016.
  4. ^ B. Archer. “Assembly Language For Students” . Assembly language may also be called symbolic machine code.
  5. ^ “High Level Assembler ? Opcodes overview, Assembler Directives” .
  6. ^ “Macro instructions” .
  7. ^ System calls often vary, e.g. for MVS vs. VSE vs. VM/CMS; the binary/executable formats for different operating systems may also vary. “How do assembly languages depend on operating systems?” .
  8. ^ (John Daintith, ed.) A Dictionary of Computing: "meta-assembler"
  9. ^ David Salomon (1993). Assemblers and Loaders
  10. ^ Beck, Leland L. (1996). “2”. System Software: An Introduction to Systems Programming . Addison Wesley.
  11. ^ Hyde, Randall. "Chapter 12 ? Classes and Objects". The Art of Assembly Language, 2nd Edition. No Starch Press. ⓒ 2010.

Sach [ s?a | s?a ma ngu?n ]

Lien k?t ngoai [ s?a | s?a ma ngu?n ]