Tập tin thi hành d ng EXE

Một phần của tài liệu Giáo trình kiến trúc máy tính và hợp ngữ (Trang 126)

- Ch ng trình l n và nằm nhi u đo n khác nhau. - Có thể gọi các ch ng trình con d ng Far.

- Kích th c tập tin tùy ý.

- Có header đầu tập tin để ch a các thông tin đi u khiển cần thi t. - Thi hành chậm h n tập tin d ng COM.

Tập tin d ng EXE, không dùng l nh ORG 100h đầu ch ng trình.

Cấu trúc chương trình điển hình của tập tin dạng EXE như sau: …. ; Khai báo hằng số (nếu có)

MNAME MACRO ; (Nếu có)

; Viết lệnh Macro

ENDM

DSEG SEGMENT

; Khai báo dữ liệu

DSEG ENDS CSEG SEGMENT

ASSUME CS: CSEG, DS: DSEG start: MOV AX, DSEG

MOV DS, AX ; khởi động DS

…….

……. ; (Chương trình chính)

…….

MOV AH, 4Ch ; hay MOV AX,4C00h

INT 21h ; thoát CT_CON PROC …….. ; Viết các Thủ tục (Nếu có) RET CT_CON ENDP CSEG ENDS END start 6.2.4 Ví d

Đo n ch ng trình h p ng sau thực hi n vi c in ký tự ‘B’ lên màn hình s dụng các câu l nh đ c giải thích nh sau:

MOV AH, 02h ; Sử dụng hàm in ký tự của ngắt 21h MOV DL, ‘B’ ; DL chứa ký tự cần in

INT 21h ; Gọi ngắt để thực công việc

a). Mu n đo n ch ng trình này thực thi trên máy tính d ng COM thì phải dùng cấu trúc ch ng trình d ng COM để vi t, nh sau:

PAGE 60,132

TITLE chuong trinh dang .COM CSEG SEGMENT

ASSUME CS: CSEG

ORG 100h

Begin: MOV AH, 02h ; Sử dụng hàm in ký tự của ngắt 21h

MOV DL, ‘B’ ; DL chứa ký tự cần in

INT 21h ; Gọi ngắt để thực công việc

CSEG ENDS END Begin

b) Mu n đo n ch ng trình này thực thi trên máy tính d ng EXE thì phải dùng cấu trúc ch ng trình d ng EXE để vi t, nh sau: (adsbygoogle = window.adsbygoogle || []).push({});

DSEG SEGMENT

; Vì không có biến để khai báo nên đoạn DSEG có thể bỏ đi

DSEG ENDS CSEG SEGMENT

ASSUME CS: CSEG, DS: DSEG Begin: MOV AX, DSEG

MOV DS, AX

MOV AH, 02h ; Sử dụng hàm in 1 ký tự của ngắt 21h

MOV DL, ‘B’ ; DL chứa ký tự cần in

INT 21h ; Gọi ngắt để thực công việc

MOV AH, 4Ch ; AH chứa 4Ch để thoát khi gọi ngắt 21

INT 21h CSEG ENDS END Begin

c) Vi t l i ch ng trình trên nh ng khôngkhai báo đo n DSEG, khi đó ch ng trình ch có 1 đo n duy nhất, nh sau:

CSEG SEGMENT

ASSUME CS: CSEG, DS: CSEG Begin: MOV AX, CSEG

MOV DS, AX

MOV AH, 02h ; Sử dụng hàm in ký tự của ngắt 21h

MOV DL, ‘B’ ; DL chứa ký tự cần in

INT 21h ; Gọi ngắt để thực công việc

MOV AH, 4Ch ; AH chứa trị 4Ch để thoát

INT 21h CSEG ENDS

6.2.5 Cách t o 1 ch ng trình bằng h p ng

Để t o m t ch ng trình vi t bằng h p ng ch y trên máy tính PC, ta cần phải có b trình h p d ch MASM (hay TASM). Trình h p d ch MASM đ c cung cấp g m 2 tập tin c bản: MASM.EXE (h p d ch) và LINK.EXE (liên k t). Ngoài ra còn m t s tập tin khác nh EXE2BIN.COM dùng để chuyển sang d ng COM và DEBUG.COM dùng để g r i ch ng trình. Các tập tin này đ c thực thi d i MSDOS. Cần ba hoặc b n b c để t o ch ng trình h p ng ch y đ c trên máy tính PC

B C 1: So n thảo tập tin ngu n và l u tập tin lên điã có phần m r ng là (*.ASM)

Ví dụ: Dùng trình so n thảo Notepad hoặc trình so n thảo văn bản TEXT so n thảo ch ng trình nh các ví dụ trên và l u vào đĩa có tên VIDU.ASM

B C 2: H p d ch file ASM thành file đ i t ng (VIDU.OBJ)

Giả s các tập tin cần thi t: MASM.EXE (h p d ch) và LINK.EXE (liên k t). EXE2BIN.COM (Chuyển file .EXE thành file .COM) có trong th mục hi n hành là D:\ Ta ra l nh h p d ch để t o ra file .OBJ nh sau

C:\> MASM <filenamengu n> [filenameđích.OBJ]

Trình h p d ch kiểm tra l i cú pháp trên t ng dòng l nh. N u có l i thì phải quay v b c 1 để s a ch a và d ch l i cho đ n h t l i. N u không nêu filenameđích thì trình d ch s lấy tên filenamengu n v i phần m r ng là .OBJ

Ví dụ: Nh ví dụ trên ta ra l nh D:\MASM vidu

B C 3: Liên k t m t hay nhi u file OBJ thành file thi hành (*.EXE)

D:\> LINK <filename1;> [<filename2;> …] [<filename.exe>] Ví dụ: Nh ví dụ trên ta ra l nh (adsbygoogle = window.adsbygoogle || []).push({});

D:\>LINK VIDU

B C 4: Đ i t EXE sang COM (Dành cho ch ng trình vi t d ng COM)

C:\> EXE2BIN <filename.EXE> <filename.COM>

6.3. M t s l nh c a h p ng 16 bit 6.3.1 Toán h ng

Tập l nh c a 8086 có 111 l nh v i chi u dài có t 1 đ n đ n vài byte. Các CPU sau này (80x86) đ c b sung thêm nhi u l nh m i có ch c năng phong phú h n. CPU 80386 có 206 l nh; CPU Pentium có h n 400 l nh. L nh c a 8086 có t i đa 2 toán h ng, cú pháp chung nh sau:

<Thaotác> Toánhạng1 , Toánhạng_2

Trong đó <Thao tác> (Operation) là bắt bu c, Toánh ng1 (Operand1) là toán h ng đích, Toánh ng2 (Operand2) là toán h ng ngu n. Toán h ng ngu n có thể ch a d li u hoặc đa ch ; toán h ng ngu n không thay đ i b i thao tác c a l nh. Toán h ng đích ch ra n i l u tr d li u là thanh ghi hay trong b nh và d li u này s đ c s dụng để thực thi. Toán h ng có thể là thanh ghi, b nh . Hai toán h ng phải có cùng kích th c. Ta có các lo i toán h ng sau:

- Toán h ng thanh ghi (Register Operand): V i kiểu đnh đa ch này toán h ng là 1 trong các thanh ghi 8bit; 16bit; 32bit c a tập các thanh ghi c a b vi x lý. Tuỳ thu c vào l nh/ch th thanh ghi có thể toán h ng 1; toán h ng 2 hoặc cả 2.

Ví dụ: Bien_1 DW ?

MOV CX,Bien_1 ; Thanh ghi toán h ng 1 MOV Bien_1,BX ; Thanh ghi toán h ng 2 MOV CL,AH ; Thanh ghi cả 2 toán h ng

- Toán h ng t c th i (Immediate operand): V i kiểu đnh đa ch t c th i toán h ng ngu n ch a 1 giá tr là hằng s ; m t biểu th c. Toán h ng đích có thể là 1 thanh ghi hoặc 1 v trí nh

- Toán h ng b nh trực ti p (Direct memory operand): M t trong 2 toán h ng tham chi u đ n 1 v trí nh trong b nh và toán h ng còn l i tham chi u đ n 1 thanh ghi. Không có l nh/ch th nào có 2 toán h ng đ ng th i tham chi u đ n các v trí trong b nh .

- Toán h ng gián ti p b nh (Indirect memory operand): Là kỹ thuật s dụng kiểu đ nh đa ch Segment:Offset. Các thanh ghi s dụng cho mục đích này là BX, DI, SI, BP đ c đặt trong dấu ngoặc vuông [ ]. Các thanh ghi BX, DI, SI th ng k t h p v i thanh ghi Segment DS thành DS:BX, DS:DI, DS:SI để x lý d li u trong

