MỤC LỤC<br />
CÁC TỪ VIẾT TẮT............................................................................................................ 4<br />
CHƯƠNG I: CÁC KHÁI NIỆM CƠ BẢN ......................................................................... 5<br />
1.1 Mở đầu ....................................................................................................................... 5<br />
1.2 Biểu diễn số và kí tự trong máy tính .......................................................................... 5<br />
1.2.1 Một số hệ đếm ..................................................................................................... 5<br />
1.2.2 Biểu diễn số nguyên trong máy tính.................................................................... 8<br />
1.2.3 Biểu diễn kí tự trong máy tính........................................................................... 10<br />
1.3 Tổ chức của máy tính ............................................................................................... 11<br />
1.3.1 Sơ đồ hệ thống máy tính.................................................................................... 11<br />
1.3.2 Bộ vi xử lý - CPU .............................................................................................. 12<br />
1.3.3 Tổ chức bộ nhớ trong ........................................................................................ 14<br />
BÀI TẬP CHƯƠNG I.................................................................................................... 17<br />
CHƯƠNG II: CÁC LỆNH CƠ BẢN CỦA HỢP NGỮ .................................................... 18<br />
2.1 Cấu trúc chương trình............................................................................................... 18<br />
2.1.1 Ví dụ .................................................................................................................. 18<br />
2.1.2 Giải thích ........................................................................................................... 18<br />
2.2 Một số lệnh thường dùng ........................................................................................ 20<br />
2.2.1 Cấu trúc câu lệnh hợp ngữ................................................................................. 20<br />
2.2.2 Một số lệnh thường dùng................................................................................... 21<br />
2.3 Nhập xuất dữ liệu ..................................................................................................... 23<br />
2.3.1 Chương trình ngắt.............................................................................................. 23<br />
2.3.2 Chức năng nhập - xuất của ngắt 21h ................................................................. 23<br />
2.4 Cách chạy một chương trình hợp ngữ...................................................................... 26<br />
BÀI TẬP CHƯƠNG II .................................................................................................. 28<br />
CHƯƠNG III: CÁC LỆNH NHẢY................................................................................... 29<br />
3.1 Thanh ghi cờ và các cờ trạng thái ............................................................................ 29<br />
3.1.1 Cờ nhớ CF ......................................................................................................... 29<br />
3.1.2 Cờ Zero ZF ........................................................................................................ 30<br />
3.1.3 Cờ tràn OF ......................................................................................................... 30<br />
3.2 Các lệnh nhảy có điều kiện ...................................................................................... 30<br />
3.2.1 Ví dụ .................................................................................................................. 30<br />
3.2.2 Một số lệnh nhảy ............................................................................................... 31<br />
3.3 Lệnh nhảy không điều kiện JMP.............................................................................. 33<br />
3.4 Một số ứng dụng của lệnh nhảy ............................................................................... 34<br />
3.4.1 Cấu trúc rẽ nhánh If........................................................................................... 34<br />
3.4.2 Cấu trúc lặp........................................................................................................ 35<br />
BÀI TẬP CHƯƠNG III ................................................................................................. 39<br />
1<br />
<br />
CHƯƠNG IV: CÁC LỆNH LOGIC, DỊCH VÀ QUAY .................................................. 40<br />
4.1 Các lệnh logic........................................................................................................... 40<br />
4.1.1 Các phép toán logic ........................................................................................... 40<br />
4.1.2 Các lệnh logic trong hợp ngữ ............................................................................ 41<br />
4.1.3 Ứng dụng các lệnh logic.................................................................................... 42<br />
4.2 Các lệnh dịch............................................................................................................ 43<br />
4.2.1 Các phép toán dịch ............................................................................................ 43<br />
4.2.2 Các lệnh dịch trong hợp ngữ ............................................................................. 43<br />
4.3 Các lệnh quay ........................................................................................................... 45<br />
4.3.1 Lệnh quay trái (ROL - Rotate Left)................................................................... 45<br />
4.3.2 Lệnh quay phải (ROR - Rotate Right)............................................................... 45<br />
4.3.3 Lệnh quay trái qua cờ CF (RCL – Rotate Carry Left) ...................................... 46<br />
4.3.4 Lệnh quay phải qua cờ CF (RCR – Rotate Carry Right) .................................. 46<br />
BÀI TẬP CHƯƠNG IV................................................................................................. 48<br />
CHƯƠNG V: CÁC LỆNH NHÂN VÀ CHIA .................................................................. 49<br />
5.1 Các lệnh nhân ........................................................................................................... 49<br />
5.1.1 Lệnh MUL (Multiply) ....................................................................................... 49<br />
5.1.2 Lệnh IMUL (Integer Multiply).......................................................................... 50<br />
5.2 Các lệnh chia (Divide) ............................................................................................. 50<br />
5.2.1 Cú pháp lệnh...................................................................................................... 50<br />
5.2.2 Hiện tượng tràn trong phép chia........................................................................ 51<br />
BÀI TẬP CHƯƠNG V .................................................................................................. 53<br />
CHƯƠNG VI: NGĂN XẾP VÀ THỦ TỤC...................................................................... 54<br />
6.1 Các thành phần của chương trình............................................................................. 54<br />
6.2 Cách sử dụng ngăn xếp ............................................................................................ 54<br />
6.2.1 Cất dữ liệu vào ngăn xếp ................................................................................... 54<br />
6.2.2 Lấy dữ liệu khỏi ngăn xếp ................................................................................. 55<br />
6.2.3 Ứng dụng của ngăn xếp..................................................................................... 55<br />
6.2.4 Cách thức làm việc của ngăn xếp ...................................................................... 57<br />
6.3 Thủ tục...................................................................................................................... 60<br />
6.3.1 Cấu trúc thủ tục ................................................................................................. 60<br />
6.3.2 Sử dụng thủ tục.................................................................................................. 60<br />
6.3.3 Quan hệ giữa thủ tục và ngăn xếp ..................................................................... 62<br />
BÀI TẬP CHƯƠNG VI................................................................................................. 64<br />
CHƯƠNG VII: MẢNG VÀ CÁC LỆNH THAO TÁC CHUỖI....................................... 65<br />
7.1 Mảng một chiều (chuỗi) ........................................................................................... 65<br />
7.1.1 Khai báo mảng................................................................................................... 65<br />
7.1.2 Các phần tử của mảng một chiều ...................................................................... 66<br />
7.1.3 Các chế độ địa chỉ.............................................................................................. 67<br />
2<br />
<br />
7.2 Các lệnh thao tác với chuỗi ...................................................................................... 69<br />
7.2.1 Lệnh chuyển chuỗi (Moving a String) .............................................................. 69<br />
7.2.2 Lệnh chuyển dữ liệu từ thanh ghi vào chuỗi (Store a String) ........................... 73<br />
7.2.3 Lệnh chuyển dữ liệu từ chuỗi vào thanh ghi (Load a String)............................ 75<br />
BÀI TẬP CHƯƠNG VII ............................................................................................... 77<br />
CHƯƠNG VIII: SỬ DỤNG NGẮT TRONG HỢP NGỮ ................................................ 78<br />
8.1 Khái niệm ngắt ......................................................................................................... 78<br />
8.2 Phân loại ngắt ........................................................................................................... 79<br />
8.2.1 Ngắt mềm .......................................................................................................... 79<br />
8.2.2 Ngắt cứng .......................................................................................................... 79<br />
8.3 Một số ngắt thông dụng............................................................................................ 79<br />
8.3.1 Ngắt 17h – Vào/ra máy in ................................................................................. 80<br />
8.3.2 Ngắt 21h ............................................................................................................ 81<br />
8.4 Bảng vector ngắt....................................................................................................... 85<br />
BÀI TẬP CHƯƠNG VIII .............................................................................................. 87<br />
CHƯƠNG IX: MỘT SỐ VẤN ĐỀ MỞ RỘNG ................................................................ 88<br />
9.1 Số nguyên 32 bit....................................................................................................... 88<br />
9.1.1 Các phép toán Cộng và Trừ............................................................................... 88<br />
9.1.2 Các phép Logic.................................................................................................. 89<br />
9.1.3 Các phép toán Dịch ........................................................................................... 90<br />
9.2 Số thực dấu phảy động ............................................................................................. 91<br />
9.2.1 Biểu diễn số thực dưới dạng nhị phân............................................................... 91<br />
9.2.2 Biểu diễn số thực dấu phảy động ...................................................................... 92<br />
9.3 Bộ vi xử lý 80286..................................................................................................... 93<br />
9.3.1 Các đặc trưng..................................................................................................... 93<br />
9.3.2 Một số lệnh mở rộng của 80286........................................................................ 94<br />
9.4 Các bộ vi xử lý 80386 và 80486 .............................................................................. 95<br />
BÀI TẬP CHƯƠNG IX................................................................................................. 97<br />
PHỤ LỤC 1: CHƯƠNG TRÌNH DEBUG ........................................................................ 98<br />
1. Giới thiệu chương trình .............................................................................................. 98<br />
2. Sử dụng chương trình................................................................................................. 98<br />
3. Các lệnh của DEBUG ................................................................................................ 98<br />
4. Dùng Debug để kiểm soát chương trình .................................................................. 101<br />
PHỤ LỤC 2: BẢNG MÃ ASCII ..................................................................................... 108<br />
TÀI LIỆU THAM KHẢO ............................................................................................... 109<br />
<br />
3<br />
<br />
CÁC TỪ VIẾT TẮT<br />
Msb<br />
Lsb<br />
ASCII<br />
ALU<br />
CPU<br />
BIOS<br />
DOS<br />
RAM<br />
ROM<br />
MASM<br />
<br />
Most Significant Bit<br />
Least Significant Bit<br />
American Standard Code for Information Interchange<br />
Arithmetic & Logic Unit<br />
Central Processing Unit<br />
Base Input – Output System<br />
Disk Operating System<br />
Random Accessing Memory<br />
Read Only Memory<br />
Microsoft Macro Assembler<br />
<br />
4<br />
<br />
CHƯƠNG I: CÁC KHÁI NIỆM CƠ BẢN<br />
1.1 Mở đầu<br />
Hợp ngữ (Assembly language) là một ngôn ngữ lập trình cấp thấp, mục đích nhằm giao<br />
tiếp trực tiếp với phần cứng của máy tính.<br />
Máy tính chỉ có khả năng hiểu được các tín hiệu 0, 1 dưới dạng điện hoặc từ, gọi là tín<br />
hiệu nhị phân (ngôn ngữ nhị phân còn được gọi là ngôn ngữ máy). Các lệnh của hợp ngữ<br />
thực chất là dạng kí hiệu của ngôn ngữ máy: hợp ngữ sử dụng các kí hiệu bằng tiếng Anh<br />
để biểu diễn các lệnh ngôn ngữ máy cho dễ nhớ hơn. Ví dụ:<br />
Lệnh ngôn ngữ máy<br />
0010 1010 1011 0100<br />
0010 0001 1100 1101<br />
<br />
Lệnh hợp ngữ<br />
MOV AH,2Ah<br />
INT 21h<br />
<br />
Ta thấy các lệnh máy tính bằng các dãy bít 0, 1 rất dài và khó nhớ, còn lệnh hợp ngữ<br />
thì ngắn gọn hơn nhiều. Khi chạy một chương trình hợp ngữ thì phải dịch nó sang ngôn<br />
ngữ máy.<br />
Học hợp ngữ, không chỉ để học một ngôn ngữ lập trình có tốc độ rất nhanh (hợp ngữ là<br />
ngôn ngữ lập trình có tốc độ nhanh nhất) mà còn để nắm bắt được bản chất bên trong của<br />
máy tính, biết cách tác động trực tiếp vào phần lõi của máy tính.<br />
1.2 Biểu diễn số và kí tự trong máy tính<br />
1.2.1 Một số hệ đếm<br />
a) Hệ thập phân (Decimal) - Hệ đếm cơ số 10<br />
Hệ thập phân sử dụng 10 kí hiệu (0, 1, 2,...9) để biểu diễn thông tin. Các số trong hệ<br />
thập phân được biểu diễn dưới dạng tổng các luỹ thừa cơ số 10.<br />
Ví dụ:<br />
Số 1998 trong hệ thập phân có thể biểu diễn như sau:<br />
(1998)10 = 1×103 + 9×102 + 9×101 + 8×100<br />
Trong hợp ngữ, người ta kí hiệu 1 số thập phân bằng chữ D hoặc d ở cuối (viết tắt của<br />
Decimal), cũng có thể không cần viết các chữ đó.<br />
Ví dụ:<br />
(1998)10 được kí hiệu là: 1998D, 1998d, hoặc đơn giản là 1998<br />
b) Hệ nhị phân (Binary) - Hệ đếm cơ số 2<br />
<br />
5<br />
<br />