Tổng quan về giáo trình

Tài liệu Giáo trình Ngôn ngữ Lập trình Assembly (Dùng trong các trường THCN) do tác giả Nguyễn Thành Trung biên soạn, được Nhà xuất bản Hà Nội ấn hành năm 2007 theo Quyết định xuất bản số 160-2007/CXB/446GT-27/HN ngày 02/3/2007. Công trình được thực hiện theo Quyết định số 5620/QĐ-UB ngày 23/9/2003 của Ủy ban nhân dân thành phố Hà Nội, giao cho Sở Giáo dục và Đào tạo Hà Nội tổ chức biên soạn nhằm phục vụ công tác đào tạo chuyên ngành kỹ thuật viên tin học trong hệ thống các trường Trung học chuyên nghiệp (THCN) và dạy nghề trên địa bàn Thủ đô.

Về vị trí trong chương trình đào tạo, môn học đóng vai trò cầu nối trung gian giữa phần cứng máy tính và kỹ thuật lập trình phần mềm. Mục tiêu đào tạo của giáo trình tập trung trang bị kiến thức cơ sở về ngôn ngữ lập trình bậc thấp, giúp người học củng cố hiểu biết về kỹ thuật vi xử lý, kiến trúc máy tính và các nguyên lý điều khiển thiết bị ngoại vi thông qua tập lệnh hợp ngữ.

Cấu trúc giáo trình bao gồm 4 chương nội dung và 1 phần phụ lục tra cứu hệ thống ngắt. Cách tiếp cận của tài liệu đi tuần tự từ mức vật lý phần cứng, phân tích cách thức biểu diễn dữ liệu ở mức bit, byte, nghiên cứu kiến trúc bộ vi xử lý 8086/8088, tiếp cận cú pháp câu lệnh hợp ngữ, phương pháp biên dịch với công cụ Macro Assembler (MASM) của Microsoft, kỹ thuật tích hợp với ngôn ngữ bậc cao (Pascal), và giải quyết các bài toán xử lý chuỗi, số nguyên và cổng vào/ra (I/O). Điểm đặc trưng của tài liệu là phương pháp trình bày kỹ thuật thuần túy, bám sát các đặc tính kỹ thuật của hệ thống PC-IBM, minh họa trực tiếp thông qua các thanh ghi nội bộ và các hàm ngắt chuẩn của hệ điều hành DOS và BIOS.


Nội dung kiến thức cốt lõi

Các chương/chủ đề chính

Giáo trình được phân chia thành 4 chương chuyên đề và 1 phần phụ lục tra cứu:

  • Chương 1: Tổ chức của bộ vi xử lý 8086: Cung cấp kiến thức cơ sở về các hệ đếm (nhị phân, thập phân, thập lục phân, số BCD), bảng mã chuẩn ASCII, biểu diễn số nguyên có dấu (phương pháp bù 1 và bù 2) và không dấu. Chương này phân tích quá trình phát triển các dòng vi xử lý Intel từ 8088/8086 đến Pentium; cấu trúc kiến trúc bên trong gồm hai khối logic làm việc song song là Đơn vị thực thi lệnh (EU - Execution Unit) và Đơn vị giao tiếp bus (BIU - Bus Interface Unit); hệ thống 14 thanh ghi 16-bit; cơ chế ngắt cứng, ngắt mềm (lệnh INT), ngắt ngoại lệ nội bộ; 7 chế độ định địa chỉ cho toán hạng; và hệ thống tệp lệnh 8086/8088 gồm 6 nhóm thao tác.
  • Chương 2: Lập trình bằng hợp ngữ: Giới thiệu cấu trúc dòng lệnh chuẩn gồm 4 trường dữ liệu (Tên, Toán tử, Toán hạng, ; Lời bình), các chỉ thị giả (pseudo-instructions), phương pháp khai báo biến, hằng số, phân đoạn bộ nhớ (Code, Data, Stack Segment); quy trình biên dịch và liên kết tệp nguồn bằng trình dịch MASM của Microsoft và TASM của Borland; phân tích sự khác nhau giữa khuôn dạng tệp thực thi .EXE và .COM.
  • Chương 3: Phương pháp liên kết giữa ngôn ngữ bậc cao Pascal với ngôn ngữ Assembly: Hướng dẫn các kỹ thuật phối hợp và gọi đoạn mã Assembly bên trong môi trường lập trình Turbo Pascal nhằm mục đích tối ưu hóa hiệu năng và tốc độ xử lý của hệ thống.
  • Chương 4: Các bài toán lập trình với số nguyên, lập trình cho các chuỗi và thiết bị vào/ra: Trình bày các thuật toán xử lý tính toán số học trên tập số nguyên, kỹ thuật xử lý xâu ký tự bộ nhớ và điều khiển dữ liệu qua các cổng giao tiếp vào/ra.
  • Phụ lục: Tổng hợp bảng tra cứu chi tiết các ngắt hệ thống của DOS và BIOS phục vụ trực tiếp cho việc lập trình giao tiếp phần cứng.

Kiến thức nền tảng được xây dựng

Giáo trình thiết lập hệ thống lý thuyết kỹ thuật máy tính bắt đầu từ cấp độ mạch tích hợp bán dẫn với hai trạng thái điện áp tương ứng với giá trị logic 0 và 1. Từ đó, người học tiếp cận các khái niệm nền tảng:

  • Lý thuyết biểu diễn dữ liệu: Quy chuẩn đơn vị dữ liệu gồm Bit, Byte (8 bit), Word (16 bit), Double Word (32 bit), xác định bit có trọng số lớn nhất (MSB) và nhỏ nhất (LSB). Phương pháp chuyển đổi qua lại giữa hệ cơ số mười, hệ nhị phân, hệ thập lục phân (Hexa) và hệ mã BCD (Binary Coded Decimal). Khái niệm mã hóa ký tự theo chuẩn ASCII 7-bit (128 ký tự chuẩn) và cơ chế lưu trữ số nguyên có dấu bằng kỹ thuật lấy số bù 2 (cộng 1 vào dạng đảo bit của số bù 1).
  • Nguyên lý kiến trúc vi xử lý: Khái niệm phân chia chức năng phần cứng thành khối EU (chứa khối số học logic ALU, khối điều khiển CU, con trỏ lệnh IP, thanh ghi cờ Flags) và khối BIU (chứa khối điều khiển bus, các thanh ghi đoạn, hàng đợi nạp lệnh Instruction Queue). Cơ chế tìm nạp trước lệnh (prefetching) và xử lý đường ống đơn (single pipeline trên 80486) so với đường ống đôi (double pipeline trên Pentium).
  • Mô hình phân đoạn bộ nhớ (Memory Segmentation): Quản lý không gian định địa chỉ 1MB của vi xử lý 8086 thông qua 4 thanh ghi đoạn 16-bit: CS (Code Segment), DS (Data Segment), SS (Stack Segment) và ES (Extra Segment), kết hợp với các thanh ghi con trỏ/chỉ số (SP, BP, SI, DI) để xác định địa chỉ hiệu dụng.
  • Cơ chế ngắt và bảng vector ngắt: Cấu trúc 256 vector ngắt (chiếm 1024 byte từ địa chỉ 00000h đến 003FFh trong bộ nhớ RAM), mỗi vector ngắt chiếm 4 byte chứa cặp địa chỉ CS:IP trỏ đến chương trình con phục vụ ngắt. Trật tự ưu tiên xử lý: ngắt nội bộ (INT 0 do chia cho 0 hoặc tràn phép chia), ngắt không che được (NMI), ngắt che được (INTR) và ngắt chạy từng bước (INT 1).
  • Hệ thống 7 chế độ định địa chỉ: Địa chỉ thanh ghi (MOV BX, DX), địa chỉ tức thì (MOV BL, 80), địa chỉ trực tiếp (MOV AL, [1970H]), địa chỉ gián tiếp qua thanh ghi (MOV AL, [BX]), địa chỉ tương đối cơ sở (MOV CX, [BX+10]), địa chỉ tương đối chỉ số (MOV AX, [SI]+10), và địa chỉ tương đối chỉ số cơ sở (MOV AX, [BX][SI]+8).

Kỹ năng phát triển

Thông qua các bài tập và ví dụ mã lệnh trong giáo trình, người học được rèn luyện các nhóm năng lực kỹ thuật:

  • Kỹ năng lập trình phần cứng (Technical Skills): Thao tác thuần thục cú pháp câu lệnh hợp ngữ theo chuẩn tệp nguồn của Macro Assembler (MASM); thiết lập môi trường phân đoạn bộ nhớ bằng chỉ thị giả; cấu hình và sử dụng các thanh ghi đa năng (AX, BX, CX, DX) cho việc tính toán và đếm chu trình.
  • Kỹ năng phân tích hệ thống (Analytical Skills): Đọc hiểu và phân tích trạng thái thanh ghi cờ 16-bit với 9 bit cờ hiệu dụng: 6 cờ điều kiện phản ánh kết quả phép toán (CF - cờ nhớ, PF - cờ chẵn lẻ, ZF - cờ rỗng, SF - cờ dấu, OF - cờ tràn, AF - cờ nhớ phụ) và 3 cờ điều khiển (TF - cờ bẫy, IF - cờ cho phép ngắt, DF - cờ hướng). Phân tích đúng kết quả của các phép dịch chuyển bit số học và logic (SHL, SAL, SHR, SAR, ROL, ROR).
  • Kỹ năng ứng dụng thực tế (Practical Competencies): Kỹ thuật gọi ngắt hệ điều hành DOS qua lệnh INT 21h (hàm AH=01h nhận ký tự từ bàn phím vào AL, hàm AH=02h hiển thị ký tự từ thanh ghi DL, hàm AH=09h xuất chuỗi ký tự kết thúc bằng dấu $, hàm AH=4Ch kết thúc chương trình); kỹ thuật ghép nối thư viện chương trình con viết bằng Assembly vào dự án mã nguồn Pascal.

Phương pháp giảng dạy và học tập

Giáo trình áp dụng phương pháp tiếp cận diễn dịch từ nguyên lý vật lý đến ứng dụng thuật toán. Tài liệu hướng dẫn sinh viên quan sát trực tiếp tác động của từng câu lệnh assembly lên từng thanh ghi và từng ô nhớ cụ thể, thay vì xem xét chương trình như một hộp đen logic.

Nội dung giảng dạy được củng cố thông qua các hệ thống bài tập tính toán và thực hành được thiết kế ở cuối chương 1:

  1. Bài tập số học và dấu hiệu tràn: Yêu cầu người học tự tính toán kết quả lưu tại các cặp thanh ghi AX, DX và xác định trạng thái tràn (cờ OF/CF) khi thực thi các lệnh nhân/chia có dấu và không dấu: MUL BX, IMUL CX, DIV BX, IDIV BL. Ví dụ điển hình trong bài tập: phân tích trường hợp AX chứa 0005h, DX chứa 0000h, BX chứa 0002h, thực hiện lệnh DIV BX để nhận thương số AX=0002h và số dư DX=0001h.
  2. Bài tập thao tác logic và mặt nạ bit: Rèn luyện kỹ thuật tạo mặt nạ (masking) bằng các lệnh AND, OR, XOR, NOT để thực hiện yêu cầu kỹ thuật: xóa các bit ở vị trí chẵn trong thanh ghi AX, bật bit có trọng số thấp nhất (LSB) và cao nhất (MSB) của thanh ghi BL, hoặc tính số bù 1 của một biến từ (word).
  3. Bài tập dịch thuật toán từ ngôn ngữ bậc cao: Yêu cầu người học chuyển đổi các phép gán biến kiểu word từ ngôn ngữ lập trình bậc cao sang chuỗi lệnh assembly thuần túy, chỉ sử dụng tập lệnh cơ bản gồm MOV, ADD, SUB, INC, DEC, NEG.
  4. Bài tập xử lý chuỗi ký tự: Thao tác nối hai chuỗi bộ nhớ STRING1 và STRING2 thành chuỗi "ABCDEFGHIJ" bằng cách thiết lập thanh ghi chỉ số nguồn SI, chỉ số đích DI, thiết lập cờ hướng CLD (DF=0), nạp thanh ghi đếm CX và áp dụng lệnh chuỗi lặp REP MOVSB.

Phương pháp đánh giá dựa trên độ chính xác của việc tính toán địa chỉ bộ nhớ (Segment:Offset), xác định đúng tính hợp lệ của câu lệnh (ví dụ: phát hiện lỗi khi chuyển trực tiếp dữ liệu giữa hai ô nhớ hoặc chuyển dữ liệu giữa hai thanh ghi đoạn như MOV DS, ES), và khả năng thiết lập tham số cho các hàm ngắt DOS. Về định hướng tự học, giáo trình yêu cầu người học phải kết hợp tra cứu bảng mã ASCII, bảng cộng/trừ số Hexa và phụ lục ngắt để giải quyết các lỗi cú pháp khi biên dịch mã nguồn với tệp công cụ dịch Macro Assembler.


Điểm nổi bật và cập nhật

Về phương diện kiến trúc phần cứng, giáo trình cung cấp bảng tổng hợp và so sánh tiến trình phát triển của các thế hệ vi xử lý họ Intel 80x86, chỉ rõ các thông số kỹ thuật cốt lõi:

Dòng vi xử lý Độ rộng thanh ghi Bus dữ liệu Đường địa chỉ Không gian bộ nhớ Chế độ hoạt động
8088 / 80188 16-bit 8-bit 20 đường 1 MB Chế độ thực (Real mode)
8086 / 80186 16-bit 16-bit 20 đường 1 MB Chế độ thực (Real mode)
80286 16-bit 16-bit 24 đường 16 MB Chế độ thực & Chế độ bảo vệ (Protected mode)
80386 32-bit 32-bit 32 đường 4 GB Chế độ thực & Chế độ bảo vệ đa nhiệm
80486 32-bit 32-bit 32 đường 4 GB Đường ống đơn (Single pipeline)
Pentium 32-bit 64-bit 32 đường 4 GB Đường ống đôi (Double pipeline)

Về công cụ lập trình, giáo trình cập nhật và đối chiếu hai phần mềm hợp dịch phổ biến trên hệ máy tính PC-IBM là Macro Assembler (MASM) do Microsoft phát triển và Turbo Assembler (TASM) của hãng Borland. Trong đó, tài liệu đi sâu vào cú pháp chỉ thị dịch và cấu trúc phân đoạn của MASM.

Về phương diện ứng dụng thực tế, văn bản chỉ rõ giá trị kỹ thuật của hợp ngữ trong ngành đo lường và điều khiển tự động:

  • Việc lập trình trực tiếp thông qua tệp lệnh hợp ngữ giúp chương trình ứng dụng tăng tốc độ xử lý thêm từ 10% đến 20% so với các chương trình viết thuần túy bằng ngôn ngữ bậc cao.
  • Tiết kiệm dung lượng bộ nhớ định sẵn của các thiết bị chuyên dụng.
  • Đáp ứng chính xác các thông số phần cứng đặc thù của từng hệ thống máy tính và các thiết bị ngoại vi thông qua lệnh đọc/ghi cổng IN và OUT.
  • Tạo khả năng phối hợp tối ưu khi nhúng các mô-đun hợp ngữ vào các chương trình viết bằng C hoặc Pascal.

Đối tượng sử dụng giáo trình

Giáo trình được biên soạn phục vụ các nhóm người học và giảng dạy cụ thể:

  • Học sinh, sinh viên các trường đào tạo nghề: Căn cứ Lời nói đầu, đối tượng trọng tâm là sinh viên chuyên ngành Kỹ thuật viên Tin học của các trường Trung học Kỹ thuật, Trung học Chuyên nghiệp và dạy nghề. Tài liệu cung cấp khối lượng kiến thức nền tảng về lập trình cấp thấp phù hợp với khung chương trình đào tạo nghề hệ chính quy.
  • Sinh viên các ngành Kỹ thuật - Nghiệp vụ liên quan: Tài liệu được dùng làm tài liệu tham khảo cho sinh viên các khối ngành kỹ thuật công nghệ cần nắm vững cơ chế vận hành của phần cứng máy tính và kiến trúc ghép nối vi xử lý.
  • Yêu cầu kiến thức tiên quyết (Prerequisites): Để tiếp thu nội dung môn học, người học bắt buộc phải hoàn thành các học phần:
    1. Kiến trúc máy tính (nguyên lý cấu tạo phần cứng, tổ chức bus, bộ nhớ).
    2. Kỹ thuật vi xử lý (tổ chức hoạt động của CPU, cổng logic, ngắt).
    3. Ngôn ngữ lập trình Pascal (cú pháp ngôn ngữ cấu trúc, kỹ thuật tổ chức chương trình con và mảng dữ liệu).
  • Giảng viên và kỹ sư thực hành: Giảng viên có thể khai thác hệ thống ví dụ câu lệnh, cấu trúc phân đoạn .EXE/.COM và bộ câu hỏi ôn tập để xây dựng giáo án bài giảng và đề thi đánh giá học phần. Các kỹ sư hoặc kỹ thuật viên lĩnh vực tự động hóa có thể sử dụng phần phụ lục ngắt DOS/BIOS làm tài liệu tra cứu hàm khi xây dựng các ứng dụng giao tiếp thiết bị đo lường.

