1. I. C.Trình ASM
1. Directive ñi u khi n segment d ng ñơn gi n
a. .Model
- Ch c năng: Báo cho chương trình d ch ASM bi t ñ xác l p m t vùng
nh Ram thích h p cho chương trình
- Cú Pháp: .Model ki u
Tiny
: Code + Data <= 64k
Small
: Code<=64k; Data<=64k
Compact : Code<=64k;Data>=64k
Medium : Code>=64k;Data<=64k
Large
: Code>=64k;Data>=64k
----------------------------------------------------------------------------------
b. .Stack
- Ch c năng: Báo cho chương trình d ch ASM bi t ñ xác l p m t vùng
nh Ram cho Stack
- Cú Pháp: .Stack ñ l n (tính theo byte)
- Ví D : .Stack 100h (xin 256byte)
---------------------------------------------------------------------------------
c. .Data
- Ch c năng: Báo cho chương trình d ch ASM bi t ñ xác l p m t vùng
nh Ram cho d li u
- Cú Pháp: .Data
Khai báo bi n
- Các d ng bi n hay dùng c a ASM:
+D ng s : tên_bi n ki u_bi n gán_giá_tr _ban_ñ u (ho c ?)
Db (define byte: 1byte)
Dw (define word: 2byte)
Ví d : x db ?
y dw -254
+D ng xâu: tên_bi n db các_kí_t (cách nhau b i d u ,)
ñ _l n dup(1 kí t ho c ?)
Ví d : x db ‘h’,’e’,’l’,’l’,’o’
y db ‘hello’
z db 100h dup(‘A’)
t db 100 dup(?)
---------------------------------------------------------------------------------
d. .Code
- Ch c năng: Báo cho chương trình d ch ASM bi t ñ xác l p m t vùng
nh Ram cho mã máy c a chương trình
- Cú Pháp: .Code
Nhãn Chương Trình:
Thân Chương Trình
End Nhãn Chương Trình
1
2. -----------------------------------------------------------------------------------
D ng thư ng th y c a m t chương trình ASM d ng ñơn gi n:
#################################################################
.Model ki u
.Stack ñ _l n
.Data
Khai báo bi n
.Code
Nhãn_C.Trình:
Mov ax,@data
Mov ds,ax
… các l nh ASM
Mov ah,4ch
Int 21h
End Nhãn_C.Trình
; Có th k có(m c ñ nh là 1024b byte)
; Ch khai báo khi khai báo data
; Ch khai báo khi khai báo data
; Tr v Dos
#################################################################
-----------------------------------------------------------------------------------
2. Chương Trình Con
Tên_Chương_trình_con Proc
b o v các thanh ghi mà thân chương trình con s phá v
.. các l nh
Ret
Tên_Chương_trình_con Endp
- Cơ ch th c hi n Chương trình con:
+ b1: tham s th c ñư c ñưa vào stack
+ b2: ñ a ch l nh ti p theo ñư c ñưa vào stack (2/4 byte)
+ b3: ñưa ñ a ch chương trình con vào cs:ip
+ b4: th c hi n chương trình con ñ n khi g p return thì ñưa ñ a ch l y ti p
theo ñư c ñưa vào stack trong bư c 2 ñ ñưa vào cs:ip
+ b5: ti p t c chương trình ch y d
-----------------------------------------------------------------------------------
3. Macro
Tên_Macro Macro các_tham_s
b o v các thanh ghi mà thân Macro s phá v
.. các l nh
Endm
-----------------------------------------------------------------------------------
4. Inline ASM Trong C++
- G m 1 t p .cpp liên k t v i m t t p .asm
- Yêu c u:
M t file d ch có ñuôi .bat ñ liên k t 2 t p
dich.bat
F:ASMTC30BINtcc -ml -IF:ASMTC30INCLUDE -IF:ASMTC30LIB %1 %2
(chú ý là ph i ñúng ñư ng d n ch a TC30)
2
3. Các nhãn (chương trình chính, chương trình con) ph i hi u nhau.
Mu n v y c n có 2 directive là Public (cho phép) và Extrn (xin
phép)
- Ví d : Tính a lũy th a n
+ Vd1: dùng hàm ASM không ñ i
T p 1: lt1.cpp
#include<iostream.h>
#include<conio.h>
int a,n;
extrn int LT();
void main()
{
clrscr();
cout<<”n Nhap a: ”; cin>>a;
cout<<”n Nhap n: “; cin>>n;
cout<<”n “<<a<<” luy thua ”<<n<<” bang: “<<LT();
getch();
}
T p 2: lt11.asm
.model small
.stack 100h
.data
Extrn _a:word,_n:word
.code
Public @LT$qv
@LT$qv PROC
Mov bx,_a
Mov cx,_n
Mov ax,1
And cx,cx ; d ng c xét li u n có b ng 0
Jz L2
; n u n=0 thì nh y ñ n L2
L1:
Mul bx
Loop L1
L2:
Ret
@LT$qv EndP
End
+ Vd2: dùng hàm ASM 1 ñ i
T p 1: lt2.cpp
#include<iostream.h>
#include<conio.h>
int n;
extrn int LT(int a);
void main()
{
clrscr();
cout<<”n Nhap a: ”; cin>>a;
cout<<”n Nhap n: “; cin>>n;
cout<<”n “<<a<<” luy thua ”<<n<<” bang: “<<LT(a);
getch();
}
T p 2: lt22.asm
.model small
.stack 100h
.data
Extrn _n:word
.code
Public @LT$qi
@LT$qi PROC
3
4. Push bp
; C t giá tr BP hi n th i vào stack
Mov bp,sp
Mov bx,[bp+6] ;bx=a
Mov cx,_n
Mov ax,1
And cx,cx
; d ng c xét li u n có b ng 0
Jz L2
; n u n=0 thì nh y ñ n L2
L1:
Mul bx
Loop L1
L2:
Pop bp
Ret
@LT$qi EndP
End
+ Vd3: dùng hàm ASM 2 ñ i
T p 1: lt3.cpp
#include<iostream.h>
#include<conio.h>
extrn int LT(int a,int n);
void main()
{
clrscr();
cout<<”n Nhap a: ”; cin>>a;
cout<<”n Nhap n: “; cin>>n;
cout<<”n “<<a<<” luy thua ”<<n<<” bang: “<<LT(a,n);
getch();
}
T p 2: lt33.asm
.model small
.stack 100h
.data
Extrn _n:word
.code
Public @LT$qii
@LT$qii PROC
Push bp
; C t giá tr BP hi n th i vào stack
Mov bp,sp
Mov bx,[bp+6] ;bx=a
Mov cx,[bp+8] ;cx=n
Mov ax,1
And cx,cx
; d ng c xét li u n có b ng 0
Jz L2
; n u n=0 thì nh y ñ n L2
L1:
Mul bx
Loop L1
L2:
Pop bp
Ret
@LT$qii EndP
End
-----------------------------------------------------------------------------------
5. Các lo i thanh ghi cho máy tính 16 bit
a. Thanh ghi c 16 bit
O D I T S Z
A
P
C
C : Carry
P : Parity A : Auxiliary Z : Zero S : Sign
T : Trap
I : Interrupt D : Direction O : Overflow
-----------------------------------------------------------------------------------
b. 8 Thanh ghi ña năng 16 bit
4
5. Ax Bx Cx Dx : 3 ch ñ truy nh p (al,ah,ax)
Si Di Bp Sp : 1 ch ñ
Ngư i l p trình ch ñư c dùng 7 thanh ghi (tr thanh ghi Sp)
-----------------------------------------------------------------------------------
c. Thanh ghi con tr l nh 16 bit
Ip : cho bi t ph n ñ a ch offset c a vùng nh Ram ch a mã máy c a
chương trình
-----------------------------------------------------------------------------------
d. 4 Thanh ghi segment 16 bit
Cs : Code Segment ; cho bi t ph n ñ a ch segmentc a vùng nh Ram ch a mã máy chương trình
Ds : Data Segment ;cho bi t ph n ñ a ch segmentc a vùng nh Ram ch a d li u chương trình
Es : Extra Segment ;cho bi t ph n ñ a ch segmentc a vùng nh Ram ch a d li u chương trình
Ss : Stack Segment;cho bi t ph n ñ a ch segment c a vùng nh Ram ch a ngăn x p chương trình
-----------------------------------------------------------------------------------
II. Các l nh hay dùng c a ASM
1. Nhóm các l nh di chuy n d
li u
a. Mov
- Ch c năng: DST
SRC
- Cú Pháp: Mov DST,SRC
- Ví D : Mov reg1,reg2 ;(ax,bx)
Mov reg,data
;(ax,100)
Mov reg,mem
;(bx,value)
Mov mem,reg
;(value,cx)
Mov mem,data ;(value,-100)
Mov seg,reg
;(ds,ax)
-----------------------------------------------------------------------------------
b. Push
- Ch c năng: ðưa n i dung 2 byte c a SRC vào ñ nh Stack
- Cú Pháp: Push SRC
- Ví d : Push reg
mem
-----------------------------------------------------------------------------------
c. Pop
- Ch c năng: ðưa n i dung 2 byte c a ñ nh Stack vào SRC
- Cú Pháp: Pop SRC
- Ví d : Pop reg
Mem
-----------------------------------------------------------------------------------
d. PushF
5
6. - Ch c năng: ðưa n i dung thanh ghi c vào ñ nh Stack
- Cú Pháp: PushF
-----------------------------------------------------------------------------------
e. PopF
- Ch c năng: ðưa n i dung 2 byte c a ñ nh Stack vào thanh ghi c
- Cú Pháp: PopF
-----------------------------------------------------------------------------------
f. Xchg
- Ch c năng: DST
SRC
- Cú Pháp: Xchg DST,SRC
- Ví D : Xchg reg1,reg2 ;(ax,bx)
Xchg reg,mem
;(ax,value)
-----------------------------------------------------------------------------------
g. Lea
- Ch c năng: ðưa ph n ñ a ch offset c a 1 bi n nh vào reg
- Cú Pháp: Lea Reg,Mem
-----------------------------------------------------------------------------------
2. Nhóm các l nh S H c
a. Add
- Ch c năng: DST
DST + SRC
- Cú Pháp: Add DST,SRC
- Ví D : Add reg1,reg2 ;(ax,bx)
Add reg,data
;(ax,100)
Add reg,mem
;(bx,value)
Add mem,reg
;(value,cx)
Add mem,data ;(value,-100)
-----------------------------------------------------------------------------------
b. SUB
- Ch c năng: DST
DST - SRC
- Cú Pháp: Sub DST,SRC
- Ví D : Sub reg1,reg2 ;(ax,bx)
Sub reg,data
;(ax,100)
Sub reg,mem
;(bx,value)
Sub mem,reg
;(value,cx)
Sub mem,data ;(value,-100)
-----------------------------------------------------------------------------------
c. Mul/iMul
- Ch c năng: Nhân 2 toán h ng v i s không d u/có d u
8bit * 8bit | al * SRC
ax
16bit * 16bit | ax * SRC dx:ax
- Cú Pháp: Mul/iMul SRC
-----------------------------------------------------------------------------------
d. Div/iDiv
6
7. - Ch c năng: Chia 2 toán h ng v i s không d u/có d u
16bit : 8bit | ax : SRC
al : thương,ah : dư
16bit * 16bit | dx:ax : SRC
ax: thương, dx: dư
- Cú Pháp: Div/iDiv SRC
-----------------------------------------------------------------------------------
e. Inc
- Ch c năng: DST
DST + 1
- Cú Pháp: Inc DST
-----------------------------------------------------------------------------------
f. Dec
- Ch c năng: DST
DST - 1
- Cú Pháp: Dec DST
-----------------------------------------------------------------------------------
g. Neg
- Ch c năng: DST
- DST
- Cú Pháp: Neg DST
-----------------------------------------------------------------------------------
h. Cmp
- Ch c năng: So sánh n i dung 2 toán h ng và d ng c
- Cú Pháp: Cmp DST,SRC
- Gi i Thích: Cmp DST,SRC
n u DST<SRC
C = 1 (c carry)
DST>= SRC
C=0
DST=SRC
Z=1 (c Zero)
DST#SRC
Z=0
-----------------------------------------------------------------------------------
3. Nhóm các l nh thao tác bit
a. And
- Ch c năng: Th c hi n phép toán “và logic” (bit c a phép toán k t qu
=1 khi 2 bit tương ng c a 2 toán h ng ñ u = 1)
- Cú Pháp: And DST,SRC
- Ví D :
Al = 10101010
Bl = 11001100
Add al,bl
10001000
n u al< 0
s=1
al>=0
s=0
al=0
z=1
al#0
z=0
-----------------------------------------------------------------------------------
b. Or
7
8. - Ch c năng: Th c hi n phép toán “ho c logic” (bit c a phép toán k t
qu =1 khi và ch khi 1 trong 2 bit tương ng c a 2 toán h ng ñ u = 1)
- Cú Pháp: Or DST,SRC
- Ví D :
Al = 10101010
Bl = 11001100
Or al,bl
11101110
-----------------------------------------------------------------------------------
c. Xor
- Ch c năng: Th c hi n phép toán “exclusive or” (bit c a phép toán k t
qu =1 khi và ch khi 2 bit tương ng c a 2 toán h ng khác nhau)
- Cú Pháp: Xor DST,SRC
- Ví D :
Al = 10101010
Bl = 11001100
Xor al,bl
01100110
-----------------------------------------------------------------------------------
d. Shl
- Ch c năng: T t c các bit d ch sang trái (bit cu i (bit 16) s d ch vào
c C)
- Cú Pháp: Shl DST,count
- Ví D :
Shl ax,1
n u count >=2 thì ph i nh ñ n Cl
Mov cl,4
Shl ax,cl
-----------------------------------------------------------------------------------
e. Shr
- Ch c năng: T t c các bit d ch sang ph i (bit ñ u (bit 1) s d ch vào c
C)
- Cú Pháp: Shr DST,count
- Ví D :
Shr ax,1
n u count >=2 thì ph i nh ñ n Cl
Mov cl,4
Shr ax,cl
-----------------------------------------------------------------------------------
f. Sar
- Ch c năng: T t c các bit d ch sang ph i (bit ñ u (bit 1) s d ch vào c
C) nhưng bit 16 v n gi nguyên giá tr
- Cú Pháp: Sar DST,count
- Ví D :
Sar ax,1
n u count >=2 thì ph i nh ñ n Cl
8
9. Mov cl,4
Sar ax,cl
-----------------------------------------------------------------------------------
4. Nhóm các l nh r nhánh
a. Call
- Ch c năng: G i 1 chương trình con
- Cú Pháp: Call Tên_CT_con
-----------------------------------------------------------------------------------
b. Int
- Ch c năng: G i chương trình (kích ho t chương trình) con ph c v
ng t c a h th ng
- Cú Pháp: Int n ; n là s ng t
-----------------------------------------------------------------------------------
c. Jmp
- Ch c năng: Nh y không ñi u ki n
- Cú Pháp: Jmp Nhãn
Chú ý bư c nh y không quá 64k
-----------------------------------------------------------------------------------
d. Loop
- Ch c năng: th c hi n l i kh i l nh ASM n m gi a nhãn và loop nhãn
cho ñ n khi cx=0, sau m i l n th c hi n cx gi m ñi 1
- Cú Pháp: Nhãn
kh i l nh ASM
Loop Nhãn
-----------------------------------------------------------------------------------
e. Nh y theo tr ng thái các bit c
jc Nhãn
jnc Nhãn
s nh y n u c = 1
s nh y n u c = 0
jz Nhãn
jnz Nhãn
s nh y n u z = 1
s nh y n u z = 0
js Nhãn
jns Nhãn
s nh y n u s = 1 (s âm)
s nh y n u s = 0 (s dương)
-----------------------------------------------------------------------------------
f. Nh y theo ñi u ki n
Cmp DST,SRC
jne Nhãn
nh y n u DST = SRC
ja Nhãn
nh y n u DST # SRC
-----------------------------------------------------------------------------------
5. Các hàm hay dùng c a h th ng h tr ASM
9
10. a. Hàm s 1
mov ah,1
int 21h
ch nh n t bàn phím 1 kí t
-----------------------------------------------------------------------------------
b. Hàm s 2
mov al
mov ah,0eh
int 10h
ñưa ra màn hình 1 kí t
-----------------------------------------------------------------------------------
c. Hàm s 3
lea dx (tên bi n xâu)
mov ah,9
int 21h
hi n 1 xâu kí t k t thúc b ng $ ra màn hình t i v trí con tr
-----------------------------------------------------------------------------------
d. Hàm s 4
mov ah,4eh
int 21h
tr v dos
-----------------------------------------------------------------------------------
10