Gi¸o tr×nh VI xö lý TỔng quan về CÁc bộ VI xử LÝ CỦa intel



tải về 0.85 Mb.
trang3/6
Chuyển đổi dữ liệu23.08.2016
Kích0.85 Mb.
#25990
1   2   3   4   5   6

2.5. BỘ ĐỒNG XỬ LÝ TOÁN 80X87


2.5.1. Sơ lược về các số thực

2.5.2. Cấu trúc của 8087

Các bộ đồng xử lí toán (methematical co-processor) 80x87 trợ giúp cho CPU trong việc tính các biểu thức toán với dấu phẩy động như cộng, trừ, nhân, chia các dấu phảy động; tính căn bậc hai và lôgarit v.v… Các bộ đồng xử lí thực hiện các phép toán này nhanh hơn nhièu trong CPU. Trong bảng 12, hãng Intel cho một so sánh thời gian chạy (usec) một phép toán giữa 8087và 8086 ở tốc độ đồng hồ 8MHz, ta thấy rằng tốc độ tính toán được tăng lên từ 50 đến 500 lần.

Nó bao gồm một đơn vị điều khiển CU (control unit) dùng để điều khiển bus và đơn vị số học NU (numerical unit). Đơn vị NU thực hiện các phép tính dấu phảy động trong các mạch tích luỹ thừa (exponent module) và mạch tính phần định trị (mantissa module). Khác với 8086, thay vì cho các thanh ghi rời rạc là các ngăn xếp thanh ghi.

Đơn vị điều khiển nhận và giải mã lệnh, đọc và viết các toán hạng và chạy các lệnh điều khiển riêng của 8087. Do vậy, CU có thể đồng bộ với CPU trong khi NU đanh làm các công việc tính toán. CU bao gồm bộ điều khiển bus, bộ đệm số liệu và hàng nhận lệnh trước. Ngay sau khi PC được reset, bằng các đường BHE/S7, bộ đồng xử lí kiểm tra xem nó có được nối với CPU không. 8087 se điều chỉnh độ dài của hàng nhận lệnh trước cho phù hợp với độ dài trong 8086 (6byte). Bằng việc đồng bộ với CPU, các byte như nhau (và do đó cũng là các lệnh như nhau) được hiện diện trong các hàng nhận lệnh trước của cả 8087 và 8086. Tuy nhiên chúng có những điểm khác nhau căn bản:

- 8087 không thể chạy các lệnh của 8086 và ngược lại trong khi các lệnh cho hai bộ xử lí này được trộn lẫn trong một đường lệnh. Do vậy các lệnh của 8087 luôn được bắt đầu bằng chuỗi bit 11011 (27d) và được gọi là các lệnh ESC. Nói cách khác, các lệnh và tiền tố của CPU 8086 có thể bắt đầu với mọi số khác với 11011.

- Đơn vị điều khiển và số học của 8087 tạo một ngăn xếp các thanh ghi với các thanh ghi 80 bit từ R0 đến R7 cũng như các thanh ghi đieu khiển và trạng thái


CHƯƠNG 3: CẤU TRÚC LẬP TRÌNH ASSEMBLY


3.1. TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH ASSEMBLY

3.1.1. Khái niệm

Hợp ngữ là một ngôn ngữ bậc thấp, sử dụng tập lệnh của bộ vi xử lý và có thể tác động trực tiếp đến các thành phần bên trong của bộ vi xử lý. Mỗi một lệnh của hợp ngữ có quan hệ một - một với một lệnh mã máy.

Vì vậy, việc lập trình với hợp ngữ đòi hỏi người lập trình phải hiểu rõ cấu trúc bên trong, hoạt động, tập thanh ghi và tập lệnh của bộ vi xử lý.

Hình 2.1: Vị trí của hợp ngữ trong các máy tính IBM-PC

Liên quan đến việc tạo ra một chương trình hợp ngữ, có một số khái niệm:

- Trình hợp dịch (Assembler): là một chương trình chuyển đổi các chương trình mã nguồn từ hợp ngữ thành ngôn ngữ máy.

- Trình liên kết (Linker): là một chương trình có khả năng tập hợp các tệp tin đã được hợp dịch lại thành một tệp tin mã máy.

- Trình gỡ rối (Debuger): Là một chương trình có khả năng dịch ngược các lệnh của một chương trình mã máy. Nó còn cho phép người lập trình thực hiện sửa lỗi thuật toán cho các chương trình mã máy.



3.1.2. So sánh hợp ngữ với các ngôn ngữ bậc cao

Hợp ngữ là một ngôn ngữ lập trình sử dụng các lệnh của bộ vi xử lý, vì vậy, nó khó hơn so với các ngôn ngữ lập trình bậc cao. Mặt khác, hợp ngữ có thể tác động trực tiếp tới cấu trúc bộ vi xử lý và các thành phần phần cứng khác mà các ngôn ngữ lập trình khác khó có thể thực hiện được.

Một chương trình viết bằng hợp ngữ thường có kích thước nhỏ hơn một chương trình viết bằng ngôn ngữ bậc cao có cùng chức năng.

Việc dịch và chạy một tệp chương trình nguồn của hợp ngữ cũng phức tạp hơn so với một chương trình viết bằng ngôn ngữ bậc cao.

Việc lập trình bằng hợp ngữ thường khó, nhưng chúng ta cũng sẽ hiểu rõ hơn về việc xử lý của máy tính và hiểu rõ nguyên tắc của việc lập trình trong các ngôn ngữ bậc cao.

3.2. CÁC ĐOẠN TRONG MỘT CHƯƠNG TRÌNH

Một chương trình khi thực hiện, nó sẽ được nạp vào bộ nhớ với 3 đoạn: Đoạn mã, đoạn ngăn xếp và đoạn dữ liệu. Mỗi đoạn này có thể có độ dài tối đa là 64K với địa chỉ đầu đoạn là 0000h và địa chỉ offset cuối của đoạn là FFFFh.

Trong đó:



a/ Đoạn mã được sử dụng để chứa các mã lệnh của chương trình với các mã lệnh nhị phân. Thường người ta sử dụng cặp thanh ghi CS:IP để truy xuất tới các ô nhớ chứa lệnh cần thao tác.

Trong lập trình với hợp ngữ, người ta có thể mô tả đoạn mã với việc khai báo vị trí bắt đầu của đoạn là:.CODE

b/ Đoạn dữ liệu

Đoạn này được sử dụng để chứa các dữ liệu của chương trình. Mỗi một biến sử dụng đều được chương trình dịch chuyển thành một địa chỉ ô nhớ nhất định và tại vị trí của ô nhớ này sẽ chứa nội dung của biến khi thực hiện chương trình.

Trong lập trình với hợp ngữ, người ta có thể mô tả đoạn dữ liệu với việc khai báo vị trí bắt đầu của đoạn là:.DATA

c/ Đoạn ngăn xếp

Đoạn này được sử dụng để chứa dữ liệu truy xuất theo phương thức "Vào trước Ra sau - First In Last Out - FILO"

Trong lập trình với hợp ngữ, người ta có thể mô tả đoạn ngăn xếp với việc khai báo bằng một tên:.Stack với độ dài đoạn ngăn xếp. Thường thì độ dài tối đa là 256 byte.

3.3. CẤU TRÚC CHUNG CỦA MỘT LỆNH ASSEMBLY

Một lệnh của hợp ngữ dù đơn giản hay phức tạp đều phải có đầy đủ một trong các thành phần sau:

[Tên] [Mã lệnh] [Các toán hạng] [;chú thích]

Trong đó:

Tên - có thể là tên một chương trình con, một macro, một nhãn hoặc một thành phần nào đó.

Mã lệnh - Cơ bản trường này chứa mã lệnh dưới dạng mã gợi nhớ. Có thể là lệnh thật hoặc lệnh giả.

Nếu là lệnh thật thì đây là các lệnh của bộ vi xử lý.

Nếu là các lệnh giả thì đây là các dẫn hướng của chương trình dịch. Ví dụ PROC, MACRO, ENDP, ENDM, SEGMENT, ENDS...

Các toán hạng - Là các thành phần mà các lệnh sử dụng để thực hiện lệnh.

Nếu là các lệnh thật thì đây chính là các toán hạng của lệnh. Với bộ vi xử lý 8086/8088, các toán hạng này có thể là 0,1 hoặc 2.

Nếu là các lệnh giả thì đây là các tham số. Số lượng tham số tuỳ thuộc vào việc khai báo các dẫn hướng.

Chú thích - là lời giải thích để người sử dụng hiểu rõ hơn về lệnh. Lời chú thích phải được bắt đầu bởi dấu (;) và chúng sẽ không được chương trình dịch xử lý.

Ví dụ:

Lap: ADD AL,[BX] ;Cộng giá trị trong AL với ô nhớ có địa chỉ là DS:BX.



;Kết quả được đưa vào thanh ghi AL.

Với ví dụ trên, thi lap la tên một nhãn và kết thúc bằng dấu (:); ADD là lệnh thực hiện phép cộng; AL và [BX] là hai toán hạng với qui định nếu tên thanh ghi hoặc một giá trị hằng nằm trong dấu [] thì đó là địa chỉ OFFSET của ô nhớ chứa dữ liệu cần thao tác; các thành phần sau dấu (;) chỉ là lời chú thích.

3.4. KHAI BÁO DỮ LIỆU VÀ KIỂU DỮ LIỆU

Như chúng ta đã thấy qua hai ví dụ trên, khi khai báo dữ liệu cho chương trình, người ta thường sử dụng toán tử DB. Nhưng, trên thực tế, các toán tử khác cũng có thể được dùng đến để khai báo cho các dữ liệu có kiểu khác nhau.

DB - Define Byte - Định nghĩa biến kiểu Byte

DW - Define Word - Định nghĩa biến kiểu Word

DD - Define Double Word - Định nghĩa biến kiểu Double Word

DT - Define Ten Byte - Định nghĩa biến kiểu 10 byte

EQU - Equal (Bằng) - Khai báo một hằng, địa chỉ cổng xác định.

Vậy, chúng ta có thể sử dụng các toán tử trên để khai báo cho các biến và hằng ra sao? Thể hiện các dạng cấu trúc dữ liệu như thế nào?



3.4.1. Biến byte

Biến kiểu byte sẽ chiếm 1 byte trong bộ nhớ. Hướng dẫn chương trình dịch để định nghĩa biến kiểu byte có dạng tổng quát như sau:

Tên BD giá_trị_khởi_tạo

Ví dụ: so1 DB 3Eh

Trong ví dụ trên, so1 là một biến kiểu byte có giá trị khởi tạo là 3Eh. Song, đôi khi chúng ta không cần thiết phải khởi tạo giá trị cho biến, có thể sử dụng cách khai báo sau:

so2 DB ?


Cũng như các ngôn ngữ lập trình khác, một biến kí tự cũng được coi là một biến kiểu byte với mỗi một kí tự được thể hiện bằng mã ASCII của chúng từ 0 - FFh

Giả sử, muốn khai báo một biến kí tự và khởi tạo giá trị bằng ‘A’, ta có thể thực hiện bằng một trong hai cách sau:

Ch DB ‘A’ ;khởi tạo trực tiếp giá trị ‘A’

Hoặc: Ch DB 41h ;khởi tạo thông qua mã ASCII của ‘A’



3.4.2. Biến word

Để khai báo biến kiểu từ (Word), chúng ta có thể sử dụng cú pháp sau:

tên DW giá_trị_khởi_tạo

Cũng giống như việc khai báo biến kiểu byte, giá_trị_khởi_tạo có thể là dấu (?) để không khởi tạo giá trị cho biến.

Ví dụ:

1/ w1 DW 3FB4h ;khai báo biến w1 với giá trị khởi tạo là 3FB4h



2/ w2 DW ? ;không khởi tạo giá trị cho biến w2

3.4.3. Biến mảng

Mảng là một danh sách (dãy) các phần tử có cùng một kiểu với các giá trị (có thể) khác nhau. Vì vậy, để khai báo một mảng, chúng ta có thể thực hiện theo cú pháp sau:

Tên DB danh_sách_giá_trị_khởi_tạo ;khai báo mảng các phần tử kiểu byte

Tên DW danh_sách_giá_trị_khởi_tạo ;khai báo mảng các phần tử kiểu word

Ví dụ 1: mang1 DB 30,55,73,88,33

Giả thiết, mang1 được nạp vào bộ nhớ tại địa chỉ offset 23E5h. Khi đó, mảng này sẽ có các phần tử được khởi tạo và hình ảnh của chúng trong bộ nhớ như sau:



Tên phần tử

Giá trị khởi tạo

địa chỉ bộ nhớ

Mang10

Mang11


Mang12

Mang13


Mang14

30

55

73



88

33


23E5h

23E6h


23E7h

23E8h


23E9h

Ví dụ 2: mang2 DW 2BA3h,2748h,9843h,1F3Bh

Cũng với giả thiết mang2 được nạp vào bộ nhớ tại địa chỉ offset 23E5h. Khi đó hình ảnh của mảng này sẽ là:



Tên phần tử

Giá trị khởi tạo

địa chỉ bộ nhớ

Mang20

Mang22


Mang24

Mang26


2BA3h

2748h


9843h

