10
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

Asm

Embed Size (px)

DESCRIPTION

 

Citation preview

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

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 ; Có thể k có(mặc ñịnh là 1024b byte) Khai báo biến .Code Nhãn_C.Trình: Mov ax,@data ; Chỉ khai báo khi khai báo data Mov ds,ax ; Chỉ khai báo khi khai báo data … các lệnh ASM Mov ah,4ch ; Trở về Dos Int 21h End Nhãn_C.Trình #################################################################

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

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:\ASM\TC30\BIN\tcc -ml -IF:\ASM\TC30\INCLUDE -IF:\ASM\TC30\LIB %1 %2 (chú ý là phải ñúng ñường dẫn chứa TC30)

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

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

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

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

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

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

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 àààà sẽ nhảy nếu c = 1 jnc Nhãn àààà sẽ nhảy nếu c = 0 jz Nhãn àààà sẽ nhảy nếu z = 1 jnz Nhãn àààà sẽ nhảy nếu z = 0 js Nhãn àààà sẽ nhảy nếu s = 1 (số âm) jns Nhãn àààà 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

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