Nhập môn lập trình (1) - Chương trình, mã máy, hợp ngữ

 

Lời nói đầu

Sau khi học xong môn Nhập Môn Công Nghệ Thông Tin, bạn đã có cái nhìn tổng quan về thông tin, biểu diễn và xử lý thông tin; đã có những kiến thức căn bản để có thể sử dụng máy tính, Internet một cách an toàn, hiệu quả; đã có thể sử dụng các phần mềm, email trong việc học, làm báo cáo và trình bày.

Môn học Nhập Môn Công Nghệ Thông Tin cũng đã giúp bạn có cái nhìn tổng quan về một số chuyên ngành, nghề nghiệp và vị trí công việc liên quan đến Công Nghệ Thông Tin. Bạn chưa nhất thiết phải chọn chuyên ngành cho mình mà hãy tập trung học tốt các môn thuộc phần Kiến Thức Đại Cương và Kiến Thức Cơ Sở Ngành. Lâu lâu ngó lại các chuyên ngành để chiêm nghiệm xem mình hợp với chuyên ngành nào hơn, điểm mạnh của mình là gì, chuyên ngành nào đang cần nhiều người làm, từ đó sẽ tự định hướng cho mình. Nếu lỡ chọn chưa đúng thì cứ chọn lại không sao hết, học cái gì cũng có lợi.

Nhập Môn Lập Trình là môn học tiếp theo bạn cần học. Môn học này giúp bạn có những khái niệm, kiến thức cơ bản liên quan đến lập trình như: thuật toán, lưu đồ, mã giả, ngôn ngữ lập trình, chương trình, trình dịch; cung cấp cho bạn các kĩ năng lập trình căn bản để giải quyết các bài toán đơn giản; làm quen với các thuật ngữ tiếng Anh chuyên ngành.

Một điều quan trọng các bạn cần biết là nên tập trung học các khái niệm quan trọng, các kiến thức nền tảng. Việc lấy ngôn ngữ lập trình nào để minh họa không thực sự quan trọng. Vì trong thực tế có hàng vài chục ngôn ngữ lập trình đang tồn tại, có cái mới sinh ra, có cái mất đi, nhưng nguyên lý chung nhất trong lập trình thì rất ít thay đổi.

Mục tiêu môn học:

– Hiểu các khái niệm: thuật toán, lưu đồ, mã giả, ngôn ngữ lập trình, chương trình, trình dịch

– Biết, hiểu và sử dụng được các kiểu dữ liệu, các cấu trúc điều khiển trong một ngôn ngữ lập trình

– Biết, hiểu và sử dụng được kiểu lập trình cấu trúc; tạo các hàm, thủ tục con để giải quyết các bài toán đơn giản

– Cài đặt được các chương trình bằng một ngôn ngữ lập trình cụ thể

– Nắm được các thuật ngữ chuyên ngành bằng tiếng Anh

Bạn nào còn yếu tiếng Anh thì theo dõi các bài giảng của các thầy, và đọc các tài liệu tiếng Việt. Bạn nào khá tiếng Anh hoặc có quyết tâm cao thì nên đọc, hiểu và làm theo cuốn sách tiếng Anh, đây là mục tiêu cao nhất của môn học.

Trong tài liệu này sẽ cố gắng ghi càng nhiều càng tốt các thuật ngữ tiếng Anh đi kèm, nhằm giúp các bạn có vốn từ vựng ban đầu, trước khi có thể đọc được các tài liệu bằng tiếng Anh. Bạn nào cẩn thận nên ghi lại các thuật ngữ tiếng Anh cùng với nghĩa của nó ra một tập tin Excel để tra lại khi cần.

Chúc các bạn kiên trì.

1.Tổng quan về lập trình cho máy tính

1.1       Chương trình

Chương trình (program) là một dãy các chỉ thị (instruction) hay các lệnh (statement), gọi chung là các lệnh, dùng để điều khiển máy tính thực hiện một công việc cụ thể.

Ví dụ, chương trình trong Bảng 1 sẽ xuất câu “Chao bac Teo” ra màn hình máy tính:





Người tạo ra (hay viết ra) các chương trình được gọi là lập trình viên (programmer, coder).

Một chương trình có thể tồn tại ở nhiều dạng, như chương trình mã máy, chương trình hợp ngữ, hoặc chương trình ngôn ngữ cấp cao (hay bậc cao). Tương ứng, cũng có nhiều cách để tạo ra một chương trình máy tính, ví dụ tạo ra bằng mã máy, tạo ra bằng hợp ngữ và tạo ra bằng ngôn ngữ cấp cao. Phần tiếp theo sẽ tìm hiểu lần lượt về ba cách tạo ra một chương trình máy tính.

1.2       Mã máy

Mã máy (machine code) là các lệnh tồn tại ở dạng các bit 0, 1; CPU có thể hiểu và thực thi trực tiếp các lệnh này. Mỗi lệnh thực hiện một tác vụ cụ thể như nạp (load), nhảy (jump) tới một vùng nhớ, các thao tác số học trên một đơn vị dữ liệu.

Chương trình mã máy (machine code program) là chương trình tồn tại ở dạng mã máy hay ở dạng ngôn ngữ máy (machine language).

Chương trình mã máy có tính phụ thuộc vào phần cứng, nghĩa là mỗi họ máy tính sẽ có tập lệnh riêng. Như vậy, một chương trình mã máy của họ máy tính này sẽ không thực thi được trên họ máy tính khác.

Con người rất khó để đọc và hiểu được chương trình mã máy, do vậy, con người ít khi tạo ra hoặc làm việc trực tiếp với các chương trình dạng mã máy. Thường thì CPU sẽ đọc, hiểu và thực thi các lệnh trong chương trình mã máy.

Chương trình mã máy được lưu trên đĩa dưới dạng các tập tin thực thi (executable program file), ví dụ các tập tin có phần mở rộng (extension) là EXE hoặc DLL.

Ví dụ một phần chương trình mã máy (Hình 1.1):





Quá trình máy tính thực thi một chương trình mã máy (xem Hình 1.2):

– Bước 1: người dùng, hệ điều hành hoặc một chương trình khác sẽ kích hoạt để thực thi một chương trình mã máy. Ví dụ, người dùng nhấp đúp chuột vào biểu tượng của chương trình trên màn hình Desktop;

– Bước 2: hệ điều hành sẽ tìm và nạp các lệnh của chương trình đang được lưu trên đĩa vào bộ nhớ chính (RAM);

– Bước 3: bộ đếm chương trình của CPU (program counter) sẽ trỏ tới lệnh đầu tiên của chương trình, cũng được gọi là đầu vào của chương trình (program entry point). CPU sẽ thực thi từng lệnh của chương trình cho tới khi gặp lệnh kết thúc.



Chương trình mã máy khi nằm trên đĩa cứng hoặc RAM sẽ là các bit 0, 1 liên tiếp nhau. Tuy nhiên, chúng được chia thành các lệnh riêng biệt với kích thước cụ thể, ví dụ mỗi lệnh sẽ là 16 bit, 32 bit, hoặc 64 bit tùy theo họ máy.

Mỗi lệnh riêng biệt lại được chia theo một cấu trúc cụ thể, gồm nhiều trường, mỗi trường có số bit và chức năng riêng. Ví dụ, một lệnh theo kiến trúc MIPS32 sẽ có chiều dài 32 bit, gồm các trường (Hình 1.3):


Do tính phức tạp, khó hiểu của chương trình mã máy, cộng với tính phụ thuộc phần cứng, nên mọi người hầu như không xây dựng các ứng dụng trực tiếp bằng mã máy mà sẽ dùng một ngôn ngữ lập trình khác, sau đó dịch thành chương trình mã máy.

Phần tiếp theo sẽ tìm hiểu một kiểu ngôn ngữ lập trình khác, để xây dựng chương trình cho máy tính, đó là hợp ngữ.

1.3       Hợp ngữ