1F3Bh


23E5h

23E7h


23E9h

23EBh


Chúng ta cũng có thể khởi tạo các giá trị liên tiếp giống nhau. Khi đó, ta cũng có thể sử dụng toán tử DUP. Ví dụ:

Mang3 DB 100 DUP(5Ch)

Mang3 là một mảng có 100 phần tử với các giá trị khởi tạo của các phần tử đều là 5Ch

Mang4 DB 3,4,2,10 DUP(0)

Mang4 có 13pt trong đó 3 phần tử đầu lần lượt là 3,4,2; các phần tử còn lại có giá trị 0.

Với mảng hai chiều, việc định nghĩa chúng có thể thực hiện theo cú pháp sau:

Tên DB (DW) giá_trị_khởi_tạo_hàng_1

giá_trị_khởi_tạo_hàng_2

.......................................

giá_trị_khởi_tạo_hàng_n

Ví dụ:

Mang_2_chieu DB 10 DUP(0)



10 DUP(50)

10 DUP(100)

10 DUP(150)

Khai báo một mảng hai chiều có 4 hàng 10 cột với giá trị khởi tạo của hàng 0 là 0, hàng 1 là 50, hàng 2 là 100, hàng 3 là 150.



3.4.4. Biến chuỗi

Biến chuỗi hay xâu kí tự thực chất chỉ là một mảng (1 chiều) các phần tử là các kí tự trong đó mỗi kí tự có thể được biểu diễn bằng một số là mã ASCII hoặc là kí tự nằm trong dấu ' ' hoặc " ". Vì vậy, ta có thể khai báo bằng một trong các cách sau:

Xau1 DB 'Chao'

Xau2 DB 'C','h','a','o'

Xau3 DB 43h,68h,61h,6Fh

3.5. KHUNG CỦA MỘT CHƯƠNG TRÌNH ASSEMBLY

Một chương trình hợp ngữ thể hiện các đoạn dành cho chúng rõ ràng với việc sử dụng kích thước bộ nhớ phù hợp và cú pháp của các lệnh rõ ràng tuân theo một cú pháp chung, mặc dù, đó là lệnh thật hoặc lệnh giả. Để thể hiện một chương trình đó, người ta đưa ra 2 dạng cấu trúc. Bao gồm:

3.5.1. Cấu trúc chương trình để dịch ra tệp *.EXE

Một chương trình *.EXE thường thể hiện rõ ràng 3 đoạn: mã, dữ liệu, ngăn xếp. Sau khi được biên dịch (Assembled) và liên kết (Linked), chúng có thể được thực thi trực tiếp từ dòng lệnh của DOS như các chương trình khác. Cấu trúc cơ bản của một chương trình dạng này như sau:

TITLE ten_chuong_trinh

.MODEL

.STACK

.DATA


.CODE


Main PROC

;Khởi tạo cho DS hoặc/và ES

MOV AX,@data

MOV DS,AX

;MOV ES,AX

;Các lệnh của chương trình chính

;Trở về DOS bằng việc sử dụng chức năng 4Ch của ngắt 21h

MOV AH,4Ch

INT 21h

Main ENDP



;Các chương trình con (nếu có)

END Main


Trong cấu trúc trên, tại dòng cuối cùng xuất hiện dẫn hướng chương trình dịch END và MAIN để kết thúc toàn bộ chương trình. Main chính là nơi bắt đầu các lệnh của chương trình trong đoạn mã.

Khi một chương trình *.EXE được nạp vào bộ nhớ, DOS sẽ tạo ra một mảng gồm 256 byte cho PSP (Program Segment Prefix - Tiền tố chương trình). PSP được sử dụng để chứa các thông tin liên quan đến chương trình và đặt ngay vào trước phần chứa mã lệnh của chương trình.

Tại dòng.MODEL chúng ta có thể khai báo qui mô sử dụng bộ nhớ phù hợp cho từng chương trình. Có thể là một trong các thành phần sau:


Kiểu kích thước

Mô tả

Tiny (Hẹp)

mã lệnh và dữ liệu gói gọn trong một đoạn

Small (nhỏ)

mã lệnh gói gọn trong một đoạn, dữ liệu nằm trong một đoạn

Medium (Trung bình)

mã lệnh không gói gọn trong một đoạn, dữ liệu nằm trong một đoạn

Compact (Gọn)

mã lệnh gói gọn trong một đoạn, dữ liệu không gói gọn trong một đoạn

Larg (rộng)

mã lệnh không gói gọn trong một đoạn,

dữ liệu không gói gọn trong một đoạn,

không có mảng nào lớn hơn 64K


Huge (Đồ sộ)

mã lệnh không gói gọn trong một đoạn,

dữ liệu không gói gọn trong một đoạn,

các mảng có thể lớn hơn 64K


Chương trình dịch sẽ dịch tên @data thành các giá trị số của đoạn dữ liệu và đưa các thông số của dữ liệu vào thanh ghi DS và ES.

Để hiểu rõ hơn về cấu trúc chương trình này, chúng ta lấy một ví dụ minh hoạ sau:

Ví dụ: Viết một chương trình hợp ngữ thực hiện in hai chuỗi kí tự trên hai dòng màn hình.

title ct


.MODEL Small

.STACK 100h

.DATA

chao DB 'Chao cac ban sinh vien! $'



hoi DB 'Cac ban muon hoc mon Vi xu ly khong? $'

.CODE


main PROC

MOV AX,@DATA ;Nap du lieu

MOV DS,AX ;cho DS

;Xoa man hinh bang chuc nang 0 cua ngat 10h

MOV AH,0

MOV AL,3 ;che do text 80x25

INT 10h

;In chuoi thu nhat ra man hinh



MOV AH,9

MOV DX,offset chao

INT 21h

;Dua con tro xuong dong tiep theo va ve dau dong



MOV AH,2

MOV DL,13 ;xuong dong

INT 21h

MOV DL,10 ;ve dau dong



INT 21h

;In chuoi thu hai ra man hinh

MOV AH,9

MOV DX,offset hoi

INT 21h

;Ket thuc chuong trinh va tro ve DOS



MOV AH,4Ch

INT 21h


main ENDP

END main


Như vậy, ta thấy chương trình trên là một chương trình nhỏ nên sử dụng qui mô bộ nhớ nhỏ (Small). Kích thước ngăn xếp là 256 byte. Dữ liệu cho chương trình có hai chuỗi là chao và hoi. Các chuỗi này đều được khai báo với toán tử DB.

Đặc biệt, các lệnh hoặc nhóm lệnh của chương trình trên có giải thích để người đọc và chính bản thân người lập trình (khi đọc lại) cũng sẽ dễ hiểu hơn.



3.5.2. Cấu trúc chương trình để dịch ra tệp *.COM

Một chương trình *.COM thường có đặc điểm khác biệt với các chương trình *.EXE là chúng chỉ có thể sử dụng một đoạn duy nhất của bộ nhớ để chứa mã, dữ liệu và ngăn xếp. Vì vậy, qui mô sử dụng bộ nhớ của các chương trình dạng này thường là Tiny.

Cấu trúc cơ bản của dạng chương trình này như sau:

Title Cautruc_COM

.Model Tiny

.Code


org 100h

Start: JMP Continue

;Dinh nghia cac bien, hang

Continue:

Main PROC

;Cac lenh cua chuong trinh chinh

INT 20h

Main ENDP



;Cac chuong trinh con (neu co)

End Start

Với dạng cấu trúc này, khi dịch chương trình, chương trình dịch sẽ đưa ra thông báo "No Stack Segment".

Trong cấu trúc trên, ta thấy, ở ngay đầu chương trình đoạn mã là lệnh giả ORG (Origin: điểm xuất phát) và lệnh JMP (nhảy). Lệnh giả ORG 100h dùng để gán địa chỉ bắt đầu cho chương trình tại địa chỉ 100h (256) trong đoạn mã, chừa lại đoạn bộ nhớ 256byte cho PSP.

Lệnh JMP sau nhãn START dùng để nhảy qua phần bộ nhớ dành cho việc định nghĩa và khai báo dữ liệu. Đích của lệnh nhảy là phần đầu của chương trình chính.

Hình ảnh của chương trình được thể hiện trong bộ nhớ được thể hiện như trong hình vẽ sau:



Địa chỉ lệch

0000h

Đoạn đầu chương trình (PSP)




0100h

JMP Continue

IP




Dữ liệu cho chương trình




FFFEh

Continue:

(Chiều tiến của mã&dữ liệu)

***

(Chiều tiến của ngăn xếp)



SP

Như vậy, một chương trình *.COM có một số hạn chế sau:

  • Dung lượng cực đại của chương trình chỉ giới hạn trong một đoạn 64K.

  • Chương trình chỉ được phép sử dụng ngăn xếp với kích thước nhỏ. Nếu không, nó sẽ chiếm nhiều phần trong đoạn mã lệnh.

