SlideShare a Scribd company logo
1 of 10
Download to read offline
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
-----------------------------------------------------------------------------------

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

More Related Content

Similar to Asm

L C D Demo Cho Microblaze
L C D Demo Cho MicroblazeL C D Demo Cho Microblaze
L C D Demo Cho Microblazeiuui
 
Chuong10
Chuong10Chuong10
Chuong10na
 
Nmlt c11 con_trocoban_in
Nmlt c11 con_trocoban_inNmlt c11 con_trocoban_in
Nmlt c11 con_trocoban_inHuy Nguyễn
 
Kiến trúc máy tính và hợp ngữ bài 07
Kiến trúc máy tính và hợp ngữ bài 07Kiến trúc máy tính và hợp ngữ bài 07
Kiến trúc máy tính và hợp ngữ bài 07Nhóc Nhóc
 
Mitsubishi
MitsubishiMitsubishi
Mitsubishiddungd4
 
PLC mitsubishi
PLC mitsubishiPLC mitsubishi
PLC mitsubishiquanglocbp
 
chappter 1- Advanced Microprocessor presentation.pdf
chappter 1- Advanced Microprocessor presentation.pdfchappter 1- Advanced Microprocessor presentation.pdf
chappter 1- Advanced Microprocessor presentation.pdfngtloc2017
 
Chap3 8051 microcontroller – assembly
Chap3 8051 microcontroller – assemblyChap3 8051 microcontroller – assembly
Chap3 8051 microcontroller – assemblyvietanhetc
 
Lab 2 phân loại dùng mô hình mqc
Lab 2 phân loại dùng mô hình mqcLab 2 phân loại dùng mô hình mqc
Lab 2 phân loại dùng mô hình mqcVNG
 
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Minh Ngoc Tran
 
C#can ban.pdf
C#can ban.pdfC#can ban.pdf
C#can ban.pdfBinh Ng
 
Lab security+baiso8 netcat
Lab security+baiso8 netcatLab security+baiso8 netcat
Lab security+baiso8 netcatxeroxk
 
Lab security+ Bài 8: Netcat
Lab security+ Bài 8: NetcatLab security+ Bài 8: Netcat
Lab security+ Bài 8: Netcatxeroxk
 

Similar to Asm (20)

Chuong 3
Chuong 3Chuong 3
Chuong 3
 
Bai thinghiemmangmaytinh
Bai thinghiemmangmaytinhBai thinghiemmangmaytinh
Bai thinghiemmangmaytinh
 
L C D Demo Cho Microblaze
L C D Demo Cho MicroblazeL C D Demo Cho Microblaze
L C D Demo Cho Microblaze
 
Chuong10
Chuong10Chuong10
Chuong10
 
Ch01
Ch01Ch01
Ch01
 
Nmlt c11 con_trocoban
Nmlt c11 con_trocobanNmlt c11 con_trocoban
Nmlt c11 con_trocoban
 
Nmlt c11 con_trocoban_in
Nmlt c11 con_trocoban_inNmlt c11 con_trocoban_in
Nmlt c11 con_trocoban_in
 
Kiến trúc máy tính và hợp ngữ bài 07
Kiến trúc máy tính và hợp ngữ bài 07Kiến trúc máy tính và hợp ngữ bài 07
Kiến trúc máy tính và hợp ngữ bài 07
 
Lect09 string
Lect09 stringLect09 string
Lect09 string
 
Mitsubishi
MitsubishiMitsubishi
Mitsubishi
 
PLC mitsubishi
PLC mitsubishiPLC mitsubishi
PLC mitsubishi
 
chappter 1- Advanced Microprocessor presentation.pdf
chappter 1- Advanced Microprocessor presentation.pdfchappter 1- Advanced Microprocessor presentation.pdf
chappter 1- Advanced Microprocessor presentation.pdf
 
Chap3 8051 microcontroller – assembly
Chap3 8051 microcontroller – assemblyChap3 8051 microcontroller – assembly
Chap3 8051 microcontroller – assembly
 
Lab 2 phân loại dùng mô hình mqc
Lab 2 phân loại dùng mô hình mqcLab 2 phân loại dùng mô hình mqc
Lab 2 phân loại dùng mô hình mqc
 
Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-Nmlt c11 con_trocoban-
Nmlt c11 con_trocoban-
 
Tài liệu: Đào tạo hệ thống điều khiển DCS (DCS Training nhà máy nhiệt điện Ph...
Tài liệu: Đào tạo hệ thống điều khiển DCS (DCS Training nhà máy nhiệt điện Ph...Tài liệu: Đào tạo hệ thống điều khiển DCS (DCS Training nhà máy nhiệt điện Ph...
Tài liệu: Đào tạo hệ thống điều khiển DCS (DCS Training nhà máy nhiệt điện Ph...
 
C#can ban.pdf
C#can ban.pdfC#can ban.pdf
C#can ban.pdf
 
Lab security+baiso8 netcat
Lab security+baiso8 netcatLab security+baiso8 netcat
Lab security+baiso8 netcat
 
Lab security+ Bài 8: Netcat
Lab security+ Bài 8: NetcatLab security+ Bài 8: Netcat
Lab security+ Bài 8: Netcat
 
Ch02
Ch02Ch02
Ch02
 

Asm

  • 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