segment d li u. Khi các thanh ghi BX, DI, SI hoặc 1 hằng s đ c đặt trong dấu ngoặc vuông mà trong 1 toán h ng thì ch ra rằng đó là đa ch Offset c a DS.

6.3.2. Nhóm l nh sao chép d li u, đ ach :

1. Lệnh sao chép dữliệu

Cú pháp:

MOV Đích, Nguồn

Trong đó:

Ngu n (toán hạngngu n) : Reg, Mem, Immed.

Đích (toán hạngđích) : Reg, Mem.

Công dụng: Sao chép d li u ngu n vào đích. Sau khi l nh đ c thực hi n thì giá tr toán h ngngu n và toán h ngđích bằng nhau.

Lưu ý:

- L nh MOV không cho phép cả 2 toán h ng là đa ch b nh , toán h ng t c th i cho thanh ghi segment và t thanh ghi Segment đ n thanh ghi Segment

- L nh MOV không ảnh h ng đ n thanh ghi tr ng thái.

Ví dụ:

MOV CX, BX ; Sao chép n i dung thanh ghi BX vào thanh ghi CX. ;Sau khi thực hi n xong, BX=CX.

MOV DX, 1234h ; DL ← 34h, DH ← 12h MOV DS, AX ; DS ← AX

MOV AH, [1234h] ; AH ← M[DS:1234h]

MOV [1235h], DX ; M[DS:1235h] ← DL, M[DS:1236h] ← DH (adsbygoogle = window.adsbygoogle || []).push({});

2. Lệnh hoán đổidữ liệu

Cú pháp:

XCHG Đích, Ngu n

Ngu n, đích: Reg, Mem.

Công dụng: L nh XCHG hoán đ i d li u gi a ngu n và đích. Cả hai toán h ng không đ ng th i là Mem.

Ví dụ:

XCHG AX, [1235h] ; AL ↔ M[DS:1235h], AH ↔ M[DS:1236h]

3. Lnh lấy địa chỉ độ dời

Cú pháp:

LEA Reg16, Mem16

Công dụng: Lấy đ a ch đ d i c a bi n hay nhãn (mem16) đ a vào thanh ghi đích Reg16 và kh i đ ng thanh ghi đó.

Ví dụ:

LEA DX, bienA ; Lấy đ d i c a bi n bienA l u vào DX

6.3.3. Nhóm l nh tính toán s học.

1. Lệnh cộng hai số nguyên

Cú pháp:

ADD đích, ngu n

Ngu n : Reg, Mem, Immed.

Đích : Reg, Mem.

Công dụng: Lấy toán h ng ngu n c ng toán h ng đích và l u k t quả vào toán h ng đích.

2. Lnh trừ hai số nguyên

Cú pháp:

SUB đích, ngu n

Ngu n : Reg, Mem, Immed. Đích : Reg, Mem.

Công dụng: Lấy toán h ng đích (s b tr ) tr toán h ng ngu n (s tr ) và l u k t quả vào toán h ng đích.

Ví dụ:

ADD AL, 15 ; AL ← AL + 15 ADD AX, DX ; AX ← AX + DX SUB BX, 15h ; BX ← BX – 15h

3. Lệnh tăng 1 đơn vị (Increment)

Cú pháp:

Đích : Reg, Mem. Lệnh này chỉ có 1 toán hạng (adsbygoogle = window.adsbygoogle || []).push({});

Công dụng: Tăng n i dung c a toán h ng đích thêm 1 đ n v .

4. Lnh giảm 1 đơn vị (Decrmemt)

Cú pháp:

DEC đích

Đích : Reg, Mem.

Công dụng: Giảm n i dung c a đích đi 1 đ n v .

Ví dụ:

INC AL ; AL ← AL + 1 DEC AX ; AX ← AX - 1 INC bienC ; bienC ← bienC + 1

5. Lệnh nhân hai số nguyên

Cú pháp:

MUL ngu n

Ngu n: Reg, Mem

Công dụng: Nhân thanh ghi tích lũy (AX) v i toán h ng ngu n. Tùy vào kích

th c c a toánh ng ngu n mà CPU thực hi n phép nhân 8 hay 16 bit.