Chương trình *.COM thường được kết thúc bởi lệnh INT 20h.

Sau đây chúng ta xét một ví dụ để hiểu rõ hơn về việc sử dụng cấu trúc trên trong lập trình hợp ngữ.

Chương trình được viết như sau:

Title Cautruc_COM

.Model Tiny

.Code


org 100h

Start: JMP Continue

chao DB 'Chao cac ban sinh vien lop TK1$'

hoi DB 'Cac ban co hoc mon Vi xu ly khong? $'

Continue:

Main PROC

;Xoa man hinh bang chuc nang 0 cua ngat 10h

MOV AH,0


MOV AL,3 ;che do text 80x25

INT 10h


;In chuoi thu nhat ra man hinh

MOV AH,9


MOV DX,offset chao ;tro toi dia chi offset cua chuoi

INT 21h


;Dua con tro xuong dong tiep theo va ve dau dong

MOV AH,2


MOV DL,13 ;xuong dong

INT 21h


MOV DL,10 ;ve dau dong

INT 21h


;In chuoi thu hai ra man hinh

MOV AH,9


MOV DX,offset hoi

INT 21h


INT 20h

Main ENDP

End Start

Chúng ta có thể nhận xét rằng một chương trình *.COM không cần phải nạp dữ liệu vào DS vì chương trình dạng này có mã, dữ liệu và ngăn xếp trong cùng một đoạn.

3.6. CÁCH TẠO VÀ CHẠY MỘT CHƯƠNG TRÌNH HỢP NGỮ

Một chương trình viết bằng ngôn ngữ bậc cao có thể chạy trực tiếp trong môi trường của chúng. Song, với ngôn ngữ lập trình bậc thấp (hợp ngữ) thì việc chạy chương trình cần phải thông qua việc hợp dịch (Assembled), liên kết (Linked). Người ta đã đưa ra các bước để soạn thảo, dịch và chạy chương trình như sau:

Bước 1: Soạn thảo văn bản chương trình

Trong bước này, ta có thể thực hiện bằng một trình soạn thảo văn bản bất kỳ nào như EDIT, NCEDIT, TURBO PASCAL, C, NOTEPAD, hoặc WINWORD... nhưng, cần phải ghi lại với phần mở rộng là *.ASM.

Bước 2: Hợp dịch chương trình nguồn ra các tệp đối tượng *.OBJ

Trong bước này, ta có thể sử dụng trình MASM (MicroSoft Assembler) hoặc TASM (Turbo Assembler) theo cú pháp sau:

MASM  tên_tệp[.phần_mở_rộng] 

Hoặc: TASM  tên_tệp[.phần_mở_rộng] 

Sau khi dịch, nếu có lỗi cú pháp, máy sẽ báo dòng gây lỗi và mã lỗi. Khi đó ta có thể quay lại bước 1 để sửa tệp nguồn và dịch lại cho đến khi không có lỗi.

Bước 3: Liên kết các tệp đối tượng thành tệp chương trình *.EXE

Có thể sử dụng trình liên kết LINK hoặc TLINK (Turbo) theo cú pháp sau:

LINK  tệp_đt1[+tệp_đt2+...+tệp_đtn] 

Hoặc: TLINK  tệp_đt1[+tệp_đt2+...+tệp_đtn] 

Bước 4: Nếu chương trình viết dưới dạng cấu trúc *.COM thì thực hiện dịch sang dạng *.COM bằng cú pháp sau:

EXE2BIN  tên_tệp_exe  tên_tệp_com.COM 

Nếu tệp viết để dịch ra chương trình *.EXE thì bỏ qua bước này

Bước 5: Chạy tệp chương trình vừa dịch

Tên_tệp_chương_trình 

Với các bước thực hiện như trên, chúng ta có thể mô phỏng bằng lưu đồ sau:

Ví dụ: Soạn thảo một chương trình đơn giản, sau đó dịch và chạy chương trình này

Bước 1: Soạn thảo văn bản chương trình

Bước 2: Dịch ra tệp.OBJ



Nếu có lỗi như hình trên, quay lại bước 1. Cứ như vậy cho đến khi không còn lỗi



Bước 3: Liên kết các tệp *.OBJ thành tệp chương trình.



Bước 4: Vì tệp chương trình có cấu trúc *.EXE, nên ta có thể bỏ qua bước này.

Bước 5: Chạy tệp chương trình

Vidu_exe 




tải về 0.85 Mb.

Chia sẻ với bạn bè của bạn:
1   2   3   4   5   6




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương