You are on page 1of 10

I. C.

Trnh ASM
1. Directive iu khin segment dng n gin
a. .Model
- Chc nng: Bo cho chng trnh dch ASM bit xc lp mt vng
nh Ram thch hp cho chng trnh
- C Php: .Model kiu
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
- Chc nng: Bo cho chng trnh dch ASM bit xc lp mt vng
nh Ram cho Stack
- C Php: .Stack ln (tnh theo byte)
- V D: .Stack 100h (xin 256byte)
---------------------------------------------------------------------------------

c. .Data
- Chc nng: Bo cho chng trnh dch ASM bit xc lp mt vng
nh Ram cho d liu
- C Php: .Data

Khai bo bin
- Cc dng bin hay dng ca ASM:
+Dng s: tn_bin kiu_bin gn_gi_tr_ban_u (hoc ?)
Db (define byte: 1byte)
Dw (define word: 2byte)
V d: x db ?
y dw -254
+Dng xu: tn_bin db cc_k_t (cch nhau bi du ,)
_ln dup(1 k t hoc ?)
V d: x db h,e,l,l,o
y db hello
z db 100h dup(A)
t db 100 dup(?)
---------------------------------------------------------------------------------

d. .Code
- Chc nng: Bo cho chng trnh dch ASM bit xc lp mt vng
nh Ram cho m my ca chng trnh
- C Php: .Code

Nhn Chng Trnh:


Thn Chng Trnh
End Nhn Chng Trnh
1

-----------------------------------------------------------------------------------

Dng thng thy ca mt chng trnh ASM dng n gin:


#################################################################

.Model kiu
.Stack _ln
.Data
Khai bo bin
.Code
Nhn_C.Trnh:
Mov ax,@data
Mov ds,ax
cc lnh ASM
Mov ah,4ch
Int 21h
End Nhn_C.Trnh

; C th k c(mc nh l 1024b byte)

; Ch khai bo khi khai bo data


; Ch khai bo khi khai bo data
; Tr v Dos

#################################################################

-----------------------------------------------------------------------------------

2. Chng Trnh Con


Tn_Chng_trnh_con Proc
bo v cc thanh ghi m thn chng trnh con s ph v
.. cc lnh
Ret
Tn_Chng_trnh_con Endp
- C ch thc hin Chng trnh con:
+ b1: tham s thc c a vo stack
+ b2: a ch lnh tip theo c a vo stack (2/4 byte)
+ b3: a a ch chng trnh con vo cs:ip
+ b4: thc hin chng trnh con n khi gp return th a a ch ly tip
theo c a vo stack trong bc 2 a vo cs:ip
+ b5: tip tc chng trnh chy d

-----------------------------------------------------------------------------------

3. Macro
Tn_Macro Macro cc_tham_s
bo v cc thanh ghi m thn Macro s ph v
.. cc lnh
Endm
-----------------------------------------------------------------------------------

4. Inline ASM Trong C++


- Gm 1 tp .cpp lin kt vi mt tp .asm
- Yu cu:
Mt file dch c ui .bat lin kt 2 tp
dich.bat
F:\ASM\TC30\BIN\tcc -ml -IF:\ASM\TC30\INCLUDE -IF:\ASM\TC30\LIB %1 %2
(ch l phi ng ng dn cha TC30)

Cc nhn (chng trnh chnh, chng trnh con) phi hiu nhau.
Mun vy cn c 2 directive l Public (cho php) v Extrn (xin
php)
- V d: Tnh a ly tha n
+ Vd1: dng hm ASM khng i
Tp 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();
}

Tp 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 ; dng c xt liu n c bng 0
Jz L2
; nu n=0 th nhy n L2
L1:
Mul bx
Loop L1
L2:
Ret
@LT$qv EndP
End

+ Vd2: dng hm ASM 1 i


Tp 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();
}

Tp 2: lt22.asm
.model small
.stack 100h
.data
Extrn _n:word
.code
Public @LT$qi
@LT$qi PROC

Push bp
; Ct gi tr BP hin thi vo stack
Mov bp,sp
Mov bx,[bp+6] ;bx=a
Mov cx,_n
Mov ax,1
And cx,cx
; dng c xt liu n c bng 0
Jz L2
; nu n=0 th nhy n L2
L1:
Mul bx
Loop L1
L2:
Pop bp
Ret
@LT$qi EndP
End

+ Vd3: dng hm ASM 2 i


Tp 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();
}