- Nhân 8 bit: dành cho toán h ng ngu n là 8 bit. Khi đó, CPU s lấy thanh ghi AL nhân v i toán h ng ngu n và l u k t quả vào AX.

- Nhân 16 bit: dành cho toán h ng ngu n là 16 bit. Khi đó, CPU s nhân thanh ghi AX v i toán h ng ngu n và l u k t quả vào cặp thanh ghi DX và AX (nghĩa là kết quả có 32 bit, 16 bit cao lưu vào DX, còn 16 bit thấp lưu vào AX)

Ví dụ:

MUL BL ; AX ← AL * BL (nhân 8 bit)

MUL BX ; DX:AX ← AX * BX (nhân 16 bit)

MUL [1235h] ; AX ← AL * M[DS:1235h] (nhân 8 bit)

6. Lnh chia hai số nguyên

Cú pháp:

DIV ngu n

Công dụng: lấy thanh ghi tích lũy (s b chia) chia cho ngu n (s chia). Tùy vào kích th c c a toán h ng ngu n mà CPU thực hi n phép chia 8 hay 16 bit.

- Chia 8 bit: dành cho toán h ng ngu n là 8 bit. Khi đó, CPU s lấy thanh ghi AX chia cho toán h ng ngu n. Th ng s c a k t quả đ c l u vào AL còn phần d l u vào AH.

- Chia 16 bit: dành cho toán h ng ngu n là 16 bit. Khi đó, CPU lấy cặp thanh ghi DX:AX (s 32 bit) chia cho toán h ng ngu n. Th ng s c a k t quả đ c l u vào AX còn phần d thìl u vào DX.

Ví dụ:

DIV DL ; AL, AH ← AX ÷ DL DIV BX ; AX, DX ← DX:AX ÷ BX

6.3.4. Nhóm l nh logic và ghi dch

1. AND, OR, XOR, TEST: Và, Hoặc, C ng không nh , Kiểm tra bit (adsbygoogle = window.adsbygoogle || []).push({});

Cú pháp:

AND đích, ngu n OR đích, ngu n XOR đích, ngu n TEST đích, ngu n

Ngu n: Reg, Mem hay Immed. Đích: Reg, Mem.

Công dụng: Thực hi n phép toán logic (and, or, xor) theo t ng bit t ng ng gi a toánh ng đích và toán h ng ngu n, l u gi k t quả toán h ng đích.

- L nh TEST thực hi n kiểm tra bit, gi ng l nh AND nh ng không l u gi l i k t quả mà k t quả c a phép toán ch ảnh h ng đ n các c tr ng thái.

Ví dụ:

MOV AL, 01101110b ; AL ← 01101110b

AND AL, 00110110b ; AL ← AL AND 01101110b (AL=00100110b)

XOR AX, AX ; AX ← AX XOR AX (Kết quả: AX = 0)

AND DL, 11000011b ; Xóa 4 bit gi a trong thanh ghi DL

;K t quả kiểm tra s ảnh h ng lên c Zero (ZF)

2. NOT Đảo bit (Lấy Bù 1)

Cú pháp:

NOT đích

Đích: Reg, Mem

Công dụng: Đảo ng c t ng bit (hay lấy bù 1) toán h ng đích.

Ví dụ:

MOV AH, 0Fh ; AH ← 0Fh (00001111b) NOT AH ; AH = 0F0h (11110000b)

3. SHL Dịch trái logic ( Shift Left Logical)

Cú pháp:

SHL đích, 1 SHL đích, CL

Đích: Reg, Mem

Công dụng: D ch toán h ng đích sang trái, có thể d ch 1 bit hoặc nhi u h n 1 bit, n u nhi u h n 1 bit thì thanh ghi CL ch a s bit d ch. s 0 đ c s dụng để làm đầy, còn bit b đẩy ra ngoài lần l t đ c đ a vào c Carry (CF).

Ví dụ:

MOV AL, 01101101b ; AL = 01101101b

SHL AL, 1 ; AL = 11011010b và CF=0

4. SHR (logical shift right) dịch phải logic.

Cú pháp:

SHR đích, 1 SHR đích, CL

Công dụng: Gi ng l nh SHL nh ng bây gi d ch toán h ng đích sang phải (adsbygoogle = window.adsbygoogle || []).push({});

Ví dụ:

MOV AL, 01101101b ; AL = 01101101b