Hợp ngữ (assembly language) là ngôn ngữ lập trình cấp thấp (hay bậc thấp) (low-level programming language). Nó đơn giản hơn chương trình mã máy nhờ vào việc dùng các từ viết tắt thay cho mã lệnh, mỗi từ viết tắt tương đương với một mã lệnh, ví dụ mã lệnh 100000 trong chương trình mã máy sẽ được thay bằng từ ADD (nghĩa là cộng) trong hợp ngữ. Địa chỉ vùng nhớ trong chương trình mã máy được thay bằng tên mô tả trong hợp ngữ.

CPU của máy tính không thể thực thi trực tiếp được mã hợp ngữ, do vậy lập trình viên cần phải dịch (assembling) chương trình viết bằng hợp ngữ sang chương trình mã máy. Chương trình dịch này được gọi là trình hợp dịch (nghĩa là chương trình dịch hợp ngữ) (assembler).

Cũng như chương trình mã máy, chương trình hợp dịch cũng có tính phụ thuộc vào họ máy tính cụ thể, mỗi họ máy tính có trình hợp dịch riêng.

Mỗi lệnh trong chương trình hợp ngữ sẽ được dịch thành một lệnh tương ứng trong chương trình mã máy. Ví dụ:

Mã hợp ngữ

add $s0, $s1, $s2

Mã máy

0000001000110010100000000100000

Quá trình dịch và thực thi một chương trình hợp ngữ được minh họa trong Hình 1.4:


Hợp ngữ được sử dụng nhiều trong các lĩnh vực hẹp, cần lập trình giao tiếp trực tiếp với phần cứng, yêu cầu tốc độ xử lý cao, ví dụ như các trình điều khiển thiết bị, hệ thống nhúng cấp thấp và các ứng dụng thời gian thực.

Hai điều nên để ý khi lập trình bằng hợp ngữ là tính phụ thuộc vào phần cứng và rất khó để tạo ra các chương trình lớn, phức tạp, có tính tương thích cao.

Để tạo ra các chương trình ứng dụng có tính tương thích tốt; tiết kiệm thời gian và công sức cho lập trình viên thì nên lựa chọn các ngôn ngữ lập trình cấp cao.

1.4       Ngôn ngữ lập trình cấp cao

Ngôn ngữ lập trình cấp cao (high-level programming language) thường được gọi ngắn gọn là ngôn ngữ lập trình, là một ngôn ngữ hình thức, gồm tập hợp các lệnh, cú pháp và ngữ nghĩa được sử dụng để điều khiển máy tính, thực hiện một công việc cụ thể.

Chương trình viết bằng các ngôn ngữ lập trình cấp cao có tính tương thích tốt, có thể chạy trên nhiều họ máy.

Có nhiều ngôn ngữ lập trình cấp cao khác nhau, tùy theo ứng dụng bạn muốn xây dựng là gì, để lựa chọn ngôn ngữ cho phù hợp. Ví dụ, sẽ có các ngôn ngữ chuyên để tạo ra các ứng dụng desktop, ứng dụng web, ứng dụng di động, ứng dụng nhúng. Cũng có những ngôn ngữ đa năng, có thể dùng để tạo ra nhiều loại ứng dụng khác nhau.

Một số ngôn ngữ lập trình phổ biến: C, C++, Java, C#, PHP, Python, JavaScript, Ruby, Go.

– Để viết ra hệ điều hành, hệ quản trị cơ sở dữ liệu, các chương trình hệ thống có thể sử dụng ngôn ngữ C, C++

– Để làm web có thể sử dụng ngôn ngữ C#, PHP, Java, JavaScript, Ruby, Python

– Để phát triển các ứng dụng quản lý cho các hệ thống lớn có thể sử dụng ngôn ngữ C++, C#, Java

Vì CPU của máy tính không thể trực tiếp thực thi được các lệnh của ngôn ngữ lập trình cấp cao, nên lập trình viên phải sử dụng một chương trình khác để dịch từ ngôn ngữ cấp cao sang dạng mã máy. Phần tiếp theo sẽ tìm hiểu về loại chương trình này.

-----//1

[Video]

--------

Cập nhật: 4/7/2022

Bài tiếp theo: Nhập môn lập trình (2) - Chương trình dịch