01/10/2018, 15:29

Bài 1: Khái quát cách thực thi mã nguồn và mã máy

Đây là serial dành cho các bạn bắt đầu tìm hiểu về lập trình. Trước khi bắt đầu học một ngôn ngữ lập trình chúng ta cùng tìm hiểu sơ qua cách vận hành và thực thi lệnh của máy tính như thế nào. Có thể các bạn không cần biết vấn đề này thì vẩn có thể học và làm được một ngôn ngữ lập trình nào ...

Đây là serial dành cho các bạn bắt đầu tìm hiểu về lập trình. Trước khi bắt đầu học một ngôn ngữ lập trình chúng ta cùng tìm hiểu sơ qua cách vận hành và thực thi lệnh của máy tính như thế nào.

Có thể các bạn không cần biết vấn đề này thì vẩn có thể học và làm được một ngôn ngữ lập trình nào đó. Điều này không sai, tuy nhiên khi tiếp xúc và tiến xa vào các vấn đề chuyên sâu thì bài học này là cần thiết cho các bạn.

“Cây gốc vững thì không sợ bảo đó mà :)”

Rồi chúng ta bắt đầu:

Bài học chúng ta gồm 2 phần:

  1. Khái niệm về chương trình máy tính
  2. Các ngôn ngữ lập trình

=========================================================

1) Khái niệm về chương trình máy tính

  • CPU của máy tính được thiết kế để có thể thực hiện được các chương trình mã máy (machine code program) đã được hệ điều hành (HĐH) nạp vào RAM của máy tính.
  • Chương trình mã máy thường phải tương thích với từng họ máy cụ thể, bao gồm tập hợp các chỉ thị được viết bằng các lệnh CPU của họ máy đó, được lưu trên đĩa dưới dạng một tập tin mã thực thi (executable program file) của HĐH cụ thể.
  • Qui trình thực hiện:

B1. Người sử dụng (người dùng cuối – end user) ra lệnh thực hiện (chạy) chương trình.

B2. HĐH nhận được lệnh sẽ thực hiện:

Tìm và nạp tập tin mã thực thi của chương trình (nằm trên đĩa) vào RAM của máy   tính.

Bộ đếm lệnh của CPU (CPU program counter) được trỏ đến lệnh đầu tiên của chương trình (còn gọi là ngõ và chương trình – program entry point)

B3. CPU thực hiện từng chỉ thị một trong RAM cho đến khi gặp lệnh kết thúc:

Chép lệnh mã máy hiện hành vào thanh ghi lệnh.

Tăng bộ đếm lệnh (để trỏ đến lệnh kế tiếp).

Thi hành lệnh mã máy.

B4. Kết thúc thực hiện chương trình, HĐH chờ nhận lệnh mới.

Mỗi chỉ thị của chương trình là một lệnh mã máy (một dãy các byte chỉ phù hợp với qui ước tập lệnh của một loại CPU nào đó)

Được cấu trúc hóa theo qui ước của HĐH.

Được chạy trên một họ CPU và HĐH cụ thể.

Nội dung rất khó hiểu đối với người dùng máy tính, chỉ có CPU thích hợp với hiểu rõ và
thi hành được.

Nhận xét:

Khó có thể sản xuất ra phần mềm bằng cách viết trực tiếp các chương trình mã máy.

Nếu có làm được theo cách này thì:

Giá cả sẽ rất đắt do quá khó, tốn quá nhiều thời gian và công sức.

Khả năng dùng lại rất giới hạn do không thể bán cho người dùng trên họ máy tính khác hay người dùng sử dụng hệ điều hành khác.

Do vậy giải pháp cho vấn đề viết bằng mã máy phứt tạp thì lập trình viên sẽ sử dụng các ngôn ngữ lập trình cấp cao và được gọi là chương trình nguồn (source code)

Chương trình nguồn được dịch sang chương trình mã máy bằng cách chương trình dịch:

Trình hợp dịch (assembler) để dịch các chương trình hợp ngữ.

Trình thông dịch (interpreter) và trình biên dịch (compiler) để dịch các chương trình cấp cao.

2) Các ngôn ngử lập trình cấp cao thông dụng:

C/C++

COBOL

FORTRAN

Java, C#

PHP, Ruby, Perl

Ada, BASIC, Visual Basic (VB), Lisp, Pascal, …

Hạn chế của các chương trình cấp cao truyền thống là trình biên dịch của chúng phát sinh trực tiếp mã thực thi phụ thuộc vào mã máy tính của một họ máy tính và hệ điều hành cụ thể nên không thể mang đi sử dụng ở các hệ điều hành khác.

Ngôn ngữ lập trình hiện đại như Java hay C# trình biên dịch không dịch trực tiếp mã nguồn thành mã thực thi mà được thiết kế để có thể dịch thành mã thực thi trừu tượng (abstract executable code) độc lập máy và hệ điều hành.

Do máy tính thật không thể hiểu được mã trừu tượng nên những chương trình dạng mã thực thi trừu tượng chỉ chạy được khi có sẵn máy ảo hỗ trợ cho việc thi hành loại mã thực thi đó.

Chương trình nguồn Java (tập tin *.java) được dịch thành mã thực thi không phụ thuộc máy tính (tập tin *.class) có thể chạy được trên bất kỳ máy tính nào đã cài đặt máy ảo Java (Java Virtual Machine – JVM)

Trong các năm gần đây, các ứng dụng chạy trên web phát triển rất mạnh.

Chạy trên internet thông qua một trình duyệt web.

Được viết bằng các ngôn ngữ như PHP, ASP.NET, JSP, Java Script, VB Script… có tính tương thích cao, hoạt động trên bất kỳ máy tính nào có internet

Toàn bộ qui trình biên dịch được thực một cách dễ dàng và thuận tiện nhờ vào công cụ gọi là môi trường phát triển phần mềm (Integrated Development Environment – IDE).

Vấn đề lập trình web chạy trên trình duyệt chúng ta sẽ học ở serial khác, trong serial này tôi sẽ hướng dẩn các bạn nắm khái niệm cũng như hiểu về chương trình nguồn mà bài kế tiếp chúng ta sẽ bắt đầu với lập trình ngôn ngữ C, đây là ngôn ngữ căn bản cho những ai bắt đầu bước vào lĩnh vực lập trình, bạn thuần thục C thì bạn sẽ dể dàng hiểu và nắm bắt các ngôn ngữ cao cấp khác  bởi nó được kế thừa và nâng cấp hầu như từ ngôn ngữ C.

Do vậy bài học này giúp bạn hiểu được vì sao khi các bạn gõ câu lệnh abc rồi cho nó thực hiện, nó chạy ra kết quả vậy thì cái máy sao nó lại hiểu được nhỉ? Và vì sao bạn cần phải có trình biên dịch ngôn ngữ của bạn đang viết để máy tính biết mà thực thi, bởi lẻ cpu chỉ biết 0110 thôi các bạn.

Kết luận: Qua bài học này các bạn sẽ biết được cách mà lập trình viên tạo ra chương trình của họ và máy tính hiểu thực thi ra sao, và vì sao chương trình chạy trên window, mang qua ông linux không hiểu được….

Hẹn gặp các bạn ở bài kế tiếp. bye bye.

0