Bài giảng Hợp ngữ và lập trình hệ thống: Chương 2 - Phạm Công Hòa
lượt xem 4
download
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.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Hợp ngữ và lập trình hệ thống: Chương 2 - Phạm Công Hòa
- LOGO 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.com
- NỘ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ỐNG
- II 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ặc Pascal) 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\n",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ác lệ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 *.exe
- 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 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à module hợ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 con bên ASM) phải khai báo với từ khóa extern: extern tên_biến/tên_hàm
- 1. Ngôn ngữ C và hợp ngữ Module hợp ngữ (asm): Phải sử dụng sự sắp xếp các đoạn bộ nhớ (segment) tương thích với ngôn ngữ C. Khai báo PUBLIC trước những nhãn (tên biến, tên hàm…) mà các file khác sẽ sử dụng đến. Khai báo EXTRN trước những biến ngoài được file này sẽ sử dụng đến. Thêm dấu _ (underscore) vào trước các nhãn, biến, hàm dùng chung.
- 1. Ngôn ngữ C và hợp ngữ Vấn đề truyền tham số: • Thông qua biến toàn cục. • Thông qua ngăn xếp.
- 1. Ngôn ngữ C và hợp ngữ Kiểu khai báo dữ liệu trong ngôn Kiểu khai báo dữ liệu trong ngữ C/C++ ngôn ngữ Assembly unsigned char, char, enum byte unsigned short, short, word unsigned int, int unsignd long, long, float dword double qword long double tword near* word far* dword 17
- 1. Ngôn ngữ C và hợp ngữ - Các bước chuẩn bị và dịch chương trình liên kết: + Xem chi tiết trong “Hướng dẫn cài đặt môi trường liên kết ASM và C” trên site môn học. • Soạn thảo tệp tepC.c (tệp của C) • Soạn thảo tệp tepASM.asm (tệp của ASM) - Sau khi soạn thảo xong 2 tệp trên, chạy tệp run.bat để dịch thành tệp kết quả (.exe)
- 1. Ngôn ngữ C và hợp ngữ Một số ví dụ Ví dụ 5: Viết chương trình liên kết giữa asm và C thực hiện: o Tệp asm: Tìm giá trị nhỏ nhất của 3 số nguyên a,b,c (a,b,c nhận từ module C truyền sang) o Tệp C: Nhập 3 số nguyên a,b,c. Gọi hàm tìm Min(a,b,c) bên asm và hiện giá trị nhỏ nhất ra màn hình. (demo: tệp vd05a.asm và vd05c.c) *)Chú ý: 2 tệp C và ASM phải đặt tên khác nhau)
- 1. Ngôn ngữ C và hợp ngữ Vấn đề về truyền tham số với các hàm ASM - Các hàm của ngôn ngữ C/C++ có thể có đối số hoặc không. - Các hàm của ngôn ngữ Assembly thuần túy (hàm và chương trình gọi nó đều được viết bằng ngôn ngữ Assembly) không có đối. => Người viết ngôn ngữ C đưa các tham số thực vào ngăn xếp và người viết hàm bằng ngôn ngữ Assembly phải vào ngăn xếp lấy các giá trị đó ra để xử lý. Hai vấn đề cần giải quyết: - Chuyển giao tham số như thế nào? - Việc sử dụng các thanh ghi và việc bảo tồn nó?
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Ngôn ngữ lập trình C++: Chương 1 - Trần Minh Châu
17 p | 252 | 54
-
Bài giảng môn học Kiến trúc máy tính - Lập trình hợp ngữ
64 p | 95 | 18
-
Bài giảng Kiến trúc máy tính (Computer Architecture): Chương 5 - Nguyễn Kim Khánh
116 p | 53 | 11
-
Bài giảng Kiến trúc và tổ chức máy tính: Chương 6 - ThS. Trần Quang Hải Bằng
31 p | 147 | 11
-
Bài giảng Thiết kế và lập trình web bằng ngôn ngữ ASP - Phần 2: HTML và JavaScript (Tiếp theo)
42 p | 34 | 10
-
Bài giảng Ngôn ngữ lập trình C - Võ Đức Hoàng
192 p | 37 | 7
-
Bài giảng Công cụ và môi trường phát triển phần mềm - GV. Nguyễn Trung Phú
95 p | 138 | 7
-
Bài giảng Hợp ngữ và lập trình hệ thống: Chương 1 - Phạm Công Hòa
95 p | 99 | 6
-
Bài giảng Thực hành kỹ thuật vi xử lý
11 p | 126 | 5
-
Bài giảng Ngôn ngữ lập trình C/C++ (Bài giảng tuần 8) – Nguyễn Hải Châu
4 p | 86 | 5
-
Bài giảng Hợp ngữ và lập trình hệ thống: Chương 0 - Phạm Công Hòa
7 p | 85 | 4
-
Bài giảng Logic mờ và ứng dụng - PGS.TS. Trần Văn Lăng
288 p | 79 | 4
-
Bài giảng Ngôn ngữ lập trình Pascal: Chương 12 - Cấu trúc dữ liệu - Kiểu tập hợp
12 p | 103 | 4
-
Bài giảng Bài 5: Ngôn ngữ lập trình - Ths Lê Đức Long, Nguyễn Khắc Văn
12 p | 91 | 3
-
Bài giảng Hệ thống máy tính và ngôn ngữ C - Chương 5: Lập trình hợp ngữ LC-3 (GV. Nguyễn Nhật Nam)
35 p | 53 | 3
-
Bài giảng Nhập môn về lập trình - Chương 5: Cấu trúc lặp
34 p | 91 | 3
-
Bài giảng Hệ thống máy tính và ngôn ngữ C: Chương 5 - TS. Nguyễn Phúc Khải
35 p | 6 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn