Thực thi 1 chương trình

Một phần của tài liệu kiến trúc máy tính 3 pdf (Trang 42 - 47)

) Các bước chính trong qua trình thực thi 1 chương

trình mã nguồn C

C program

Assembly language program

Object module Library module

Executable program

Compiler

Assembler

Linker

) Chương trình dịch (Compiler)

• Dịch chương trình mã nguồn C sang chương trình dạng hợp ngữ

• Trước đây, đa phần các hệ điều hành và assembler được viết bằng hợp ngữ do hạn chế về dung lượng bộ nhớ của máy tính và do các chương trình dịch làm việc kém hiệu quả

• Ngày nay, dung lượng bộ nhớ đã được phát triển đáng kể, các chương trình dịch cũng hoạt động tối ưu hơn nên đã có thể dịch ra những chương trình dạng hợp ngữ tốt không kém các chuyên gia hợp ngữ, nhất là đối với các chương trình lớn

) Assembler

• Có thể bổ sung vào tập lệnh các câu lệnh giả (pseudo-

instruction) không có trong kiến trúc tập lệnh nhưng có thể giúp cho việc lập trình trở nên hiệu quả hơn

move $t0 , $t1 thay cho add $t0 , $zero , $t1

) Assembler (cont’d)

• Các toán hạng tức thời có thể viết dưới dạng thập phân, dạng thập lục phân (0x …) hay dạng nhị phân (0b …)

• Assembler dịch chương trình dạng hợp ngữ sang object file, là tổ

hợp gồm các câu lệnh dạng mã máy, dữ liệu và những thông tin cần thiết để có thể sắp xếp các câu lệnh và dữ liệu một cách đúng

đắn trong bộ nhớ

• Một object file trên hệ điều hành Unix gồm 6 thành phần

* object file header Ö kích thước và vị trí của các thành phần còn lại

* text segment Ö chương trình dạng mã máy

* data segment Ö chứa các loại dữ liệu (tĩnh/động) đi theo chương trình

* relocation information Ö cho phép xác định địa chỉ tuyệt đối của câu lệnh và dữ liệu một khi chương trình được nạp vào bộ nhớ

* symbol table Ö lưu chứa các nhãn (label) chưa được định nghĩa

(adsbygoogle = window.adsbygoogle || []).push({});

) Linker

• Còn gọi là link editor, cho phép ghép các object file riêng lẻ lại với nhau thành một chương trình thống nhất có thể thực thi được gọi là executable file

• Quá trình ghép diễn ra theo 3 bước

* Xếp mã chương trình và dữ liệu lại với nhau

* Xác định địa chỉ cho các nhãn chương trình và dữ liệu

* So trùng các tham cứu nội và ngoại (internal/external reference)

• Một executable file có các thành phần gần giống với object file trừ

các phần: relocation information, symbol table và debugging information

• Các object file, ngoài các chương trình do người dùng (user) viết, còn có các trình con viết sẵn trong thư viện (library) do compiler cung cấp, do người dùng tạo lập hay từ các nguồn chuyên biệt

) Loader

• Một executable file lưu trên đĩa có thể được hệ điều hành đọc, nạp vào bộ nhớ và cho phép bắt đầu thực thi

• Công việc này, trên hệ điều hành UNIX, diễn ra theo các bước sau

* Đọc phần header để xác định kích thước của phần mã lệnh và dữ liệu * Dành ra 1 không gian địa chỉ đủ lớn trong bộ nhớ để chứa mã lệnh và

dữ liệu

* Chép mã lệnh và dữ liệu từ executable file vào bộ nhớ

* Chép các tham số đầu vào của chương trình chính vào bộ nhớ stack

* Khởi động trị cho các thanh ghi, trỏ stack pointer đến vị trí trống đầu tiên trong bộ nhớ

* Nhảy đến trình con start-up để chép các tham số đầu vào vào trong các thanh ghi tham số và sau đó gọi thực thi chương trình chính * Khi chương trình chính kết thúc , trình con start-up kết thúc thực thi

Bài tập

) 3.1 , 3.2 , 3.4 , 3.5 , 3.6 , 3.9

) 3.10 , 3.11

) 3.16

) 3.22

Computer Organization and Design: the hardware/software interface”,

John L. Hennessy & David A. Patterson, Second Edition, MORGAN KAUFMANN PUBLISHERS, INC. 1998

Một phần của tài liệu kiến trúc máy tính 3 pdf (Trang 42 - 47)