Tp 2: lt33.asm
.model small
.stack 100h
.data
Extrn _n:word
.code
Public @LT$qii
@LT$qii PROC
Push bp
; Ct gi tr BP hin thi vo stack
Mov bp,sp
Mov bx,[bp+6] ;bx=a
Mov cx,[bp+8] ;cx=n
Mov ax,1
And cx,cx
; dng c xt liu n c bng 0
Jz L2
; nu n=0 th nhy n L2
L1:
Mul bx
Loop L1
L2:
Pop bp
Ret
@LT$qii EndP
End

-----------------------------------------------------------------------------------

5. Cc loi thanh ghi cho my tnh 16 bit


a. Thanh ghi c 16 bit
O D I T S Z

C : Carry
P : Parity A : Auxiliary Z : Zero S : Sign
T : Trap
I : Interrupt D : Direction O : Overflow
-----------------------------------------------------------------------------------

b. 8 Thanh ghi a nng 16 bit

Ax Bx Cx Dx : 3 ch truy nhp (al,ah,ax)


Si Di Bp Sp : 1 ch
Ngi lp trnh ch c dng 7 thanh ghi (tr thanh ghi Sp)
-----------------------------------------------------------------------------------

c. Thanh ghi con tr lnh 16 bit


Ip : cho bit phn a ch offset ca vng nh Ram cha m my ca
chng trnh
-----------------------------------------------------------------------------------

d. 4 Thanh ghi segment 16 bit


Cs : Code Segment ; cho bit phn a ch segmentca vng nh Ram cha m my chng trnh
Ds : Data Segment ;cho bit phn a ch segmentca vng nh Ram cha d liu chng trnh
Es : Extra Segment ;cho bit phn a ch segmentca vng nh Ram cha d liu chng trnh
Ss : Stack Segment;cho bit phn a ch segment ca vng nh Ram cha ngn xp chng trnh
-----------------------------------------------------------------------------------

II. Cc lnh hay dng ca ASM


1. Nhm cc lnh di chuyn d liu
a. Mov
- Chc nng: DST
SRC
- C Php: 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
- Chc nng: a ni dung 2 byte ca SRC vo nh Stack
- C Php: Push SRC
- V d: Push reg
mem
-----------------------------------------------------------------------------------

c. Pop
- Chc nng: a ni dung 2 byte ca nh Stack vo SRC
- C Php: Pop SRC
- V d: Pop reg
Mem
-----------------------------------------------------------------------------------

d. PushF

- Chc nng: a ni dung thanh ghi c vo nh Stack


- C Php: PushF
-----------------------------------------------------------------------------------

e. PopF
- Chc nng: a ni dung 2 byte ca nh Stack vo thanh ghi c
- C Php: PopF
-----------------------------------------------------------------------------------

f. Xchg
- Chc nng: DST
SRC
- C Php: Xchg DST,SRC
- V D: Xchg reg1,reg2 ;(ax,bx)
Xchg reg,mem
;(ax,value)
-----------------------------------------------------------------------------------

g. Lea
- Chc nng: a phn a ch offset ca 1 bin nh vo reg
- C Php: Lea Reg,Mem
-----------------------------------------------------------------------------------

2. Nhm cc lnh S Hc
a. Add
- Chc nng: DST
DST + SRC
- C Php: 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
- Chc nng: DST
DST - SRC
- C Php: 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
- Chc nng: Nhn 2 ton hng vi s khng du/c du
8bit * 8bit | al * SRC
ax
16bit * 16bit | ax * SRC dx:ax
- C Php: Mul/iMul SRC
-----------------------------------------------------------------------------------

d. Div/iDiv
6

- Chc nng: Chia 2 ton hng vi s khng du/c du


16bit : 8bit | ax : SRC
al : thng,ah : d
16bit * 16bit | dx:ax : SRC
ax: thng, dx: d
- C Php: Div/iDiv SRC
-----------------------------------------------------------------------------------

e. Inc
- Chc nng: DST
DST + 1
- C Php: Inc DST
-----------------------------------------------------------------------------------

f. Dec
- Chc nng: DST
DST - 1
- C Php: Dec DST
-----------------------------------------------------------------------------------

g. Neg
- Chc nng: DST
- DST
- C Php: Neg DST
-----------------------------------------------------------------------------------