SHR AL, 1 ; AL = 00110110b và CF=1

5. SAL (Shift arithmetic left): dịch trái số học

SAL đích, 1 SAL đích, CL Đích: Reg, Mem Công dụng: Gi ng l nh SHL Ví dụ: MOV AL, 01101101b ; AL = 01101101b SAL AL, 1 ; AL = 11011011b và CF=0

6. SAR (Shift arithmetic right) : dịch phải số học

Cú pháp:

SAR đích, 1 SAR đích, CL

Đích: Reg, Mem

Công dụng: L nh này gi ng SHR nh ng MSB (bit cao nhất – bit dấu) đ c s dụng để làm đầy (bảo toàn bit MSB –Bit dấu).

Ví dụ:

MOV AL, 01101101b ; AL = 01101101b

SAR AL, 1 ; AL = 00110110b và CF=1

7. ROL (Rotate left) : quay vòng sang trái

Cú pháp:

ROL đích, 1 ROL đích, CL

Công dụng: Gi ng SHL, nh ng thực hi n vi c quay vòng, Bit b đẩy ra ngoài đ c lấy vào c CF và đi n vào phần tr ng c a đích

Ví dụ:

MOV AL, 01101101b ; AL = 01101101b ROL AL, 1 ; AL = 11011010b và CF=0

8. ROR (Rotate right) : Quay vòng sang phải

Cú pháp:

ROR đích, 1 ROR đích, CL

Đích: Reg, Mem

Công dụng: L nh nầy gi ng ROL nh ng quay vòng sang phải.

Ví dụ:

MOV AL, 01101101b ; AL = 01101101b

SAR AL, 1 ; AL = 00110110b và CF=1

9. RCL (Rotate through carry left): Quay trái qua cờ Carry

Cú pháp:

RCL đích, 1 RCL đích, CL (adsbygoogle = window.adsbygoogle || []).push({});

Công dụng: Gi ng nh l nh ROL nh ng có sự tham gia c a c carry (CF). Bit b đẩy ra ngoài đi n vào c CF, Giá tr trong c CF lần l t đi n vào phần tr ng c a đích. C CF cũng là 1 bit tham gia vào vòng quay

10. RCR (Rotate through carry right): Quay vòng qua cờ sang phải

Cú pháp:

RCR đích, 1 RCR đích, CL

Đích: Reg, Mem

Công dụng: Gi ng RCL nh ng quay vòng sang phải.

6.3.5. Nhóm l nh vào ra ngo i vi.

1. IN - Lấy s li u t ngo i vi.

Cú pháp: IN AL, đ a ch c ng 8 bít IN AL, DX ; DX ch a đ a ch c ng 16 bit

Ý nghĩa: Lấy d li u ngo i vi có đ a ch 8 bit đ a vào thanh ghi AL. N u đ a

ch c a

ngo i vi là 16 bít thì phải dùng DX ch a đ a ch này.

Ví dụ : - Đọc d li u ngo i vi 3Fh

IN AL, 3Fh ; AL ← port(3Fh) (3Fh là địa chỉ c ng 8 bít)

- Đọc d li u ngo i vi 3F8h

MOV DX, 3F8h ; DX ← 3F8h (3F8h là địa chỉ c ng 16 bit)

2. OUT - Đ a s li u ra ngo i vi.

Cú pháp: OUT đ a ch c ng 8 bít, AL ; port(8 bit) ← AL OUT DX, AL ; port(DX) ← AL

Ý nghĩa: Gi ng l nh IN nh ng là xuất d li u trong AL ra ngo i vi.

Ví dụ: MOV DX, 04A5h ; DX ← 04A5h

OUT DX, AL ; port(DX) ← AL

6.3.6. Nhóm l nh h th ng

Nhóm l nh h th ng bao g m các l nh đi u khiển ho t đ ng c a CPU hay thi t lập giá tr các c . Các l nh này không có toán h ng, do đó cú pháp c a l nh rất đ n giản ch g m các tác vụ l nh sau:

CLC ; Xóa c CF (CF = 0) –Clear Carry flag

CMC ; Đảo ng c c CF – Complement Carry flag

CLD ; Xóa c h ng (DF=0) –Clear Diretion flag

STD ; Thi t lập c h ng (DF=1) –Set Diretion flag

Một phần của tài liệu Giáo trình kiến trúc máy tính và hợp ngữ (Trang 126)