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
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 ...
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ìm kiếm theo từ khóa liên quan:
Lập trình hệ thống Hợp ngữ Ngôn ngữ assembly Ngôn ngữ bậc cao Ngôn ngữ C Ngôn ngữ PascalGợi ý tài liệu liên quan:
-
Luận văn: Nghiên cứu kỹ thuật giấu tin trong ảnh Gif
33 trang 147 0 0 -
Luận văn : Xây dựng chương trình sắp xếp lịch trực bác sĩ
61 trang 128 0 0 -
Giáo trình Lập trình C căn bản - HanoiAptech Computer Education Center
136 trang 117 0 0 -
Đồ án tốt nghiệp: Bảng LED ma trận điều khiển bằng ứng dụng Android
102 trang 116 0 0 -
LUẬN VĂN: Tìm hiểu kỹ thuật tạo bóng cứng trong đồ họa 3D
41 trang 104 0 0 -
Excel add in development in c and c phần 9
0 trang 102 0 0 -
Giáo trình Tin học đại cương: Phần 2 - Trần Đình Khang
118 trang 96 0 0 -
Luận văn : Quản lí bán hàng Trung tâm tin học Hàng Hải
81 trang 86 0 0 -
101 thuật toán chương trình C: Phần 2
130 trang 84 0 0 -
91 trang 81 0 0