h. Cmp
- Chc nng: So snh ni dung 2 ton hng v dng c
- C Php: Cmp DST,SRC
- Gii Thch: Cmp DST,SRC
nu DST<SRC
C = 1 (c carry)
DST>= SRC
C=0
DST=SRC
Z=1 (c Zero)
DST#SRC
Z=0
-----------------------------------------------------------------------------------

3. Nhm cc lnh thao tc bit


a. And
- Chc nng: Thc hin php ton v logic (bit ca php ton kt qu
=1 khi 2 bit tng ng ca 2 ton hng u = 1)
- C Php: And DST,SRC
- V D:
Al = 10101010
Bl = 11001100
Add al,bl
10001000
nu al< 0
s=1
al>=0
s=0
al=0
z=1
al#0
z=0
-----------------------------------------------------------------------------------

b. Or
7

- Chc nng: Thc hin php ton hoc logic (bit ca php ton kt
qu =1 khi v ch khi 1 trong 2 bit tng ng ca 2 ton hng u = 1)
- C Php: Or DST,SRC
- V D:
Al = 10101010
Bl = 11001100
Or al,bl
11101110
-----------------------------------------------------------------------------------

c. Xor
- Chc nng: Thc hin php ton exclusive or (bit ca php ton kt
qu =1 khi v ch khi 2 bit tng ng ca 2 ton hng khc nhau)
- C Php: Xor DST,SRC
- V D:
Al = 10101010
Bl = 11001100
Xor al,bl
01100110
-----------------------------------------------------------------------------------

d. Shl
- Chc nng: Tt c cc bit dch sang tri (bit cui (bit 16) s dch vo
c C)
- C Php: Shl DST,count
- V D:
Shl ax,1
nu count >=2 th phi nh n Cl
Mov cl,4
Shl ax,cl
-----------------------------------------------------------------------------------

e. Shr
- Chc nng: Tt c cc bit dch sang phi (bit u (bit 1) s dch vo c
C)
- C Php: Shr DST,count
- V D:
Shr ax,1
nu count >=2 th phi nh n Cl
Mov cl,4
Shr ax,cl
-----------------------------------------------------------------------------------

f. Sar
- Chc nng: Tt c cc bit dch sang phi (bit u (bit 1) s dch vo c
C) nhng bit 16 vn gi nguyn gi tr
- C Php: Sar DST,count
- V D:
Sar ax,1
nu count >=2 th phi nh n Cl
8

Mov cl,4
Sar ax,cl
-----------------------------------------------------------------------------------

4. Nhm cc lnh r nhnh


a. Call
- Chc nng: Gi 1 chng trnh con
- C Php: Call Tn_CT_con
-----------------------------------------------------------------------------------

b. Int
- Chc nng: Gi chng trnh (kch hot chng trnh) con phc v
ngt ca h thng
- C Php: Int n ; n l s ngt
-----------------------------------------------------------------------------------

c. Jmp
- Chc nng: Nhy khng iu kin
- C Php: Jmp Nhn
Ch bc nhy khng qu 64k
-----------------------------------------------------------------------------------

d. Loop
- Chc nng: thc hin li khi lnh ASM nm gia nhn v loop nhn
cho n khi cx=0, sau mi ln thc hin cx gim i 1
- C Php: Nhn

khi lnh ASM


Loop Nhn
-----------------------------------------------------------------------------------

e. Nhy theo trng thi cc bit c


jc Nhn
jnc Nhn

s nhy nu c = 1
s nhy nu c = 0

jz Nhn
jnz Nhn

s nhy nu z = 1
s nhy nu z = 0

js Nhn
jns Nhn

s nhy nu s = 1 (s m)
s nhy nu s = 0 (s dng)

-----------------------------------------------------------------------------------

f. Nhy theo iu kin


Cmp DST,SRC
jne Nhn
nhy nu DST = SRC
ja Nhn
nhy nu DST # SRC
-----------------------------------------------------------------------------------

5. Cc hm hay dng ca h thng h tr ASM


9

a. Hm s 1
mov ah,1
int 21h
ch nhn t bn phm 1 k t
-----------------------------------------------------------------------------------

b. Hm s 2
mov al
mov ah,0eh
int 10h
a ra mn hnh 1 k t
-----------------------------------------------------------------------------------

c. Hm s 3
lea dx (tn bin xu)
mov ah,9
int 21h
hin 1 xu k t kt thc bng $ ra mn hnh ti v tr con tr
-----------------------------------------------------------------------------------

d. Hm s 4
mov ah,4eh
int 21h
tr v dos
-----------------------------------------------------------------------------------

10

You might also like