Danh mục

Bài giảng Hợp ngữ và lập trình hệ thống: Chương 2 - Phạm Công Hòa

Số trang: 33      Loại file: pdf      Dung lượng: 0.00 B      Lượt xem: 12      Lượt tải: 0    
Hoai.2512

Xem trước 4 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Chương 2: Liên kết ngôn ngữ assembly với ngôn ngữ bậc cao. Chương này cung cấp những nội dung kiến thức sau: Ngôn ngữ C và hợp ngữ, ngôn ngữ Pascal và hợp ngữ, ngôn ngữ C++ và hợp ngữ. Mời các bạn cùng tham khảo.
Nội dung trích xuất từ tài liệu:
Bài giảng Hợp ngữ và lập trình hệ thống: Chương 2 - Phạm Công HòaLOGO HỢP NGỮ và LẬP TRÌNH HỆ THỐNG GV: Phạm Công Hòa Tel: 091.552.9889 Email: conghoaf1@gmail.comNỘI DUNG HỌC PHẦN I NGÔN NGỮ ASSEMBLER (ASM) VÀ CÁCH LẬP TRÌNH II LIÊN KẾT NGÔN NGỮ BẬC CAO VỚI ASM III LẬP TRÌNH HỆ THỐNGII LIÊN KẾT NGÔN NGỮ BẬC CAO VỚI ASM 1. Ngôn ngữ C và hợp ngữ 2. Ngôn ngữ Pascal và hợp ngữ1. Ngôn ngữ C và hợp ngữ- Mục đích: Tận dụng được sức mạnh của hai loại ngôn ngữ.- Để liên kết các đoạn chương trình hợp ngữ vào ngôn ngữ C/C++ (hoặcPascal) thì người ta thường sử dụng một trong hai cách: + Sử dụng inline assembly (viết dòng lệnh ASM trong C/C++). + Viết tách biệt các module.1. Ngôn ngữ C và hợp ngữ1.1. Sử dụng inline assembly- Chèn các khối lệnh hợp ngữ vào chương trình được viết bằng ngôn ngữ C- Cú pháp (Turbo C): asm { Các lệnh ASM } Chú ý: Từ khóa asm và dấu ‘{‘ phải cùng nằm trên một dòng.1. Ngôn ngữ C và hợp ngữ1.1. Sử dụng inline assembly-Với môi trường DevC, Visual C++ ta sử dụng các thanh ghi 32 bit (EAX,EBX,…). Đoạn lệnh có cú pháp: asm(assembly code);hoặc: __asm__ (assembly code);1. Ngôn ngữ C và hợp ngữ1.1. Sử dụng inline assembly- Đoạn lệnh sau tính và hiện tổng 2 số thực ra màn hình (DevC) float a,b,tong; printf(Nhap 2 so thuc: ); scanf (%f%f, &a, &b ); __asm__ (fld %1; fld %2; faddp; fstp %0;:=g(tong):g(a),g(b)) ; printf(%f+%f = %f ,a,b,tong);1. Ngôn ngữ C và hợp ngữ- Ví dụ 1: Viết chương trình C khai báo và khởi gán 1 xâu ký tự. Dùng cáclệnh ASM hiện xâu ký tự ra màn hình. (tệp vd01.c) #include void main() { char s[]=Hello World!$; clrscr(); asm{ lea dx,s mov ah,9 int 21h } getch(); }1. Ngôn ngữ C và hợp ngữ- Chú ý: Các biến được khai báo trong C được coi như các biến “toàn cục”sử dụng chung cho cả C và các inline - assembly. Ví dụ chương trình dướiđây tính tổng 2 số nguyên x và y rồi lưu kết quả vào biến sum. (tệp vd02.c) #include #include void main() { int x,y, sum; printf (“x = ”); scanf(“%d”,&x); printf (“y = ”); scanf(“%d”,&y); asm { mov ax,x add ax,y mov sum,ax } printf (“Tong la: %d”, sum); getch(); }1. Ngôn ngữ C và hợp ngữ Nhược điểm của phương pháp Inline Assembly: - Các lệnh nhảy trong phương pháp liên kết Inline Assembly chỉ có thể nhảy đến các nhãn C. - Inline assembly liên quan đến kích cỡ của các biến tự động của ngôn ngữ C. - Việc bảo vệ thanh ghi segment.1. Ngôn ngữ C và hợp ngữ Ví dụ về Inline Assembly • Ví dụ 3: (tệp vd03.c) Viết chương trình inline asm nhập 2 số nguyên a và b, hiện ra màn hình giá trị nhỏ nhất giữa a và b. • Ví dụ 4: (tệp vd04.c) Viết chương trình inline asm nhập một mảng N phần tử nguyên, tính và hiện tổng các số âm của mảng. Trong đó phần inline thực hiện chức năng (hàm) tính tổng âm.1. Ngôn ngữ C và hợp ngữ1.2. Viết tách biệt các module hợp ngữ và C - Đối với các chương trình lớn thì các module được tổ chức trong các file khác nhau. Ta có thể viết các module C và hợp ngữ hoàn toàn tách biệt, sau đó tiến hành dịch riêng rẽ từng module và liên kết chúng với nhau trước khi cho chạy. Cuối cùng ta thu được một file thực hiện được (exe) bằng cách trộn các file được viết bằng C và ASM. Tệp *.C Tệp *.ASM Liên kết tlink Tệp *.exe1. Ngôn ngữ C và hợp ngữ1.2. Viết tách biệt các module hợp ngữ và C tệp ngôn ngữ C tệp ngôn ngữ Assembly (file_name1.c) (file_name2.asm) Turbo C Compile Turbo Assemble Dịch Assembler Dịch tệp mã máy .obj tệp mã máy .obj (file_name1.obj) (file_name2.obj) Tlink TLINK Liên kết tệp thực hiện được dạng .exe (file_name1.exe)1. Ngôn ngữ C và hợp ngữ Các vấn đề cần phải giải quyết khi viết tách các module C và modulehợp ngữ  Module C: • Các biến/hàm khai báo toàn cục trong C cũng được hiểu là public trong các module asm. • Muốn sử dụng một nhãn (chương trình co ...

Tài liệu được xem nhiều: