-
Thông tin
-
Quiz
Bài giảng môn hợp ngữ | Trường Đại học Bách Khoa Hà Nội
Bài giảng môn hợp ngữ | Trường Đại học Bách Khoa Hà Nội. Tài liệu gồm 78 trang, giúp bạn tham khảo, ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!
Tin học đại cương 88 tài liệu
Đại học Bách Khoa Hà Nội 2.8 K tài liệu
Bài giảng môn hợp ngữ | Trường Đại học Bách Khoa Hà Nội
Bài giảng môn hợp ngữ | Trường Đại học Bách Khoa Hà Nội. Tài liệu gồm 78 trang, giúp bạn tham khảo, ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!
Môn: Tin học đại cương 88 tài liệu
Trường: Đại học Bách Khoa Hà Nội 2.8 K tài liệu
Thông tin:
Tác giả:




















Tài liệu khác của Đại học Bách Khoa Hà Nội
Preview text:
BÀI GI NG MÔN H P NG Qu ng Ngãi - 2015
Bài gi ng môn Assembly M c l c
Ch ngă1ă- C ăB N V H P NG ............................................................................................. 1
1.1 Cú pháp l nh h p ng ........................................................................................................... 1 1.1.1ăTr
ng Tên (Name Field) .............................................................................................. 1
1.1.2ăTr ng toán t (operation field) .................................................................................... 1
1.1.3ăTr ng các toán h ng (operand(s) field) ....................................................................... 1
1.1.4ăTr ng chú thích (comment field) ................................................................................. 2
1.2 Các ki u số li uătrongăch
ngătrìnhăh p ng ........................................................................ 2
1.2.1 Các số ............................................................................................................................. 2
1.2.2 Các ký tự ........................................................................................................................ 2
1.3 Các bi n (variables) .............................................................................................................. 3
1.3.1. Bi n byte ....................................................................................................................... 3
1.3.2 Bi n từ ............................................................................................................................ 3
1.3.3 M ng (arrays) ................................................................................................................. 3
1.4 Các hằng (constants) ............................................................................................................. 4
1.5 Các l nhăc ăb n ..................................................................................................................... 5
1.5.1 L nh MOV và XCHG .................................................................................................... 5
1.5.2 L nh ADD, SUB, INC, DEC ......................................................................................... 5
1.5.3 L nh NEG (negative) ..................................................................................................... 6
1.6 Chuy n ngôn ng cấp cao thành ngôn ng ASM ................................................................. 6
1.6.1 M nhăđ B=A................................................................................................................. 6
1.6.2 M nhăđ A=5-A ............................................................................................................. 6
1.6.3 M nhăđ A=B-2*A ........................................................................................................ 7 1.7 Cấu trúc c a m tăch
ngătrìnhăh p ng ............................................................................... 7
1.7.1 Các ki u b nhớ (memory models) ................................................................................ 7
1.7.2ăĐo n số li u ................................................................................................................... 7
1.7.3ăĐo năngĕnăx p ............................................................................................................... 7
1.7.4ăĐọan mã ......................................................................................................................... 7
1.8 Các l nh vào ra...................................................................................................................... 8
1.8.1 L nh IN T 21h................................................................................................................. 8
1.9ăCh ngătrìnhăđầu tiên ........................................................................................................... 9 1.10 T o ra và ch y m tăch
ngătrìnhăh p ng ........................................................................ 10
1.11 Xuất m t chu i ký tự ........................................................................................................ 10
1.12ăCh ngătrìnhăđổi ch th ng sang ch hoa...................................................................... 11
Bài gi ng môn Assembly
Ch ngă2ă- Tr ng thái c a vi x lý và các thanh ghi c ............................................................... 13
2.1 Các thanh ghi c (Flags register) ........................................................................................ 13
2.2 Tràn (overflow) ................................................................................................................... 14 2.3 Các l nh nhăh
ngăđ c nh ăth nào ............................................................................... 15
Ch ngă3ă- CÁC L NHăĐI U KHI N ....................................................................................... 18
3.1 Ví d v l nh nh y .............................................................................................................. 18
3.2 Nh yăcóăđi u ki n ............................................................................................................... 18
3.3 L nh JMP ............................................................................................................................ 21
3.4 Cấu trúc c a ngôn ng cấp cao ........................................................................................... 21
3.4.1 Cấu trúc r nhánh ......................................................................................................... 21
4.3.2 Cấu trúc lặp .................................................................................................................. 25
3.5 Lập trình với cấu trúc cấp cao............................................................................................. 26
Ch ngă4ă- CÁC L NH LOGIC, D CH VÀ QUAY ................................................................... 31
4.1 Các l nh logic...................................................................................................................... 31
4.1.1 L nh AN D,OR và XOR ............................................................................................... 31
4.1.2 L nh NOT .................................................................................................................... 33
4.1.3 L nh TEST ................................................................................................................... 33
4.2 L nh SHIFT ........................................................................................................................ 33
4.2.1 L nh d ch trái (left shift ) ............................................................................................. 34
4.2.2 L nh d ch ph i (Right Shift ) ....................................................................................... 34
4.3 L nh quay (Rotate).............................................................................................................. 35
4.4 Xuất nhập số nh phân và số hex ........................................................................................ 36
4.4.1 Nhập số nh phân ......................................................................................................... 36
4.4.2 Xuất số nh phân .......................................................................................................... 37
4.4.3 Nhập số HEX ............................................................................................................... 37
4.4.4 Xuất số HEX ................................................................................................................ 38
Ch ngă5ă- NGĔNăX P VÀ TH T C ...................................................................................... 40
5.1ăNgĕnăx p ............................................................................................................................. 40
5.2ă ngăd ng c a stack............................................................................................................. 42
5.3 Th t c (Procedure) ............................................................................................................ 43
5.4 CALL & RETURN ............................................................................................................. 44
5.5 Ví d v th t c ................................................................................................................... 46
Ch ngă6ă- L NH NHÂN VÀ CHIA........................................................................................... 48
6.1 L nh MUL và IMUL........................................................................................................... 48
Bài gi ng môn Assembly
6.2ă ngăd ngăđ năgi n c a l nh MUL và IMUL ..................................................................... 49
6.3 L nh DIV và IDIV .............................................................................................................. 50
6.4 M r ng dấu c a số b chia ................................................................................................. 51
6.5 Th t c nhập xuất số thập phân .......................................................................................... 51
Ch ngă7ă- M NG VÀ CÁC CH Đ Đ A CH ....................................................................... 58
7.1 M ng m t chi u .................................................................................................................. 58
7.2 Các ch đ đ a ch (addressing modes) ............................................................................... 59
7.2.1 Ch đ đ a ch gián ti p bằng thanh ghi....................................................................... 59
7.2.2 Ch đ đ a ch ch số vƠăc ăs ...................................................................................... 61
7.2.5 Truy xuấtăđo n stack .................................................................................................... 65
7.3 Sắp x p số li u trên m ng ................................................................................................... 65
7.4 M ng 2 chi u....................................................................................................................... 67
7.6ă ngăd ngăđ tính trung bình ............................................................................................... 69
7.7 L nh XLAT......................................................................................................................... 71 Ch
ng 1 - C ăB N V H P NG
Trongă ch ngă nƠyă s giới thi u nh ng nguyên tắcă chungă đ t o ra, d ch và ch y m tă ch ngă
trình h p ng trên máy tính. Cấu trúc ng pháp c a l nh h p ng trongă giáoă trìnhă nƠyă đ c trình
bày theo Macro Assembler (MASM) dựa trên CPU 8086 .
1.1 Cú pháp l nh h p ng M tă ch
ngă trìnhă h p ng bao gồm m t lo t các m nhă đ (statement)ă đ c vi t liên ti p nhau, m i m nhă đ đ
c vi t trên 1 dòng. M t m nhă đ có th là :
- m t l nh (instruction)ă :ăđ
c trình biên d ch (Assembler =ASM) chuy n thành mã máy.
- m t ch dẫn c a Assembler (Assembler directive) : ASM không chuy n thành mã máy
Các m nhă đ c a ASM gồmă 4ătr ng : Name Operation Operand(s) Comment
cácătr ng cách nhau ít nhất là m t ký tự trống hoặc m t ký tự TAB ví d l nhă đ sau :
START : MOV CX,5 ; khơỉ tạo thanh ghi CX
SauăđơyălƠăm t ch dẫn c a ASM :
MAIN PROC ; tạo một thủ tục có tên là MAIN
1.1.1 Trường Tên (Name Field)
Tr ngă tênă đ c dùng cho nhãn l nh, tên th t c và tên bi n. ASM s chuy nă tênă thƠnhă đ a ch
b nhớ. Tên có th dài từ 1ăđ n 31 ký tự. Trong tên chứa các ký tự từ a-z, các số và các ký tự đặc
bi t sau : ? ,@, _, $ và dấu. Khôngăđ
c phép có ký tự trống trong phần tên. N u trong tên có ký
tự. thì nó ph i là ký tự đầu tiên. Tênă khôngă đ
c bắtă đầu bằng m t số. ASM không phân bi t gi a ký tự vi tă th ng và vi t hoa .
SauăđơyălƠăcácăvíăd v tên h p l và không h p l trong ASM . Tên h p l Tên không h p l COUNTER1 TWO WORDS @CHARACTER 2ABC SUM_OF_DIGITS A45.28 DONE? YOU&ME .TEST ADD-REPEAT
1.1.2 Trường toán tử (operation field)
Đối với 1 l nhă tr ng toán t ch áă kỦă hi u (symbol) c a mã phép toán (operation code =
OPCODE) .ASM s chuy n ký hi u mã phép toán thành mã máy. Thôngă th ng ký hi u mã
phép toán mô t chứcănĕngă c a phép toán, ví d ADD, SUB, INC, DEC, INT ...
Đối với ch dẫn c a ASM, tr ng toán t ch áăm t opcode gi (pseudo operation code = pseudo-
op). ASM không chuy n pseudo-op thành mã máy mà h ớng dẫn ASM thực hi n m t vi c gìă đóă
ví d t o ra m t th t c, đ nhă nghĩaă các bi n ...
1.1.3 Trường các toán hạng (operand(s) field) Trong m t l nhă tr
ng toán h ng ch ra các số li u tham gia trong l nhă đó. M t l nh có th
không có toán h ng, có 1 hoặc 2 toán h ng. Ví d : NOP ; không có toán hạng INC AX ; 1 toán hạng
ADD WORD1,2 ; 2 toán hạng cộng 2 với nội dung của từ nhớ WORD1 1
Bài gi ng môn Assembly
Trong các l nh 2 toán h ng toán h ngă đầu là toán h ngă đíchă (destination operand). Toán h ng
đíchă th ng làthanh ghi hoặc v trí nhớ dùngă đ l uă tr k t qu . Toán h ng thứ hai là toán h ng
nguồn. Toán h ng nguồnă th
ng không b thay đổi sau khi thực hi n l nh . Đối với m t ch dẫn c a ASM, tr
ng toán h ng chứa m t hoặc nhi u thông tină mƠă ASMădùngă đ thực thi ch dẫn .
1.1.4 Trường chú thích (comment field)
Tr ng chú thích là m t tuỳ chọn c a m nhăđ trong ngôn ng ASM. Lập trìnhăviênădùngătr ng
chúă thíchă đ thuy t minh v câu l nh. Đi u này là cần thi t vì ngôn ng ASM là ngôn ng cấp
thấp (low level) vì vậy s rất khó hi uă ch
ng trình n uă nóă khôngă đ c chú thích m tăcáchăđầy
đ và rỏ ràng. Tuy nhiên không nên cóă chúă thíchă đối với mọi dòng c aă ch ngă trình, k c
nnh ng l nhă mƠă Ủănghĩaă c a nóăđưărất rỏ rƠngă nh ă : NOP ; không làm chi cả
Ng i ta dùng dấu chấm phẩyă(;)ăđ bắtăđầuătr ng chú thích . ASMăcũngăchoăphép dùng toàn b
m tă dòngă choă chúă thíchă đ t o m t kho ng trốngă ngĕnă cáchă cácă phần khác nhau cu ch ngătrìnhă ,ví d : ; ; khởi tạo các thanh ghi ; MOV AX,0 MOV BX,0
1.2 Các ki u số li uătrongăch ngătrìnhăh p ng
CPU ch làm vi c với các số nh phân. Vì vậy ASM ph i chuy n tất c các lo i số li u thành số nh phân. Trong m tă ch
ngă trìnhă h p ng cho phép bi u di n số li uă d ới d ng nh phân, thập
phân hoặc thập l c phân và thậm chí là c ký tự n a . 1.2.1 Các số
M t số nh phân là m t dãy các bit 0 và 1 va 2ph i k t thúc bằng h hoặc H
M t số thập phân là m t dãy các ch só thập phân và k t thúc b i d hoặc D (có th không cần)
M t số hex ph i bắtăđầu b i 1 ch số thập phân và ph i k t thúc b i h hoặc H .
SauăđơyălƠăcácăbi u di n số h p l và không h p l trong ASM : Số Lo i 10111 thập phân 10111b nh phân 64223 thập phân -2183D thập phân 1B4DH hex 1B4D số hex không h p l FFFFH số hex không h p l 0FFFFH số hex 1.2.2 Các ký tự
Ký tự và m t chu i các ký tự ph iă đ
căđóngăgi a hai dấu ngoặcăđ năhoặc hai dấu ngoặc kép. Ví
d ‘A’ă vƠă “HELLO”. Các ký tự đ uă đ
c chuy n thành mã ASCII b i ASM. Doă đóă trongă m t
ch ngă trìnhă ASMăs xemăkhaiă báoă‘A’ăvƠă41hă(mưăASCIIăc a A) là giống nhau . 2
Bài gi ng môn Assembly
1.3 Các bi n (variables)
Trong ASM bi nă đóngă vaiă tròă nh ă trongă ngônă ng cấp cao. M i bi n có m t lo i d li u và nó
đ c gán m tăđ a ch b nhớ sau khi d chăch ngătrình. B ng sau đơyăli t kê các toán t gi dùng
đ đ nhă nghĩaă cácălo i số li u . PSEUDO-OP STANDS FOR DB define byte DW define word (doublebyte) DD
define doubeword (2 từ liên ti p) DQ
define quadword (4 từ liên ti p ) DT
define tenbytes (10 bytes liên ti p) 1.3.1. Biến byte
Ch dẫn c aăASMăđ đ nhă nghĩaă bi n byte có d ngă nh ăsauă : NAME DB initial_value Ví d : ALPHA DB 4
Ch dẫn này s gán tên ALPHA cho m t byte nhớ trong b nhớ mà giá tr bană đầu c a nó là 4.
N u giá tr c aă byteălƠă khôngă xácăđ nhă thìă đặt dấu chấm hỏi (?) vào giá tr banăđầu. Ví d : BYT DB ?
Đối với bi n byte vùng giá tr kh dĩămƠănóăl uătr đ c là -128ăđ n 127ăđối với số có dấu và 0
đ nă255ăđối với số không dấu . 1.3.2 Biến từ
Ch dẫn c aăASMăđ đ nhă nghĩaă m t bi n từ nh ă sauă: NAME DW initial_value Ví d : WRD DW -2
Cũngă cóă th dùng dấuă ?ă đ thay th cho bi n từ có giá tr không xác đ nh. Vùng giá tr c a bi n
từ là -32768ăđ n 32767ăđối với số có dấuăvƠă0ăđ n 56535 đối với số không dấu . 1.3.3 Mảng (arrays)
Trong ASM m t m ng là m t lo t các byte nhớ hoặc từ nhớ liên ti p nhau. Ví d đ đ nhă nghĩaă
m t m ng 3 byte gọi là B_ARRAY mà giá tr bană đầu c a nó là 10h,20h và 30h chúng ta có th vi t : B_ARRAY DB 10h,20h,30h
B_ARRAYă lƠătênăđ căgánăchoăbyteăđầu tiên
B_ARRAY+1 là tên c a byte thứ hai
B_ARRAY+2 là tên c a byte thứ ba
N uăASMăgánă đ a ch offset là 0200h cho m ng B_ARRAY thì n i dung b nhớ s nh ă sauă: SYMBOL ADDRESS CONTENTS B_ARRAY 200h 10h B_ARRAY+1 201h 20h B_ARRAY+2 202h 30h
Ch dẫnăsauă đơyăs đ nhă nghĩaă m t m ng 4 phần t có tên là W_ARRAY: W_ARRAY DW 1000,40,29887,329 3
Bài gi ng môn Assembly
Gi s m ng bắtăđầu t i 0300h thì b nhớ s nh ă sau: SYMBOL ADDRESS CONTENTS W_ARRAY 300h 1000d W_ARRAY+2 302h 40d W_ARRAY+4 304h 29887d W_ARRAY+6 306h 329d
Byte thấp và byte cao của một từ
Đôiă khiă chúngă taă cần truy xuất tới byte thấp và byte cao c a m t bi n từ. Gi s chúngătaăđ nh nghĩaă : WORD1 DW 1234h
Byte thấp c a WORD1 chứa 34h, còn byte cao c a WORD1 chứa 12h
Ký hi uă đ a ch c a byte thấp là WORD1 còn ký hi uă đ a ch c a byte cao là WORD1+1 .
Chuỗi các ký tự (character strings)
M t m ng các mã ASCII có th đ
căđ nhă nghĩaă bằng m t chu i các ký tự Ví d : LETTERS DW 41h,42h,43h t ngă đ ngăvới LETTERS DW ‘ABC ’
Bên trong m t chu i, ASM s phân bi t ch hoa và ch th
ng. Vì vậy chu i ‘abc’ă s đ c
chuy n thành 3 bytes : 61h ,62h và 63h. Trongă ASMăcũngăcóăth tổ h p các ký tự và các số trong m tă đ nhă nghĩa. Ví d :
MSG DB ‘HELLO’, 0AH, 0DH, ‘$’ t ngă đ ngăvới
MSG DB 48H,45H,4CH,4Ch,4FH,0AH,0DH,24H
1.4 Các hằng (constants) Trong m tă ch
ngă trìnhă cácă hằng có th đ că đặt tên nh ch dẫn EQU (equates). Cú pháp c a EQU là : NAME EQU constant ví d : LF EQU 0AH
sau khi có khaiă báoă trênă thìă LFă đ
că dùngă thayă choă 0Ahă trongă ch ngă trình. Vì vậy ASM s chuy n các l nh : MOV DL,0Ah và MOV DL,LF thành cùng m t mã máy .
Cũngă cóăth dùngăEQUăđ đ nhă nghĩaă m t chu i, ví d : PROMPT EQU
‘TYPEă YOURăNAMEă’
Sau khi có khai báo này, thay cho MSG DB ‘TYPE YOUR NAME ’ chúng ta có th vi t MSG DB PROMPT 4
Bài gi ng môn Assembly 1.5 Các l nhăc ăb n
CPUă 8086ă cóă hƠngă trĕmă l nh, trongă ch ngă nƠyă ,chúngă taă s xem xét 7 l nh đ năgi n c a 8086
mƠă chúngă th ngă đ c dùng với các thao tác di chuy n số li u và thực hi n các phép toán số học.
Trong phầnă sauă đơy, WORD1 và WORD2 là các bi n từ, BYTE1 và BYTE2 là các bi n byte .
1.5.1 Lệnh MOV và XCHG
L nhă MOVă dùngă đ chuy n số li u gi a các thanh ghi, gi a 1 thanh ghi và m t v trí nhớ hoặcă đ
di chuy n trực ti p m t số đ n m t thanh ghi hoặc m t v trí nhớ. Cú pháp c a l nh MOV là :
MOV Destination, Source
SauăđơyălƠăvƠiăvíăd :
MOV AX,WORD1 ; lấy nội dung của từ nhớ WORD1 đưa vào thanh ghi AX
MOV AX,BX ; AX lấy nội dung của BX, BX không thay đổi
MOV AH,’A’ ; AX lấy giá trị 41h B ng sau cho thấyă cácătr
ng h p cho phép hoặc cấm c a l nh MOV
L nh XCHG (Exchange)ă dùngă đ traoă đổi n i dung c a 2 thanh ghi hoặc c a một thanh ghi và
một vị trí nhớ. Ví dụ : XCHG AH,BL
XCHG AX,WORD1 ; trao đổi nội dung của thanh ghi AX và từ nhớ WORD1.
Cũngă nh ăl nh MOV có m t số h n ch đối với l nhă XCHGănh ăb ng sau :
1.5.2 Lệnh ADD, SUB, INC, DEC
L nhă ADDă vƠă SUBă đ
că dùngă đ c ng và trừ n i dung c a 2 thanh ghi, c a m t thanh ghi và
m t v trí nhớ, hoặc c ng (trừ) m t số với (khỏi) m t thanh ghi hoặc m t v trí nhớ. Cú pháp là : ADD Destination, Source SUB Destination, Source Ví d : ADD WORD1, AX ADD BL, 5 5
Bài gi ng môn Assembly SUB AX,DX ; AX=AX-DX
Vì lý do kỹ thuật, l nhă ADDă vƠăSUBăcũngă b m t số h n ch nh ă b ng sau:
Vi c c ng hoặc trừ trực ti p gi a 2 v trí nhớ lƠă khôngă đ
c phép. Đ gi i quy t vấnă đ này
ng i ta ph i di chuy n byte (từ ) nhớ đ n m tăthanhăghiăsauăđó mới c ng hoặc trừ thanh ghi này
với m t byte (từ ) nhớ khác. Ví d : MOV AL, BYTE2 ADD BYTE1, AL
L nh INC (incremrent)ă đ c ng thêm 1 vào n i dung c a m t thanh ghi hoặc m t v trí nhớ.
L nh DEC (decrement)ă đ gi m bớt 1 khỏi m t thanh ghi hoặc 1 v trí nhớ. Cú pháp c a chúng là: INC Destination DEC Destination Ví d : INC WORD1 INC AX DEC BL
1.5.3 Lệnh NEG (negative)
L nhă NEGăđ đổi dấu (lấy bù 2 ) c a m t thanh ghi hoặc m t v trí nhớ. Cú pháp : NEG destination Ví d : NEG AX ;
Gi s AX=0002h sau khi thực hi n l nh NEG AX thì AX=FFFEh
L Uăụă: 2 toán h ng trong các l nhă trênăđơyăph i cùng lo i (cùng là byte hoặc từ )
1.6 Chuy n ngôn ng cấp cao thành ngôn ng ASM
Gi s A và B là 2 bi n từ . Chúng ta s chuy n các m nhăđ sau trong ngôn ng cấp cao ra ngôn ng ASM .
1.6.1 Mệnh đề B=A MOV AX,A ; đưa A vào AX MOV B,AX ; đưa AX vào B
1.6.2 Mệnh đề A=5-A MOV AX,5 ; đưa 5 vào AX SUB AX,A ; AX=5-A MOV A,AX ; A=5-A cách khác : NEG A ;A=-A ADD A,5 ;A=5-A 6
Bài gi ng môn Assembly
1.6.3 Mệnh đề A=B-2*A MOV AX,B ;Ax=B SUB AX,A ;AX=B-A SUB AX,A ;AX=B-2*A MOV A,AX ;A=B-2*A
1.7 Cấu trúc c a m tăch ngătrìnhăh p ng M tă ch
ngă trìnhă ngônă ng máy bao gồm mã (code), số li u (data) và ngĕn x p (stack ). M i
m t phần chi m m tă đo n b nhớ. M i m tă đo nă ch
ngă trìnhă lƠ đ c chuy n thành m tă đo n b nhớ b i ASM .
1.7.1 Các kiểu bộ nhớ (memory models)
Đ lớn c a mã và số li u trong m tă ch ngă trìnhă đ că quyă đ nh b i ch dẫn MODEL nhằm xác
đ nh ki u b nhớ dùng vớiăch ngă trình. Cú pháp c a ch dẫn MODELănh ăsauă: .MODEL memory_model
B ng sau cho thấy các ki u b nhớ : Model Description Small
code và data nằmătrongă1ăđo n Medium
code nhi uăh nă1ăđo nă,ădataătrongă1ăđo n Compact
data nhi uăh nă1ăđọană,ăcodeătrongă1ăđo n Large
code và dayta lớnăh nă1ăđo n , array không qúa 64KB Huge
code ,data lớn hớnă1ăđo n , array lớnăh nă64KB
1.7.2 Đoạn số liệu
Đo n số li u c aă ch ngă trìnhăch áăcácăkhaiăbáoăbi n, khai báo hằngă...ăĐ bắtăđầuăđo n số li u
chúng ta dùng ch dẫn DATA vớiă cúăphápănh ă sauă: .DATA
;khai báo tên các bi n, hằng và mãng ví d : .DATA WORD1 DW 2 WORD2 DW 5
MSG DB ‘THIS IS A MESSAGE ’ MASK EQU 10010010B
1.7.3 Đoạn ngăn xếp
M că đíchă c a vi că khaiă báoă đo nă ngĕnă x p là dành m t vùng nhớ (vùng satck)ă đ l uă tr cho
stack. Cú pháp c a l nhă nh ă sauă : .STACK size
n uă khôngă khaiă báoăsizeă thìă 1KBăđ c dành cho vùng stack .
.STACK 100h ; dành 256 bytes cho vùng stack 1.7.4 Đọan mã
Đo nămưăch áăcácăl nh c aăch ngă trình. Bắtăđầuăđo n mã bằng ch dẫn CODEănh ăsauă: .CODE
Bênă trongă đo n mã các l nhăth ngăđ c tổ chức thành th t c (procedure) mà cấu trúc c a m t th t că nh ă sauă: 7
Bài gi ng môn Assembly name PROC ; body of the procedure name ENDP
SauăđơyălƠăcâú trúc c a m tăch ngă trìnhă h p ng mà phần CODE là th t c có tên là MAIN .MODEL SMALL .STACK 100h .DATA
; định nghĩa số liệu tại đây .CODE MAIN PROC ;thân của thủ tục MAIN MAIN ENDP
; các thủ tục khác nếu có END MAIN 1.8 Các l nh vào ra
CPU thông tin với các ngo i vi thông qua các cổng IO. L nh IN và OUT c a CPU cho phép truy
xuấtă đ n các cổng này. Tuy nhiên hầu h t các ứng d ng không dùng l nh IN và OUT vì 2 lý do:
- cácăđ a ch cổngă thayă đổi tuỳ theo lo i máy tính
- có th lập trình cho các IO d dƠngă h n nh cácă ch ngă trìnhă conă (routine)ă đ c cung
cấp b i các hãng ch t o máy tính Có 2 lo iă ch
ngătrìnhăph c v IO là : các routine c a BIOS (Basic Input Output System) và các routine c a DOS . Lệnh INT (interrupt)
Đ gọiăcácăch ngă trìnhă conăc a BIOS và DOS có th dùng l nh INT với cú phápănh ăsauă: INT interrupt_number
đơyă interrupt_numberă lƠă m t số mà nó ch đ nh m t routine. Ví d INT 16h gọi routine thực
hi n vi c nhập số li u từ Keyboard . 1.8.1 Lệnh INT 21h
INTă 21hă đ că dùngă đ gọi m t số lớn các các hàm (function) c a DOS. Tuỳ theo giá tr mà
chúngă taăđặt vào thanh ghi AH, INT 21h s gọi ch y m t routine t ngă ứng .
Trong phần này chúng ta s quană tơmă đ nă 2ăhƠmă sauă đơyă: FUNCTION NUMBER ROUTINE 1 Single key input 2 Single character output
FUNTION 1 : Single key input Input : AH=1
Output:AL= ASCII code if character key is pressed
AL=0 if non character key is pressed
Đ gọi routine này thực hi n các l nh sau : MOV AH,1 ; input key function
INT 21h ; ASCII code in AL and display character on the screen 8
Bài gi ng môn Assembly
FUNTION 2 : Display a character or execute a control function Input : AH=2
DL=ASCII code of the the display character or control character
Output:AL= ASCII code of the the display character or control character
Các l nh sau s in lên màn hình dấu ? MOV AH,2
MOV DL,’?’ ; character is ‘?’ INT 21H ; display character
HƠmă 2ă cũngă cóă th dùngă đ thực hi n chứcă nĕngă đi u khi n .N uă DLăch áăkỦ tự đi u khi n thì
khi gọi INT 21h, ký tự đi u khi n s đ c thực hi n . Các ký tự đi u khi nă th ng dùng là : ASCII code (Hex) SYMBOL FUNCTION 7 BEL beep 8 BS backspace 9 HT tab A LF line feed D CR carriage return
1.9ăCh ngă trìnhăđầu tiên Chúng ta s vi t m tă ch
ngă trìnhă h p ng nhằmă đọc m t ký tự từ bàn phím vƠăinănóătrênăđầu dòng mới . TITLE PGM1: ECHO PROGRAM .MODEL SMALL .STACK 100H .CODE MAIN PROC ; display dấu nhắc MOV AH,2 MOV DL,’?’ INT 21H ; nhập 1 ký tự
MOV AH,1 ; hàm đọc ký tự
INT 21H ; ký tự được đưa vào AL
MOV BL,AL ; cất ký tự trong BL ; nhảy đến dòng mới
MOV AH,2 ; hàm xuất 1 ký tự
MOV DL,0DH ; ký tự carriage return
INT 21H, thực hiện carriage return
MOV DL,0AH ; ký tự line feed
INT 21H ; thực hiện line feed ; xuất ký tự 9
Bài gi ng môn Assembly
MOV DL,BL ; đưa ký tự vào DL INT 21H ; xuất ký tự ; trở về DOS
MOV AH,4CH ; hàm thoát về DOS INT 21H ; exit to DOS MAIN ENDP END MAIN
1.10 T o ra và ch y m tăch ngătrìnhăh p ng Tham kh o cách s d ngă ch
ngă trìnhă Emu8086ă trênăinternet.
1.11 Xuất m t chu i ký tự
Trongă ch ngă trìnhă PGM1ă trênă đơyă chúngă taă đưă dùngăINTă21HăhƠmă2ăvƠă4ăđ đọc và xuất m t
ký tự. Hàm 9 ngắt 21H có th dùngă đ xuất m t chu i ký tự .
INT 21H, Function 9 : Display a string
Input : DX=offset address of string
Theăstringă mustă endăwithă aă‘$’ăcharacter
Ký tự $ cuối chu i s khôngă đ
c in lên màn hình. N u chu i có chứa ký tự đi u khi n thì
chứcănĕngă đi u khi nă t
ngă ứng s đ c thực hi n . Chúng ta s vi tă 1ă ch
ngă trìnhă ină lênă mƠnă hìnhă chu iă “HELLO!”. Thông đi pă HELLOă đ c
đ nhă nghĩaă nh ăsauătrongă đo n số li u : MSG DB ‘HELLO!$’
Lệnh LEA (Load Effective Address ) LEA destnation, source
Ngắt 21h, hàm số 9 s xuất m t chu i ký tự ra màn hình vớiă đi u ki nă đ a ch hi u d ng c a bi n
chu i ph i trên DX. Có th thực hi nă đi u này b i l nh :
LEA DX,MSG ; đưa địa chỉ offset của biến MSG vào DX
Program Segment Prefix (PSP ) : Phần đầu của đo n Ếhương trình Khi m tă ch
ngătrìnhăđ c n p vào b nhớ máy tính, DOS dành ra 256 byte cho cái gọi là PSP.
PSPă ch áă m t số thông tin v ch ngă trìnhă đangă đ c n p trong b nhớ. Đ choă cácă ch ngă
trình có th truy xuất tới PSP, DOSă đặt số phân đo n c a nó (PSP) trong c DSă vƠă ESă tr ớc khi thựcă thiă ch
ngă trình. K t q a là thanh ghi DS không chứa số đo n c aăđo n số li u c aăch ngă
trình. Đ khắc ph că đi u này, m tă ch
ngă trìnhă cóă chứaă đo n số li u ph iă đ c bắtă đầu b i 2 l nhă sauăđơyă: MOV AX,@DATA MOV DS,AX
đơyă @DATAă lƠă tênă c aă đo n số li uă đ
că đ nhă nghĩaă b i DATA . Assembler s chuy n @DATA thành số đo n .
SauăđơyălƠăch ngă trìnhă hoƠnăch nhă đ xuất chu i ký tự HELLO!
TITLE PGM2: PRINT STRING PROGRAM .MODEL SMALL .STACK 100H .DATA 10
Bài gi ng môn Assembly MSG DB ‘HELLO!$’ .CODE MAIN PROC ; initialize DS MOV AX,@DATA MOV DS,AX ; display message LEA DX,MSG MOV AH,9 INT 21H ; return to DOS MOV AH,4CH INT 21H MAIN ENDP END MAIN
1.12ăCh ngă trìnhăđổi ch th ờng sang ch hoa Chúng ta s vi tă 1ă ch
ngătrìnhăyêuăcầuăng i dùng gõ vào m t ký tự bằng ch th ng. Ch ngă
trình s đổi nó sang d ng ch hoa rồi in ra dòng ti p theo .
TITLE PGM3: CASE COVERT PROGRAM .MODEL SMALL .STACK 100H .DATA CR EQU 0DH LF EQU 0AH
MSG1 DB ‘ENTER A LOWER CASE LETTER:$’
MSG2 DB 0DH,0AH,’IN UPPER CASE IT IS :’
CHAR DB ?,’$’ ; định nghĩa biến CHAR có giá trị ban đầu chưa ;xác định .CODE MAIN PROC ; INITIALIZE DS MOV AX,@DATA MOV DS,AX ;PRINT PROMPT USER
LEA DX,MSG1 ; lấy thông điệp số 1 MOV AH,9
INT 21H ; xuất nó ra màn hình
;nhập vào một ký tự thường và đổi nó thành ký tự hoa
MOV AH,1 ; nhập vào 1 ký tự INT 21H ; cất nó trong AL
SUB AL,20H ; đổi thành chữ hoa và cất nó trong AL 11
Bài gi ng môn Assembly
MOV CHAR, AL ; cất ký tự trong biến CHAR
; xuất ký tự trên dòng tiếp theo
LEA DX, MSG2 ; lấy thông điệp thứ 2 MOV AH,9
INT 21H ; xuất chuỗi ký tự thứ hai, vì MSG2 không kết
;thúc bởi ký tự $ nên nó tiếp tục xuất ký tự có trong biến CHAR ;dos exit MOV AH,4CH INT 21H ; dos exit MAIN ENDP END MAIN 12
Bài gi ng môn Assembly
Ch ngă2ă- Tr ng thái c a vi x lý và các thanh ghi cờ
Trongă ch ngă nƠyă chúng ta s xem xét các thanh ghi c c a vi x lý và nhăh ng c a các l nh
máyă đ n các thanh ghi c nh ăth nào. Tr ng thái c a các thanh ghi là cĕnăcứ đ ch ngătrìnhăcóă
th thực hi n l nh nh y, rẻ nhánh và lặp . M t phần c aă ch
ngă nƠyă s giới thi uă ch ngă trình DEBUG c a DOS .
2.1 Các thanh ghi cờ (Flags register)
Đi m khác bi t quan trọng c a máy tính so với các thi t b đi n t khác là kh nĕngă choă cácă
quy tă đ nh. M t m chă đặc bi t trong CPU có th làm các quy t đ nh này bằngă cáchă cĕnă cứ vào
tr ng thái hi n hành c a CPU. Có m tă thanhă ghiă đặc bi t cho bi t tr ng thái c aă CPUă đóă lƠă thanhă ghi c .
B ng 2.1 cho thấy thanh ghi c 16 bit c a 8086 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF ZF AF PF CF
B ng 2.1 :Thanh ghi c c a 8086
M că đíchă c a các thanh ghi c là ch ra tr ng thái c a CPU .Có hai lo i c là c tr ng thái (status
flags) và c đi u khi n (control flags). C tr ng thái ph n ánh các k t q a thực hi n l nh c a CPU. B ng 2.2 ch ra tên và B ng 2.2 : Các c c a 8086
M i bit trên thanh ghi c ph n ánh 1 tr ng thái c a CPU .
Các cờ tr ng thái (status flags)
Các c tr ng thái ph n ánh k t qu c a các phép toán. Ví d sau khi thực hi n l nh SUB AX,AX
c ZF =1, nghĩaă lƠăk t q a c a phép trừ là zero .
C nhớ (Carry Flag - CF) : CF=1 n u xuất hi n bit nhớ (carry) từ v trí MSB trong khi thực hi n
phép c ng hoặcă cóă bită m n (borrow ) t i MSB trong khi thực hi n phép trừ. Trongă cácă tr ng
h p khác CF=0. C CFăcũng b nhă h
ng b i l nh d ch (Shift) và quay (Rotate) số li u .
C chẳn lẻ (Parity Flag - PF) : PF=1 n u byte thấp c a k t q a có tổng số con số 1 là m t số chẳn
(even parity). PF=0 n u byte thấp là chẳn lẻ lẻ (old parity ). Ví d n u k t q a là FFFEh thì PF=0
C nhớ ph (Auxiliary Carry Flag - AF ) :AF =1 n u có nhớ (m n) từ bit thứ 3 trong phép c ng (trừ) .
C Zero (Zero Flag -ZF) : ZF=1 n u k t q a là số 0 .
C dấu (Sign Flag - SF ) : SF=1 n u MSB c a k t q a là 1 (k t q a là số âm ). SF=0 n u MSB=0 13
Bài gi ng môn Assembly
C tràn (Overflow Flag - OF ) : OF=1 n u x y ra tràn số trong khi thực hi n các phép toán. Sau
đơy chúng ta s phơnă tíchă cácă tr ng h p x y ra tràn trong khi thực hi n tính toán. Hi nă t ng
tràn số liênă quană đ n vi c bi u di n số trong máy tính với m t số h u h n các bit. Các số thập
phân có dấu bi u di n b i 1 byte là -128ăđ n +127. N u bi u di n bằng 1 từ (16 bit) thì các
số thập phân có th bi u di n là -32768ă đ n +32767. Đối với các số không dấu, d i các số có th
bi u di n trong m t từ lƠă 0ă đ n 65535, trong m tă byteă lƠă 0ă đ n 255. N uk t q a c a m t phép
toánăv t ra ngoài dãi số có th bi u di n thì x y ra sự tràn số. Khi có sự tràn số k t q a thuăđ c s b sai . 2.2 Tràn (overflow)
Có 2 lo i tràn số : Tràn có dấu (signed overflow) và tràn không dấu (unsigned overflow). Khi
thực hi n phép c ng số học chẳng h n phép c ng, s x y ra 4 kh nĕngă sauăđơy : 1) không tràn 2) ch tràn dấu 3) ch tràn không dấu
4) tràn c dấu và không dấu
Ví d c a tràn không dấu là phép c ng ADD AX,BX với AX=0FFFFh, BX=0001h .K t q a d ới d ng nh phân là : 1111 1111 1111 1111 0000 0000 0000 0001 10000 0000 0000 0000
N u di n gi i k t q aă d ới d ng không dấu thì k t q aă lƠă đúngă (10000h=65536). Nh ngă k t q a
đư v tă quáă đ lớn c a từ nhớ. Bit 1 (bit nhớ từ v trí MSBă )ă đưă x y ra và k t q a trên AX
=0000h là sai . Sự trƠnă nh ă th là tràn không dấu. N u xem rằng phép c ng trênăđơyălƠăphépăc ng
hai số có dấu thì k t q aă trênă AXă =ă 0000hă lƠă đúng, vì FFFFh = -1 , còn 0001h = +1, doăđóăk t
q a phép c ng là 0. Vậy trongă tr
ng h p này sự tràn dấu không x y ra .
Ví d v sự tràn dấu : gi s AX = BX = 7FFFh , l nh ADD AX,BX s cho k t q aănh ăsauă : 0111 1111 1111 1111 0111 1111 1111 1111 1111 1111 1111 1110 = FFFE h
Bi u di n có dấu và không dấu c a 7FFFh là 3276710. Nh ă vậyă lƠă đối với phép c ng có dấu
cũngănh không dấu thì k t q a vẫn là 32767 + 32767 = 65534. Số nƠy(65534)ăđưăv t ngoài dãi
giá tr mà 1 số 16 bit có dấu có th bi u di n. H nă n a FFFEh = -2. Do vậy sự tràn dấuăđưăx y ra.
Trongă tr ng h p x y ra tràn, CPU s bi u th sự trƠnănh ăsauă:
- CPU s set OF =1 n u x y ra tràn dấu
- CPU s set CF = 1 n u x y ra tràn không dấu Sau khi có tràn, m tă ch
ngătrìnhăh p lý s đ c thực hi năđ s a sai k t q a ngay lập tức. Các
lập trình viên s ch ph i quan tâm tới c OF hoặc CF n u bi u di n số c a họ là có dấu hay không dấu m tă cáchăt ng ứng .
Vậy thì làm th nƠoăđ CPU bi tă đ c có tràn ?
- Tràn không dấu s x y ra khi có m t bit nhớ (hoặc m n ) từ MSB
- Tràn dấu s x yă raătrongă cácătr ng h p sau :
a) Khi c ng hai số cùng dấu, sự tràn dấu x y ra khi tổng có dấu khác với hai toán h ngă banăđầu .
Trong ví d 2, c ng hai số 7FFFh +7FFFh (hai số d
ng )ănh ngă k t q a là FFFFh (số âm) 14
Bài gi ng môn Assembly
b) Khi trừ hai số khác dấu (giốngă nh ă c ng hai số cùng dấu) k t q a ph i có dấu h p lý .N u k t
q a cho dấuă khôngă nh ă mongă đ iă thìă cóă nghĩaă lƠă đưă x y ra sự tràn dấu. Ví d 8000h - 0001h = 7FFFh (số d ngă). Do đó OF=1 .
Vậy làm th nƠoăđ CPU ch ra rằng có tràn ? - OF=1 n u tràn dấu - CF=1 n u tràn không dấu
Làm th nƠoăđ CPU bi t là có tràn ?
- Tràn không dấu x y ra khi có số nhớ (carry) hoặc m n (borrow) từ MSB
- Tràn dấu x y ra khi c ng hai số cùng dấu (hoặc trừ 2 số khác dấu ) mà k t q a với dấu khác với dấuămongă đ i
- Phép c ng hai số có dấu khác nhau không th x y ra sự tràn. Trên thực t CPUădùngăph ngă
pháp sau : c OF=1 n u số nhớ vào và số nhớ ra từ MSB là không phù h p. NghĩaălƠăcóănhớ
vƠoănh ngă khôngă cóănhớ ra hoặc có nhớ raănh ngă khôngă cóănhớ vào .
Cờ đi u khi n (control flags)
Có 3 c đi u khi n trong CPU, đóălƠă :
- C h ớng (Direction Flag = DF) - C bẫy (Trap flag = TF)
- C ngắt (Interrupt Flag = IF) Các c đi u khi nă đ
cădùngăđ đi u khi n ho tăđ ng c a CPU C h ớngă (DF)ă đ
c dùng trong các l nh x lý chu i c a CPU. M că đíchă c aă DFă lƠă dùngă đ
đi u khi nă h ớng mà m t chu iă đ c x lý. Trong các l nh x lý chu i hai thanh ghi DI và SI
đ că dùngă đ đ a ch b nhớ chứa chu i. N u DF=0 thì l nh x lý chu i s tĕng đ a ch b nhớ sao cho chu iă đ
c x lý từ trái sang ph i N u DF=1 thìă đ a ch b nhớ s đ c x lý theo
h ớng từ ph i sang trái .
2.3 Các l nh nhă h ởngă đ cờ nh ă th nào
T i m t th iă đi m, CPU thực hi n 1 l nh, các c lầnă l t ph n ánh k t q a thực hi n l nh. Dĩă
nhiên có m t số l nhă khôngă lƠmă thayă đổi m t c nào c hoặc thay đổi ch 1 vài c hoặc làm cho
m t vài c có tr ng thái khôngă xácă đ nh. Trong phần này chúng ta ch xét nh h ng c a các l nh (đưănghiênă cứu ch
ngă tr ớc ) lên các c nh ăth nào .
B ngă sauăđơyăchoăthấy nhă h
ng c a các l nhă đ n các c : INSTRUCTION AFFECTS FLAGS MOV/XCHG NONE ADD/SUB ALL INC/DEC ALL trừ CF NEG ALL
(CF=1 trừ khi k t q a bằng 0 , OF=1 n u k t q a là 8000H )
Đ thấy rỏ nhăh ng c a các l nh lên các c chúng ta s lấy vài ví d .
Ví d 1ă:ăADDă AX,AXă trongă đóăAX=BX=FFFFh FFFFh + FFFFh 1FFFEh
K t q a chứa trên AX là FFFEh = 1111 1111 1111 1110 SF=1 vì MSB=1 15
Bài gi ng môn Assembly
PF=0 vì có 7 (lẻ) số 1 trong byte thấp c a k t q a ZF=0 vì k t q a khác 0 CF=1 vì có nhớ 1 từ MSB
OF=0 vì dấu c a k t q a giốngă nh ă dấu c a 2 số h ngă banăđầu .
Ví d 2ă:ăADDă AL,BLă trongă đóăAL=ăBL=ă 80h 80h + 80h 100h K t q a trên AL = 00h SF=0 vì MSB=0
PF=1 vì tất c cácăbită đ u bằng 0 ZF=1 vì k t q a bằng 0 CF=1 vì có nhớ 1 từ MSB
OF=1 vì c 2 toán h ng là số ơmă nh ngă k t q a là số d
ngă(có nhớ ra từ MSBănh ngăkhôngă có nhớ vào ) .
Ví d 3ă:ăSUBă AX,BXă trongă đóăAX=8000hă vƠăBX= 0001h 8000h - 0001h 7FFFFh = 0111 1111 1111 1111 SF=0 vì MSB=0
PF=1 vì có 8 (chẳn ) số 1 trong byte thấp c a k t q a ZF=0 vì k t q a khác 0 CF=0ăvìăkhôngă cóăm n
OF=1 vì trừ m t số âm cho 1 số d ngă (tức là c ng
2 số âm ) mà k t q a là m t số d ngă.
Ví d 4ă:ăINCăALătrongă đóăAL=FFh
K t q a trên AL=00h = 0000 0000 SF=0 vì MSB=0 PF=1 ZF=1 vì k t q a bằng 0 CF không b nh h
ng b i l nh INC mặc dù có nhớ 1 từ MSB
OF=0 vì hai số khác dấuăđ c c ng với nhau (có số
nhớ vƠoă MSBăvƠă cũngă cóăsố nhớ ra từ MSB) Ví d 5: MOV AX,-5 K t qu trên BX = -5 = FFFBh Không có c nào nhă h ng b i l nh MOV
Ví d 6:ăNEGăAXătrongă đóăAX=8000h 8000h =1000 0000 0000 0000 bù 1 =0111 1111 1111 1111 +1 1000 0000 0000 0000 = 8000h K t q a trên AX=8000h SF=1 vì MSB=1 16