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!

BÀI GING MÔN
HP NG
Qung Ngãi - 2015
Bài ging môn Assembly
Mc lc
Chngă1ă- CăBN V HP NG ............................................................................................. 1
1.1 Cú pháp lnh hp 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ngc toán hng (operand(s) field) ....................................................................... 1
1.1.4ăTrng chú thích (comment field) ................................................................................. 2
1.2 Các kiu s liuătrongăchngătrìnhăhp ng........................................................................ 2
1.2.1 Các s ............................................................................................................................. 2
1.2.2 Các ký t ........................................................................................................................ 2
1.3 Các bin (variables) .............................................................................................................. 3
1.3.1. Bin byte ....................................................................................................................... 3
1.3.2 Bin t ............................................................................................................................ 3
1.3.3 Mng (arrays) ................................................................................................................. 3
1.4 Các hng (constants) ............................................................................................................. 4
1.5 Các lnhăcăbn ..................................................................................................................... 5
1.5.1 Lnh MOV và XCHG .................................................................................................... 5
1.5.2 Lnh ADD, SUB, INC, DEC ......................................................................................... 5
1.5.3 Lnh NEG (negative) ..................................................................................................... 6
1.6 Chuyn ngôn ng cp cao tnh 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 Cu trúc ca mtăchngătrìnhăhp ng ............................................................................... 7
1.7.1 Các kiu b nh (memory models) ................................................................................ 7
1.7.2ăĐon s liu ................................................................................................................... 7
1.7.3ăĐonăngĕnăxp ............................................................................................................... 7
1.7.4ăĐan ......................................................................................................................... 7
1.8 Các lnh vào ra...................................................................................................................... 8
1.8.1 Lnh INT 21h................................................................................................................. 8
1.9ăChngătrìnhăđu tiên ........................................................................................................... 9
1.10 To ra và chy mtăchngătrìnhăhp ng ........................................................................ 10
1.11 Xut mt chui ký t ........................................................................................................ 10
1.12ăChngătrìnhăđi ch thng sang ch hoa...................................................................... 11
Bài ging môn Assembly
Chngă2ă- Trng thái ca vi x lý và các thanh ghi c ............................................................... 13
2.1 Các thanh ghi c (Flags register) ........................................................................................ 13
2.2 Tn (overflow) ................................................................................................................... 14
2.3 Các lnh nhăhngăđ c nhăth nào ............................................................................... 15
Chngă3ă- CÁC LNHăĐIU KHIN ....................................................................................... 18
3.1 Ví d v lnh nhy .............................................................................................................. 18
3.2 Nhyăcóăđiu kin ............................................................................................................... 18
3.3 Lnh JMP ............................................................................................................................ 21
3.4 Cu trúc ca ngôn ng cp cao ........................................................................................... 21
3.4.1 Cu trúc r nhánh ......................................................................................................... 21
4.3.2 Cu trúc lp .................................................................................................................. 25
3.5 Lp tnh vi cu trúc cp cao............................................................................................. 26
Chngă4ă- CÁC LNH LOGIC, DCH VÀ QUAY ................................................................... 31
4.1 Các lnh logic...................................................................................................................... 31
4.1.1 Lnh AND,OR và XOR ............................................................................................... 31
4.1.2 Lnh NOT .................................................................................................................... 33
4.1.3 Lnh TEST ................................................................................................................... 33
4.2 Lnh SHIFT ........................................................................................................................ 33
4.2.1 Lnh dch trái (left shift ) ............................................................................................. 34
4.2.2 Lnh dch phi (Right Shift ) ....................................................................................... 34
4.3 Lnh quay (Rotate).............................................................................................................. 35
4.4 Xut nhp s nh phân và s hex ........................................................................................ 36
4.4.1 Nhp s nh phân ......................................................................................................... 36
4.4.2 Xut s nh phân .......................................................................................................... 37
4.4.3 Nhp s HEX ............................................................................................................... 37
4.4.4 Xut s HEX ................................................................................................................ 38
Chngă5ă- NGĔNăXP VÀ TH TC ...................................................................................... 40
5.1ăNgĕnăxp ............................................................................................................................. 40
5.2ăngădng ca stack............................................................................................................. 42
5.3 Th tc (Procedure) ............................................................................................................ 43
5.4 CALL & RETURN ............................................................................................................. 44
5.5 Ví d v th tc ................................................................................................................... 46
Chngă6ă- LNH NHÂN VÀ CHIA........................................................................................... 48
6.1 Lnh MUL và IMUL........................................................................................................... 48
Bài ging môn Assembly
6.2ăngădngăđnăgin ca lnh MUL và IMUL ..................................................................... 49
6.3 Lnh DIV và IDIV .............................................................................................................. 50
6.4 M rng du ca s b chia ................................................................................................. 51
6.5 Th tc nhp xut s thp phân .......................................................................................... 51
Chngă7ă- MNG VÀ CÁC CH Đ ĐA CH ....................................................................... 58
7.1 Mng mt chiu .................................................................................................................. 58
7.2 Các ch đ đa ch (addressing modes) ............................................................................... 59
7.2.1 Ch đ đa ch gián tip bng thanh ghi....................................................................... 59
7.2.2 Ch đ đa ch ch s vƠăcăs...................................................................................... 61
7.2.5 Truy xutăđon stack .................................................................................................... 65
7.3 Sp xp s liu trên mng ................................................................................................... 65
7.4 Mng 2 chiu....................................................................................................................... 67
7.6ăngădngăđ tính trung bình ............................................................................................... 69
7.7 Lnh XLAT......................................................................................................................... 71
1
Chng 1 - CăBN V HP NG
Trongă chngă nƠyă s gii thiu nhng nguyên tắcă chungă đ to ra, dch và chy mtă chngă
trình hp ng tn máy nh. Cu trúc ng pháp ca lnh hp ng trongă giáoătnhănƠyăđc tnh
bày theo Macro Assembler (MASM) da trên CPU 8086 .
1.1 Cú pháp lnh hp ng
Mtă chngă trìnhă hp ng bao gm mt lot các mnhă đ (statement)ă đc vit liên tip nhau,
mi mnhă đ đc vit trên 1 dòng. Mt mnhă đ có th là :
- mt lnh (instruction)ă :ăđc tnh biên dch (Assembler =ASM) chuyn thành mã máy.
- mt ch dn ca Assembler (Assembler directive) : ASM không chuyn thành mã máy
Các mnhă đ ca ASM gồmă 4ătrng :
Name Operation Operand(s) Comment
cácătrng cách nhau ít nht là mt ký t trng hoc mt ký t TAB
ví d lnhă đ sau :
START : MOV CX,5 ; khơ to thanh ghi CX
SauăđơyălƠămt ch dn ca ASM :
MAIN PROC ; to mt th tc có tên là MAIN
1.1.1 Trưng Tên (Name Field)
Trngă tênă đc dùng cho nhãn lnh, tên th tc và tên bin. ASM s chuynă tênă thƠnhă đa ch
b nh. Tên th dài t đn 31 t. Trong tên cha các t t a-z, các s các ký t đặc
bit sau : ? ,@, _, $ và du. Khôngăđc phép t trng trong phn tên. Nu trong tên
t. thì nó phi là t đầu tiên. Tênă khôngă đc bắtă đầu bng mt s. ASM không phân bit
gia ký t vită thng và vit hoa .
SauăđơyălƠăcácăvíăd v n hp l và không hp l trong ASM .
Tên hp l Tên không hp 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 vi 1 lnhă trng toán t cháă kỦă hiu (symbol) ca mã phép toán (operation code =
OPCODE) .ASM s chuyn hiu mã phép toán thành mã máy. Thôngă thng hiu mã
phép toán mô t chnĕngă ca phép toán, ví d ADD, SUB, INC, DEC, INT ...
Đi vi ch dn ca ASM, trng toán t cháămt opcode gi (pseudo operation code = pseudo-
op). ASM không chuyn pseudo-op thành mã máy mà hng dn ASM thc hin mt vic gìăđóă
ví d to ra mt th tc, đnhă nghĩ các bin ...
1.1.3 Trưng các toán hng (operand(s) field)
Trong mt lnhă trng toán hng ch ra các s liu tham gia trong lnhă đó. Mt lnh th
không có toán hng, có 1 hoc 2 toán hng. Ví d :
NOP ; không có toán hng
INC AX ; 1 toán hng
ADD WORD1,2 ; 2 toán hng cng 2 vi ni dung ca t nh WORD1
Bài ging môn Assembly
2
Trong các lnh 2 toán hng toán hngă đầu là toán hngă đíchă (destination operand). Toán hng
đíchă thng làthanh ghi hoc v trí nh dùngă đ luă tr kt qu. Toán hng th hai là toán hng
ngun. Toán hng nguồnă thng không b thay đổi sau khi thc hin lnh . Đi vi mt ch dn
ca ASM, trng toán hng cha mt hoc nhiu thông tinămƠăASMădùngăđ thc thi ch dn .
1.1.4 Trưng chú thích (comment field)
Trng chú thích là mt tu chn ca mnhăđ trong ngôn ng ASM. Lp trìnhăviênădùngătrng
chúă thíchă đ thuyt minh v u lnh. Điu này là cn thit vì ngôn ng ASM là ngôn ng cp
thp (low level) vì vy s rt khó hiuă chng trình nuă nóă khôngă đc chú thích mtăchăđầy
đ và r ràng. Tuy nhiên không nên cóă chúă thíchă đối vi mi dòng c chngă trình, k c
nnhng lnhă mƠăỦănghĩ ca nóăđưărất r rƠngănhă:
NOP ; không làm chi c
Ngi ta dùng du chm phẩyă(;đ bắtăđầuă trng chú thích . ASMăngăchphép dùng toàn b
mtă dòngă chchúăthíchăđ to mt khong trốngăngĕnăcáchăcácăphn khác nhau cu chngătrìnhă
,ví d :
;
; khi to các thanh ghi
;
MOV AX,0
MOV BX,0
1.2 Các kiu s liuătrongăchngătrìnhăhp ng
CPU ch làm vic vi các s nh phân. Vì vy ASM phi chuyn tt c các loi s liu thành s
nh phân. Trong mtă chngă trìnhă hp ng cho phép biu din s liuă di dng nh phân, thp
phân hoc thp lc phân và thm chí là c ký t na .
1.2.1 Các s
Mt s nh phân là mt dãy các bit 0 và 1 va 2phi kt thúc bng h hoc H
Mt s thp phân là mt y các ch thp phân và kt thúc bi d hoc D (có th không cn)
Mt s hex phi bắtăđầu bi 1 ch s thp phân và phi kt thúc bi h hoc H .
SauăđơyălƠăcácăbiu din s hp l và không hp l trong ASM :
S Loi
10111 thp phân
10111b nh phân
64223 thp phân
-2183D thp phân
1B4DH hex
1B4D s hex không hp l
FFFFH s hex không hp l
0FFFFH s hex
1.2.2 Các ký t
Ký t và mt chui các t phiăđcăđóngăgia hai du ngoặcăđnăhoặc hai du ngoc p. Ví
d ‘A’ă vƠă HELLO. Các t đuă đc chuyn thành mã ASCII bi ASM. D đóătrongămt
chngă trìnhă ASMăs xemăkhaiă báoă‘AăvƠă41hă(mưăASCIIăca A) là ging nhau .
Bài ging môn Assembly
3
1.3 Các bin (variables)
Trong ASM bină đóngă vaiă tròă nhă trongă ngônă ng cp cao. Mi bin mt loi d liu và nó
đc gán mtăđa ch b nh sau khi dchăchngătrình. Bng sau đơyălit các toán t gi dùng
đ đnhă nghĩ cácăloi s liu .
PSEUDO-OP STANDS FOR
DB define byte
DW define word (doublebyte)
DD define doubeword (2 t liên tip)
DQ define quadword (4 t liên tip )
DT define tenbytes (10 bytes liên tip)
1.3.1. Biến byte
Ch dn cASMăđ đnhă nghĩ bin byte dngănhăsauă :
NAME DB initial_value
Ví d :
ALPHA DB 4
Ch dn này s gán tên ALPHA cho mt byte nh trong b nh mà giá tr banăđầu ca nó là 4.
Nu giá tr cbytlƠăkhôngă xácăđnhă thìăđặt du chm hi (?) vào giá tr banăđầu. d :
BYT DB ?
Đi vi bin byte vùng giá tr kh ă mƠănóăluătr đc là -128ăđn 127ăđối vi s du và 0
đnă255ăđối vi s không du .
1.3.2 Biến t
Ch dn cASMăđ đnhă nghĩ mt bin t nhăsauă:
NAME DW initial_value
Ví d :
WRD DW -2
ngă cóă th dùng dấuă đ thay th cho bin t giá tr không xác đnh. Vùng giá tr ca bin
t là -32768ăđn 32767ăđối vi s có dấuăvƠă0ăđn 56535 đối vi s không du .
1.3.3 Mng (arrays)
Trong ASM mt mng là mt lot các byte nh hoc t nh liên tip nhau. Ví d đ đnhă nghĩ
mt mng 3 byte gi là B_ARRAY mà giá tr banăđầu ca nó là 10h,20h và 30h chúng ta th
vit :
B_ARRAY DB 10h,20h,30h
B_ARRAYă lƠănăđcăgánăchbyteăđầu tiên
B_ARRAY+1 là tên ca byte th hai
B_ARRAY+2 là tên ca byte th ba
NuăASMăgánăđa ch offset là 0200h cho mng B_ARRAY thì ni 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ĩ mt mng 4 phn t có tên là W_ARRAY:
W_ARRAY DW 1000,40,29887,329
Bài ging môn Assembly
4
Gi s mng bắtăđầu ti 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 thp và byte cao ca mt t
Đôiă khiă chúngă taă cần truy xut ti byte thp và byte cao ca mt bin t. Gi s chúngătđnh
nghĩ :
WORD1 DW 1234h
Byte thp ca WORD1 cha 34h, còn byte cao ca WORD1 cha 12h
Ký hiuă đa ch ca byte thp là WORD1 còn ký hiuă đa ch ca byte cao là WORD1+1 .
Chui các ký t (character strings)
Mt mng các mã ASCII có th đcăđnhă nghĩ bng mt chui c ký t
Ví d :
LETTERS DW 41h,42h,43h
tngă đngăvi
LETTERS DW ‘ABC ’
Bên trong mt chui, ASM s phân bit ch hoa và ch thng. Vì vy chui abc’ă s đc
chuyn thành 3 bytes : 61h ,62h và 63h. TrongăASMăngăcóăth t hp các t và các s trong
mtăđnhă nghĩa. d :
MSG DB ‘HELLO’, 0AH, 0DH, ‘$
tngă đngăvi
MSG DB 48H,45H,4CH,4Ch,4FH,0AH,0DH,24H
1.4 Các hng (constants)
Trong mtă chngă trìnhă cácă hng th đcă đặt tên nh ch dn EQU (equates). pháp ca
EQU là :
NAME EQU constant
ví d :
LF EQU 0AH
sau khi khaiă báoă trênă thìă L đ dùngă thayă ch 0Ahă trongă chngă trình. vy ASM s
chuyn các lnh :
MOV DL,0Ah
và MOV DL,LF
thành cùng mt mã máy .
ngă cóăth dùngăEQUăđ đnhă nghĩ mt chui, ví d:
PROMPT EQU ‘TYPEă YOURă NAMEă’
Sau khi khai báo này, thay cho
MSG DB ‘TYPE YOUR NAME
chúng ta có th vit
MSG DB PROMPT
Bài ging môn Assembly
5
1.5 Các lnhăcăbn
CPUă 8086ă cóă hƠngă tmă lnh, trongă chngă nƠyă ,chúngă taă s xem xét 7 lnh đnă gin ca 8086
mƠă chúngă thngă đc dùng vi các thao tác di chuyn s liu và thc hin các phép toán s
hc.
Trong phầnăsauă đơy, WORD1 và WORD2 là các bin t, BYTE1 và BYTE2 là các bin byte .
1.5.1 Lnh MOV và XCHG
Lnhă MOVădùngă đ chuyn s liu gia các thanh ghi, gia 1 thanh ghi và mt v t nh hoặcăđ
di chuyn trc tip mt s đn mt thanh ghi hoc mt v trí nh. Cú pháp ca lnh MOV là :
MOV Destination, Source
SauăđơyălƠăvƠiă víăd :
MOV AX,WORD1 ; ly ni dung ca t nh WORD1 đưa vào thanh ghi AX
MOV AX,BX ; AX ly ni dung ca BX, BX không thay đi
MOV AH,’A’ ; AX lấy giá tr 41h
Bng sau cho thấyă cácătrng hp cho phép hoc cm ca lnh MOV
Lnh XCHG (Exchange)ă dùngă đ traoă đổi ni dung ca 2 thanh ghi hoc ca mt thanh ghi và
mt v trí nh. Ví d :
XCHG AH,BL
XCHG AX,WORD1 ; trao đổi ni dung ca thanh ghi AX t nh
WORD1.
ngă nhălnh MOV có mt s hn ch đối vi lnhă XCHGănhăbng sau :
1.5.2 Lnh ADD, SUB, INC, DEC
Lnhă AD vƠă SUBă đcă dùngă đ cng và tr ni dung ca 2 thanh ghi, ca mt thanh ghi và
mt v trí nh, hoc cng (tr) mt s vi (khi) mt thanh ghi hoc mt v trí nh. Cú pháp là :
ADD Destination, Source
SUB Destination, Source
Ví d :
ADD WORD1, AX
ADD BL, 5
Bài ging môn Assembly
6
SUB AX,DX ; AX=AX-DX
Vì lý do k thut, lnhă ADDă vƠăSUBăngă b mt s hn ch nhăbng sau:
Vic cng hoc tr trc tip gia 2 v trí nh lƠă khôngă đc phép. Đ gii quyt vấnă đ này
ngi ta phi di chuyn byte (t ) nh đn mtăthanhăghiăsauăđó mi cng hoc tr thanh ghi này
vi mt byte (t ) nh khác. d:
MOV AL, BYTE2
ADD BYTE1, AL
Lnh INC (incremrent)ă đ cng thêm 1 vào ni dung ca mt thanh ghi hoc mt v trí nh.
Lnh DEC (decrement)ă đ gim bt 1 khi mt thanh ghi hoc 1 v t nh. pháp ca chúng
là:
INC Destination
DEC Destination
Ví d :
INC WORD1
INC AX
DEC BL
1.5.3 Lnh NEG (negative)
Lnhă NEGăđ đổi du (ly bù 2 ) ca mt thanh ghi hoc mt v trí nh. pháp :
NEG destination
Ví d : NEG AX ;
Gi s AX=0002h sau khi thc hin lnh NEG AX thì AX=FFFEh
LUăă: 2 toán hng trong các lnhă trênăđơyăphi cùng loi (cùng là byte hoc t )
1.6 Chuyn ngôn ng cp cao thành ngôn ng ASM
Gi s A và B là 2 bin t . Chúng ta s chuyn các mnhăđ sau trong ngôn ng cp 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
Bài ging môn Assembly
7
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 Cu trúc ca mtăchngătrìnhăhp ng
Mtă chngă trìnhă ngônă ng máy bao gm mã (code), s liu (data) và ngĕn xp (stack ). Mi
mt phn chim mtă đon b nh. Mi mtă đonă chngă tnhă lƠ đc chuyn thành mtă đon
b nh bi ASM .
1.7.1 Các kiu b nh (memory models)
Đ ln ca mã và s liu trong mtă chngă tnhă đcă quyă đnh bi ch dn MODEL nhm xác
đnh kiu b nh dùng viăchngă trình. Cú pháp ca ch dn MODELă nhăsauă:
.MODEL memory_model
Bng sau cho thy các kiu b nh :
Model
Description
Small
code và data nằmătrongă1ăđon
Medium
code nhiuăhnă1ăđonă,ădataătrongă1ăđon
Compact
data nhiuăhnă1ăđọană,ăcodeătrongă1ăđon
Large
code và dayta lớnăhnă1ăđon , array không qúa 64KB
Huge
code ,data ln hớnă1ăđon , array lớnăhnă64KB
1.7.2 Đoạn s liu
Đon s liu c chngă trìnhăcháăcácăkhaiăbáoăbin, khai báo hằngă...ăĐ bắtăđầuăđon s liu
chúng ta dùng ch dn DATA vớiă cúăphápănhăsauă:
.DATA
;khai báo tên các bin, hng 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 đíchă ca vică khaiă báoă đonă ngĕnă xp là dành mt vùng nh (vùng satck)ă đ luă tr cho
stack. Cú pháp ca lnhă nhăsauă:
.STACK size
nuă khôngă khaiă báoăsiz 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ălnh cchngă tnh. Bắtăđầuăđon mã bng ch dn CODEănhăsauă:
.CODE
Bênă trongă đon mã c lnhăthngăđc t chc thành th tc (procedure) mà cu trúc ca mt
th tnhăsauă:
Bài ging môn Assembly
8
name PROC
; body of the procedure
name ENDP
SauăđơyălƠăcâú trúc ca mtăchngă trìnhă hp ng mà phn CODE là th tc tên là MAIN
.MODEL SMALL
.STACK 100h
.DATA
; định nghĩa số liu ti đây
.CODE
MAIN PROC
;thân ca th tc MAIN
MAIN ENDP
; các th tc khác nếu
END MAIN
1.8 Các lnh vào ra
CPU thông tin vi các ngoi vi thông qua các cng IO. Lnh IN và OUT ca CPU cho phép truy
xuấtă đn các cng này. Tuy nhiên hu ht các ng dng không dùng lnh IN và OUT vì 2 lý do:
- cácăđa ch cổngă thayăđi tu theo loi máy nh
- th lp trình cho các IO d ngă hn nh cácă chngă tnhă conă (routine)ă đc cung
cp bi các hãng ch to máy nh
2 loiă chngătnhăphc v IO là : các routine ca BIOS (Basic Input Output System) và các
routine ca DOS .
Lnh INT (interrupt)
Đ gọiăcácăchngă trìnhă conăca BIOS và DOS có th dùng lnh INT vi
phápănhăsauă:
INT interrupt_number
đơyă interrupt_numberă lƠă mt s mà nó ch đnh mt routine. Ví d INT 16h gi routine thc
hin vic nhp s liu t Keyboard .
1.8.1 Lnh INT 21h
INTă 21hă đcă dùngă đ gi mt s ln các các hàm (function) ca DOS. Tu theo giá tr mà
chúngă tđặt vào thanh ghi AH, INT 21h s gi chy mt routine tngă ng .
Trong phn 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
Đ gi routine này thc hin c lnh sau :
MOV AH,1 ; input key function
INT 21h ; ASCII code in AL and display character on the screen
Bài ging môn Assembly
9
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 lnh sau s in lên màn hình du ?
MOV AH,2
MOV DL,’?’ ; character is ‘?
INT 21H ; display character
HƠmă ngă cóă th dùngă đ thc hin ch nĕngă điu khin .Nuă DLăcháăkỦ t điu khin thì
khi gi INT 21h, ký t điu khin s đc thc hin .
Các ký t điu khină thng 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 vit mtă chngă tnhă hp ng nhằmă đọc mt t t bàn phím vƠăinănóătrênăđầu
dòng mi .
TITLE PGM1: ECHO PROGRAM
.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
; display du nhc
MOV AH,2
MOV DL,’?’
INT 21H
; nhp 1 ký t
MOV AH,1 ; hàm đọc ký t
INT 21H ; ký t được đưa vào AL
MOV BL,AL ; ct ký t trong BL
; nhảy đến dòng mi
MOV AH,2 ; hàm xut 1 ký t
MOV DL,0DH ; ký t carriage return
INT 21H, thc hin carriage return
MOV DL,0AH ; ký t line feed
INT 21H ; thc hin line feed
; xut ký t
Bài ging môn Assembly
10
MOV DL,BL ; đưa ký t vào DL
INT 21H ; xut 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 To ra và chy mtăchngătrìnhăhp ng
Tham kho ch s dngă chngă trìnhă Emu8086ă trênăinternet.
1.11 Xut mt chui ký t
Trongă chngă trìnhă PGM1ă trênă đơyă chúngă taă đưă dùngăINTă 21HăhƠmăvƠăđ đọc và xut mt
ký t. Hàm 9 ngt 21Hth dùngăđ xut mt chui ký t .
INT 21H, Function 9 : Display a string
Input : DX=offset address of string
Thstringă mustă enwithă aă‘$’ăcharacter
Ký t $ cui chui s khôngă đc in lên màn hình. Nu chui cha t điu khin thì
chnĕngă điu khină tngă ng s đc thc hin .
Chúng ta s vită chngă trìnhă ină lênă mƠnă hìnhă chuiă HELLO!”. Thông đipă HELLOă đc
đnhă nghĩ nhăsauătrongă đon s liu :
MSG DB ‘HELLO!$’
Lnh LEA (Load Effective Address )
LEA destnation, source
Ngt 21h, hàm s 9 s xut mt chui t ra màn hình viăđiu kinăđa ch hiu dng ca bin
chui phi trên DX. Có th thc hină điu này bi lnh :
LEA DX,MSG ; đưa đa ch offset ca biến MSG vào DX
Program Segment Prefix (PSP ) : Phần đầu của đon Ếhương tnh
Khi mtăchngătnhăđc np vào b nh máy nh, DOS dành ra 256 byte cho cái gi là PSP.
PSPă cháă mt s thông tin v chngă trìnhă đangă đc np trong b nh. Đ ch cácă chngă
trình th truy xut ti PSP, DOSă đt s phân đon ca nó (PSP) trong c DvƠăEtrớc khi
thựcă thiă chngă tnh. Kt qa là thanh ghi DS không cha s đon cđon s liu cchngă
trình. Đ khc ph điu này, mtă chngă tnhă cóă ch đon s liu phiă đc bắtă đầu bi 2
lnhă sauăđơyă:
MOV AX,@DATA
MOV DS,AX
đơyă @DATAă lƠă tênă c đon s liuă đcă đnhă nghĩ bi DATA . Assembler s chuyn
@DATA thành s đon .
SauăđơyălƠăchngă trìnhă hoƠnăchnhă đ xut chui ký t HELLO!
TITLE PGM2: PRINT STRING PROGRAM
.MODEL SMALL
.STACK 100H
.DATA
Bài ging môn Assembly
11
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ăChngă trìnhăđi ch thờng sang ch hoa
Chúng ta s vităchngătnhăyêuă cầuăngi dùng gõ vào mt t bng ch thng. Chngă
trình s đổi nó sang dng ch hoa ri in ra dòng tip 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 ; xut nó ra màn hình
;nhp vào mt ký t thường và đổi nó thành ký t hoa
MOV AH,1 ; nhp vào 1 ký t
INT 21H ; ct nó trong AL
SUB AL,20H ; đổi thành ch hoa và ct nó trong AL
Bài ging môn Assembly
12
MOV CHAR, AL ; ct ký t trong biến CHAR
; xut 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 ; xut chui ký t th hai, vì MSG2 không kết
;thúc bi ký t $ nên nó tiếp tc xut ký ttrong biến CHAR
;dos exit
MOV AH,4CH
INT 21H ; dos exit
MAIN ENDP
END MAIN
Bài ging môn Assembly
13
Chngă- Trng thái ca 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 ca vi x lý và nhăhng ca các lnh
máyă đn các thanh ghi c nhăth nào. Trng thái ca các thanh ghi là cĕnă cứ đ chngătnhă cóă
th thc hin lnh nhy, r nhánh và lp . Mt phn c chngă nƠyă s gii thiuă chngă trình
DEBUG ca DOS .
2.1 Các thanh ghi c (Flags register)
Đim khác bit quan trng ca máy nh so vi các thit b đin t khác là kh nĕngă ch cácă
quytă đnh. Mt mchă đặc bit trong CPU th làm các quyt đnh này bằngăcáchăcĕnăc vào
trng thái hin hành ca CPU. mtăthanhăghiăđc bit cho bit trng thái cCPUăđóălƠăthanhă
ghi c .
Bng 2.1 cho thy thanh ghi c 16 bit ca 8086
11
10
9
8
7
6
5
4
3
2
1
0
OF
DF
IF
TF
SF
ZF
AF
PF
CF
Bng 2.1 :Thanh ghi c ca 8086
Mđíchăca các thanh ghi c là ch ra trng thái ca CPU .Có hai loi c là c trng thái (status
flags) và c điu khin (control flags). C trng thái phn ánh các kt qa thc hin lnh ca
CPU. Bng 2.2 ch ra tên và
Bng 2.2 : Các c ca 8086
Mi bit trên thanh ghi c phn ánh 1 trng thái ca CPU .
Các c trng thái (status flags)
Các c trng thái phn ánh kt qu ca các phép toán. Ví d sau khi thc hin lnh SUB AX,AX
c ZF =1, nghĩ lƠăkt qa ca phép tr là zero .
C nh (Carry Flag - CF) : CF=1 nu xut hin bit nh (carry) t v trí MSB trong khi thc hin
phép cng hoặcă cóă bi mn (borrow ) ti MSB trong khi thc hin phép tr. Trongăcácătrng
hp khác CF=0. C CFăcũng b nhă hng bi lnh dch (Shift) và quay (Rotate) s
liu .
C chn l (Parity Flag - PF) : PF=1 nu byte thp ca kt qa tng s con s 1 là mt s chn
(even parity). PF=0 nu byte thp là chn l l (old parity ). Ví d nu kt qa là FFFEh thì PF=0
C nh ph (Auxiliary Carry Flag - AF ) :AF =1 nu nh (mn) t bit th 3 trong phép cng
(tr) .
C Zero (Zero Flag -ZF) : ZF=1 nu kt qa là s 0 .
C du (Sign Flag - SF ) : SF=1 nu MSB ca kt qa là 1 (kt qa là s âm ). SF=0 nu MSB=0
Bài ging môn Assembly
14
C tràn (Overflow Flag - OF ) : OF=1 nu xy ra tn s trong khi thc hin các phép toán. Sau
đơy chúng ta s phơnă chă trng hp xy ra tràn trong khi thc hin nh toán. Hină tng
tràn s liênă quană đn vic biu din s trong máy tính vi mt s hu hn c bit. Các s thp
phân có du biu din bi 1 byte là -128ăđn +127. Nu biu din bng 1 t (16 bit) thì các
s thp phân th biu din là -32768ăđn +32767. Đối vi c s không du, di c s th
biu din trong mt t lƠă đn 65535, trong mtă byt lƠă đn 255. Nukt qa ca mt phép
toánă vt ra ngoài dãi s th biu din thì xy ra s tràn s. Khi s tràn s kt qa thuăđc
s b sai .
2.2 Tràn (overflow)
2 loi tràn s : Tràn du (signed overflow) và tràn không du (unsigned overflow). Khi
thc hin phép cng s hc chng hn phép cng, s xy ra 4 kh nĕngă sauăđơy :
1) không tràn
2) ch tràn du
3) ch tràn không du
4) tn c du và không du
Ví d ca tràn không du là phép cng ADD AX,BX vi AX=0FFFFh, BX=0001h .Kt qa
dới dng nh phân là :
1111 1111 1111 1111
0000 0000 0000 0001
10000 0000 0000 0000
Nu din gii kt q di dng không du thì kt qlƠăđúngă (10000h=65536). Nhngăkt qa
đư vtă quáă đ ln ca t nh. Bit 1 (bit nh t v trí MSBă đưă xy ra và kt qa trên AX
=0000h là sai . S trƠnă nhăth là tràn không du. Nu xem rng phép cng tnăđơyălƠăphépăcng
hai s du thì kt qtrênăAXă0000hălƠăđúng, vì FFFFh = -1 , còn 0001h = +1, doăđóăkt
qa phép cng là 0. Vy trongă trng hp này s tràn du không xy ra .
Ví d v s tràn du : gi s AX = BX = 7FFFh , lnh ADD AX,BX s cho kt qnhăsauă:
0111 1111 1111 1111
0111 1111 1111 1111
1111 1111 1111 1110 = FFFE h
Biu din du và không du ca 7FFFh là 3276710. Nhă vậyă lƠă đối vi phép cng du
ngănh không du thì kt qa vn là 32767 + 32767 = 65534. S nƠy(65534)ăđưăvt ngoài dãi
giá tr mà 1 s 16 bit du có th biu din. Hnă na FFFEh = -2. Do vy s tn dấuăđưăxy ra.
Trongă trng hp xy ra tràn, CPU s biu th s tnănhăsauă:
- CPU s set OF =1 nu xy ra tràn du
- CPU s set CF = 1 nu xy ra tràn không du
Sau khi tn, mtăchngătrìnhăhp lý s đc thc hinăđ sa sai kt qa ngay lp tc. Các
lp trình viên s ch phi quan tâm ti c OF hoc CF nu biu din s ca h là du hay
không du mtăcáchătng ng .
Vy thì làm th nƠoăđ CPU bităđc có tràn ?
- Tn không du s xy ra khi có mt bit nh (hoc mn ) t MSB
- Tn du s xyăraătrongă cácătrng hp sau :
a) Khi cng hai s cùng du, s tn du xy ra khi tng có du khác vi hai toán hngă banăđu .
Trong ví d 2, cng hai s 7FFFh +7FFFh (hai s dng nhngă kt qa là FFFFh (s âm)
Bài ging môn Assembly
15
b) Khi tr hai s khác du (giốngănhăcng hai s cùng du) kt qa phi du hp lý .Nu kt
qa cho dấuă khôngă nhă mongă điă thìă cóănghĩlƠăđưăxy ra s tràn du. Ví d 8000h - 0001h =
7FFFh (s dngă). Do đó OF=1 .
Vy làm th nƠoăđ CPU ch ra rng có tràn ?
- OF=1 nu tràn du
- CF=1 nu tràn không du
Làm th nƠoăđ CPU bit là có tn ?
- Tn không du xy ra khi có s nh (carry) hoc mn (borrow) t MSB
- Tn du xy ra khi cng hai s cùng du (hoc tr 2 s khác du ) mà kt qa vi du khác
vi dấuămongă đi
- Phép cng hai s du khác nhau không th xy ra s tn. Trên thc t CPUădùngăphngă
pháp sau : c OF=1 nu s nh vào và s nh ra t MSB là không phù hp. NghĩlƠăcóănh
vƠoănhngă khôngă cóănh ra hoc có nh raănhngă khôngă cóănh vào .
C điu khin (control flags)
Có 3 c điu khin trong CPU, đóălƠă:
- C hng (Direction Flag = DF)
- C by (Trap flag = TF)
- C ngt (Interrupt Flag = IF)
Các c điu khină đcădùngăđ điu khin hotăđng ca CPU
C hngă (DF)ă đc dùng trong các lnh x lý chui ca CPU. M đíchă c D lƠă dùngă đ
điu khină hng mà mt chuiă đc x . Trong c lnh x lý chui hai thanh ghi DI và SI
đcă dùngă đ đa ch b nh cha chui. Nu DF=0 thì lnh x lý chui s tĕng đa ch b nh
sao cho chuiă đc x lý t trái sang phi Nu DF=1 thìă đa ch b nh s đc x lý theo
hng t phi sang trái .
2.3 Các lnh nhởngă đ c nhăth nào
Ti mt thiă đim, CPU thc hin 1 lnh, c c lầnă lt phn ánh kt qa thc hin lnh. Dĩă
nhiên mt s lnhă khôngă lƠmă thayăđi mt c nào c hoc thay đổi ch 1 vài c hoc làm cho
mt vài c có trng thái khôngă xácă đnh. Trong phn này chúng ta ch xét nh hng ca c
lnh (đưănghiênă cứu chngă trớc ) lên các c nhăth nào .
Bngă sauăđơyăchthy nhăhng ca 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 kt qa bng 0 ,
OF=1 nu kt qa là 8000H )
Đ thy r nhăhng ca c lnh lên các c chúng
ta s ly vài ví d .
Ví d 1ă:ăADDăAX,Atrongă đóăAX=BX=FFFFh
FFFFh
+ FFFFh
1FFFEh
Kt qa cha trên AX là FFFEh = 1111 1111 1111 1110
SF=1 vì MSB=1
Bài ging môn Assembly
16
PF=0 vì có 7 (l) s 1 trong byte thp ca kt qa
ZF=0 vì kt qa khác 0
CF=1 vì có nh 1 t MSB
OF=0 vì du ca kt qa giốngă nhădấu ca 2 s hngă banăđầu .
Ví d 2ă:ăADDăAL,BLă trongă đóăALBL80h
80h
+ 80h
100h
Kt qa tn AL = 00h
SF=0 vì MSB=0
PF=1 vì tt c cácăbiđu bng 0
ZF=1 vì kt qa bng 0
CF=1 vì có nh 1 t MSB
OF=1 vì c 2 toán hng là s ơmă nhngăkt qa là s dngă(nh ra t MSBănhngă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 (chn ) s 1 trong byte thp ca kt
qa
ZF=0 vì kt qa khác 0
CF=0ăvìăkhôngă cóămn
OF=1 vì tr mt s âm cho 1 s dngă (tc là cng
2 s âm ) mà kt qa là mt s dngă .
Ví d 4ă:ăINCăALătrongă đóăAL=FFh
Kt qa tn AL=00h = 0000 0000
SF=0 vì MSB=0
PF=1
ZF=1 vì kt qa bng 0
CF không b nh hng bi lnh INC mc dù có nh
1 t MSB
OF=0 vì hai s khác dấuăđc cng vi nhau (s
nh vƠoăMSBăvƠăcũngă cóăsố nh ra t MSB)
Ví d 5: MOV AX,-5
Kt qu tn BX = -5 = FFFBh
Không có c nào nhă hng bi lnh 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
Kt qa tn AX=8000h
SF=1 vì MSB=1
| 1/78

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