Câu hỏi thường gặp

1. Giáo trình này phù hợp với ai?

Giáo trình được thiết kế chuẩn hóa cho sinh viên chuyên ngành Kỹ thuật viên Tin học tại các trường Trung học Chuyên nghiệp (THCN), các cơ sở đào tạo công nhân kỹ thuật, học sinh học nghề và sinh viên ngành kỹ thuật muốn nghiên cứu lập trình vi xử lý 16-bit.

2. Cần kiến thức nền nào để học?

Người học cần trang bị trước kiến thức về Kiến trúc máy tính, Kỹ thuật vi xử lý và đã học qua ngôn ngữ lập trình có cấu trúc Pascal để có thể tiếp cận kỹ thuật phân tích thanh ghi và nhúng mã hợp ngữ.

3. Điểm khác biệt của giáo trình này so với các tài liệu khác?

Tài liệu tập trung trực tiếp vào kiến trúc bộ vi xử lý Intel 8086/8088 và cách lập trình tiếp cận phần cứng thực tế qua công cụ biên dịch Macro Assembler (MASM). Nội dung kết hợp chặt chẽ giữa lý thuyết hệ đếm, cấu trúc thanh ghi phần cứng với các kỹ thuật liên kết mã nguồn Assembly vào chương trình Pascal và bảng ngắt DOS/BIOS.

4. Làm sao để tự học giáo trình hiệu quả?

Người học nên học tuần tự từ việc đổi hệ đếm (nhị phân, hex, BCD, bù 2), vẽ sơ đồ phân chia chức năng giữa hai khối EU và BIU, sau đó giải toàn bộ hệ thống câu hỏi bài tập ở cuối chương 1 (tính toán kết quả phép toán nhân/chia, dịch bit, lật bit và viết mã chuỗi). Trong quá trình lập trình, cần kết hợp tra cứu các bảng ngắt trong phần Phụ lục.

5. Có tài liệu bổ trợ nào kèm theo giáo trình?

Phần cuối cuốn sách cung cấp một phần Phụ lục chuyên biệt giới thiệu chi tiết các bảng ngắt của DOS và BIOS (như ngắt hiển thị màn hình, ngắt đọc bàn phím INT 21h, ngắt điều khiển vào/ra), đóng vai trò tài liệu tra cứu trực tiếp các tham số đầu vào và đầu ra khi lập trình.


Kết luận

Giáo trình Ngôn ngữ Lập trình Assembly (Dùng trong các trường THCN) của tác giả Nguyễn Thành Trung là tài liệu học thuật giảng dạy kỹ thuật lập trình cấp thấp trên nền kiến trúc vi xử lý Intel 8086/8088. Giá trị cốt lõi của tài liệu nằm ở việc mô tả chi tiết tổ chức phần cứng (khối EU, BIU, hệ thống 14 thanh ghi, thanh ghi cờ và bảng vector ngắt) cùng hệ thống tệp lệnh 6 nhóm hoàn chỉnh.

Lộ trình học tập đề xuất bao gồm:

  1. Nắm vững quy tắc biểu diễn dữ liệu nhị phân, số bù 2, bảng mã ASCII và tổ chức phần cứng 8086 (Chương 1).
  2. Thực hành cú pháp 4 trường lệnh, quy trình dịch tệp nguồn với công cụ MASM/TASM và phân biệt định dạng .EXE và .COM (Chương 2).
  3. Áp dụng kỹ thuật liên kết mã Assembly với ngôn ngữ Pascal nhằm tối ưu tốc độ và bộ nhớ (Chương 3).
  4. Lập trình giải quyết các bài toán số nguyên, thao tác chuỗi bộ nhớ và xuất nhập dữ liệu qua cổng I/O (Chương 4).

Tài liệu kết thúc bằng phần Phụ lục ngắt DOS và BIOS, tạo thành hệ thống tài nguyên kỹ thuật hỗ trợ người học tra cứu và triển khai chương trình điều khiển hệ thống thực tế.