Tài liệu Bài giảng Tìm hiểu kiến trúc máy tính: Kiến trúc máy tính
Ch•ơng 1: Hệ thống máy vi tính.
I- Giới thiệu:
- Một hệ thống máy vi tính (Microcomputer) cơ bản bao gồm các thành phần sau:
+ Đơn vị hệ thống (System Unit)
+ Bàn phím, chuột.
+ Màn hiển thị (Display Screen)
+ Các ổ đĩa (Disk Drives)
- Đơn vị hệ thống th•ờng đ•ợc coi là Máy tính (Computer). Nó chứa các bản mạch của
hệ thống máy tính.
- Bàn phím, chuột, màn hiển thị th•ờng đ•ợc gọi là thiết bị vào, ra (I/O Devices).
Chúng thực hiện các chức năng nhập và xuất của hệ thống.
- Mạch tích hợp (Intergrated Circuit "IC") đ•ợc sử dụng để lắp ráp thành các mạch điện
tử của máy tính. Mỗi chip IC có thể chứa hàng ngàn transistors. Các IC th•ờng đ•ợc
gọi là các mạch điện tử số bởi vì chúng xử lý các mức tín hiệu điện rời rạc (Hiệu điện
thế cao, thấp). Chúng ta sử dụng ký hiệu "0" và "1" để biểu diễn các trạng thái thấp và
cao của hiệu điện thế. Các ký hiệu trên th•ờng đ•ợc biết nh• là các chữ số nhị phân
(Binary Digit hoặc Bit). Các thông tin đ•ợc máy tí...
50 trang |
Chia sẻ: hunglv | Lượt xem: 1664 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Bài giảng Tìm hiểu kiến trúc máy tính, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Kiến trúc máy tính
Ch•ơng 1: Hệ thống máy vi tính.
I- Giới thiệu:
- Một hệ thống máy vi tính (Microcomputer) cơ bản bao gồm các thành phần sau:
+ Đơn vị hệ thống (System Unit)
+ Bàn phím, chuột.
+ Màn hiển thị (Display Screen)
+ Các ổ đĩa (Disk Drives)
- Đơn vị hệ thống th•ờng đ•ợc coi là Máy tính (Computer). Nó chứa các bản mạch của
hệ thống máy tính.
- Bàn phím, chuột, màn hiển thị th•ờng đ•ợc gọi là thiết bị vào, ra (I/O Devices).
Chúng thực hiện các chức năng nhập và xuất của hệ thống.
- Mạch tích hợp (Intergrated Circuit "IC") đ•ợc sử dụng để lắp ráp thành các mạch điện
tử của máy tính. Mỗi chip IC có thể chứa hàng ngàn transistors. Các IC th•ờng đ•ợc
gọi là các mạch điện tử số bởi vì chúng xử lý các mức tín hiệu điện rời rạc (Hiệu điện
thế cao, thấp). Chúng ta sử dụng ký hiệu "0" và "1" để biểu diễn các trạng thái thấp và
cao của hiệu điện thế. Các ký hiệu trên th•ờng đ•ợc biết nh• là các chữ số nhị phân
(Binary Digit hoặc Bit). Các thông tin đ•ợc máy tính xử lý đều biểu thị d•ới dạng các
dãy số 0 và 1 và đ•ợc gọi là dãy Bit (Bit String).
- Theo chức năng, các mạch điện tử của máy tính gồm 3 loại chính:
+ Đơn vị xử lý trung tâm (Central Processing Unit "CPU").
+ Mạch nhớ (Memory Circuit).
+ Mạch vào ra (I/O Circuit).
- Trong hệ thống vi tính, CPU là một chip xử lý đơn và đ•ợc gọi là Vi xử lý
(Microprocessor). CPU đ•ợc ví nh• bộ não của máy tính có chức năng điều khiển mọi
thao tác trên máy tính. CPU sử dụng mạch nhớ để l•u trữ thông tin, sử dụng các mạch vào
ra để liên lạc với các thiết bị vào ra.
II- Thiết bị và cấu trúc thiết bị.
1- Bản mạch hệ thống (System Board):
- Bản mạch hệ thống là thành phần chính của đơn vị hệ thống, nơi tích hợp bộ vi
xử lý, các mạch nhớ và các mạch vào ra.
- Bản mạch hệ thống th•ờng đ•ợc gọi là Motherboard/ Mainboard bởi chúng
chứa các khe cắm mở rộng (Expansion Slot). Các khe cắm mở rộng cho phép ta
kết nối thêm các bản mạch khác (Add-in Boards/ Add-in Cards). Các mạch vào
ra có thể nằm trên các bản mạch này hoặc đ•ợc tích hợp sẵn trên bản mạch chính.
2- Bộ nhớ (Memory):
- Bytes và Words:
This document is created with the unregistered version of Document2PDF Pilot.
+ Thông tin cần xử lý đ•ợc l•u giữ trong bộ nhớ của máy tính. Các đơn vị
của mạch nhớ có thể l•u trữ chỉ 1 bit dữ liệu. Tuy nhiên các mạch nhớ
th•ờng đ•ợc tổ chức thành từng nhóm để có thể l•u trữ d•ợc 8 bit dữ liệu,
chuỗi 8 bit đ•ợc gọi là 1 Byte. Có một số đ•ợc gọi là địa chỉ (Address) đ•ợc sử
dụng để xác định mỗi Byte của bộ nhớ (Memory Byte). Byte đầu tiên đ•ợc gọi là
Byte số 0. Dữ liệu đ•ợc chứa trong Byte là nội dung của Byte đó còn đ•ợc
gọi là giá trị của Byte (Value).
+ Việc hiểu rõ và phân biệt giữa Địa chỉ và Nội dung rất quan trọng. Địa
chỉ của một byte nhớ là cố định và khác hoàn toàn với các địa chỉ Byte nhớ
khác. Nội dung của một Byte nhớ không đồng nhất và có thể thay đổi tuỳ
thuộc vào các thao tác l•u trữ.
+ Trong hệ thống máy vi tính điển hình, 2 Byte đ•ợc ghép lại thành một
WORD
- Vị trí Bit: Vị trí các bit trong một Byte hoặc một Word th•ờng đ•ợc đánh số từ
phải sang trái. Bắt đầu bằng số 0. Các vị trí đ•ợc biểu thị nh• sau:
7 6 5 4 3 2 1 0
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- Có 2 loại mạch nhớ chính là RAM (Random Access Memory) và ROM (Read
Only Memory)
+ RAM th•ờng đ•ợc gọi là bộ nhớ chính của máy tính. Các vị trí ô nhớ
của RAM có thể cho phép ch•ơng trình đọc (READ) và ghi (WRITE) dữ
liệu lên chúng. Các ch•ơng trình và dữ liệu th•ờng đ•ợc nạp vào RAM và
nội dung các ô nhớ sẽ bị mất khi RAM bị ng•ng cấp điện. Vì vậy các dữ
liệu phải đ•ợc ghi lên bộ l•u trữ ngoài để có thể sử dụng sau này.
+ ROM Khác với RAM Các dữ liệu trong ROM chỉ đ•ợc truy cập ở mức độ
đọc (READ). Vì vậy, khi ROM đ•ợc cập nhật dữ liệu, các dữ liệu đó
không bị thay đổi trong quá trình sử dụng. ROM th•ờng đ•ợc nhà sản xuất sử
dụng để l•u trữ các ch•ơng trình của hệ thống. ROM có chứa các ch•ơng trình
lập trình sẵn đ•ợc gọi là phần "dẻo" Firmware. Loại ROM này có nhiệm vụ
tự kiểm tra khi máy tính bật và nạp các ch•ơng trình khởi động từ đĩa.
This document is created with the unregistered version of Document2PDF Pilot.
3- Buses:
- Bộ xử lý liên lạc với bộ nhớ và các mạch vào ra thông qua tập hợp các dây dẫn
điện và kết nối đ•ợc gọi là BUS. Có 3 loại tín hiệu đ•ợc vận chuyển là Địa chỉ, Dữ
liệu và Điều khiển t•ơng ứng với 3 lại BUS - Bus địa chỉ, Bus dữ liệu và Bus điều
khiển.
- Ví dụ: để đọc đ•ợc một giá trị tại một vị trí của bộ nhớ, CPU phải xác định
đ•ợc địa chỉ ô nhớ nơi l•u trữ dữ liệu thông qua Bus địa chỉ. Dữ liệu sẽ nhận
đ•ợc khi mạch nhớ xác định đ•ợc nơi chứa dữ liệu và truyền qua Bus dữ liệu. Tín hiệu
điều khiển đ•ợc yêu cầu thông báo cho bộ nhớ thực hiện thao tác đọc. CPU gởi tín
hiệu điều khiển thông qua Bus điều khiển. Hình vẽ sau minh hoạ sự liên quan giữa
BUS và các thành phần khác.
4- CPU:
- Một CPU điển hình có 2 thành phần chính:
+ Đơn vị xử lý (Execution Unit "EU")
+ Đơn vị giao diện BUS (BUS Interface Unit "BIU")
a- Đơn vị xử lý:
- Công dụng của bộ phận này là thực thi các lệnh. Bộ phận này chứa các
mạch đ•ợc gọi là đơn vị xử lý Toán học và Logic (Arithmetic and Logic
Unit). ALU có thể điều khiển các phép toán số học và Logic. Dữ liệu của
các phép toán đ•ợc l•u trong mạch đ•ợc gọi là Thanh ghi (Registers). Các
thanh ghi giống nh• là vị trí của bộ nhớ nh•ng chúng ta th•ờng gọi chúng
bằng tên.
- Một EU có chứa 8 thanh ghiđ•ợc sử dụng để l•u dữ liệu, tên các thanh
ghi nh• sau.
+ AX, BX, CX, DX, SI, DI, BP và SP
+ Các thanh ghi tạm thời dùng để l•u các toán hạng cho ALU.
+ Các thanh ghi cờ (Flag Register).
b- Đơn vị giao diện BUS :
- BUS Interface Unit có chức năng liên lạc giữa đơn vị xử lý (EU) với Bộ
nhớ hoặc mạch vào ra. Nó có nhiệm vụ truyền tín hiệu địa chỉ, dữ liệu và điều
This document is created with the unregistered version of Document2PDF Pilot.
khiển trên các đ•ờng BUS.
- Các thanh ghi CS, DS, ES, SS và IP chứa các địa chỉ của ô nhớ. Thanh ghi
IP chứa địa chỉ của lệnh sắp đ•ợc xử lý bởi EU.
- EU và BIU luôn làm việc với nhau và đ•ợc kết nối với nhau bằng các BUS
nội tại. Trong lúc EU đang thi hành lệnh, BIU sẽ tìm nạp 6 Byte của lệnh
tiếp theo vào hàng đợi lệnh. Thao tác này đ•ợc gọi là tìm và nạp lệnh tr•ớc.
Mục đích của công việc này là làm tăng tốc độ của CPU. Trong tr•ờng hợp
EU cần liên lạc với bộ nhớ hoặc các thành phần khác, BIU sẽ tạm ng•ng công
việc nạp lệnh và thi hành công việc cần thiết.
This document is created with the unregistered version of Document2PDF Pilot.
c- Cổng vào ra:
- Các thiết bị vào ra đ•ợc kết nối với máy tính thông qua mạch vào ra. Mỗi
mạch chứa nhiều thanh ghi đ•ợc gọi là cổng vào ra. Một số đ•ợc sử dụng
cho các dữ liệu, một số khác dùng cho các lệnh điều khiển. Giống nh• vị trí
các ô nhớ, các cổng vào ra có các địa chỉ nối với hệ thống BUS, tuy nhiên
các địa chỉ này đ•ợc biết nh• là các địa chỉ vào ra và chỉ đ•ợc sử dụng cho
các lệnh nhập (Input) và xuất (Output). Điều này giúp CPU phân biệt giữa cổng
vào ra và vị trí ô nhớ.
- Chức năng của cổng vào ra là liên lạc giữa CPU và các thiết bị vào ra. Dữ
liệu nhập từ thiết bị vào ra đ•ợc gửi đến các cổng nơi CPU có thể tìm và đọc
chúng. Trong quá trình xuất, CPU ghi dữ liệu vào cổng vào ra, mạch IO có nhiêm
vụ chuyển dữ liệu cho thiết bị vào ra.
5- Thi hành lệnh:
- Để hiểu các thao tác của CPU, ta khảo sát qua quá trình thi hành lệnh. Câu lệnh
mã máy có 2 phần
+ Opcode: Xác định loại lệnh
+ Operands: Cung cấp địa chỉ Bộ nhớ nơi l•u trữ dữ liệu sẽ đ•ợc sử dụng để
xử lý lệnh.
- CPU sẽ thi hành lệnh mã máy bằng 2 b•ớc nh• sau (Chu kỳ tìm nạp, thi hành
lệnh "Fetch-Execute Cycle")
+ Fetch:
. Nạp 1 lệnh từ bộ nhớ
. Giải mã lệnh để xác định thao tác
. Nạp dữ liệu từ bộ nhớ nếu cần.
+ Execute:
. Thực hiện lệnh trên các dữ liệu.
. L•u kết quả lên bộ nhớ nếu cần thiết.
This document is created with the unregistered version of Document2PDF Pilot.
- Ví dụ mô tả:
Giả sử ta sử dụng một lệnh cộng (+) nội dung của thanh ghi AX với nội
dung của 1 từ (Word) của bộ nhớ tạo địa chỉ 0. CPU thi hành phép cộng tại ALU
và l•u kết quả vào Word cũ. Mã lệnh là:
00000001 00000110 00000000 00000000
Tr•ớc khi khảo sát, ta giả định rằng Byte đầu tiên của lệnh đ•ợc l•u tại địa chỉ
nào đó đ•ợc xác định bằng thanh ghi IP. Các b•ớc nh• sau:
a- Tìm nạp lệnh: Bắt đầu chu kỳ, BIU gửi yêu cầu đọc bộ nhớ trên BUS điều
khiển và địa chỉ lệnh lên BUS địa chỉ. Bộ nhớ đáp ứng bằng cách gửi
nội dung tại địa chỉ đ•ợc xác định, mã lệnh đ•ợc gửi trên BUS dữ liệu. Mã
lệnh có 4 Byte trong khi CPU chỉ đọc đ•ợc 1 Word mỗi lần nên sinh ra 2
thao tác đọc (Read). CPU nhận dữ liệu và cộng 4 vào thanh ghi IP Thanh
ghi IP l•u trữ địa chỉ của câu lệnh tiếp theo.
b- Giải mã lệnh: Trong quá trình nhận lệnh, mạch giải mã của EU giải mã
lệnh và xác định đó là thao tác CộNG (ADD) có liên quan đến Word tại địa
chỉ 0.
c- Tìm nạp dữ liệu từ bộ nhớ: EU thông tin cho BIU lấy dữ liệu tại Word 0.
BIU gửi địa chỉ 0 trên BUS địa chỉ và yêu cầu đọc bộ nhớ qua BUS điều
khiển. Nội dung của Word 0 đ•ợc gửi lại EU thông qua BUS dữ liệu và
đ•ợc l•u trong thanh ghi của CPU.
d- Thực hiện thao tác: Nội dung đ•ợc l•u trữ trong thanh ghi trên và trong
thanh ghi AX (Đã đề cập lúc đầu) đ•ợc gửi đến mạch ALU nơi sẽ thực hiện
phép tính và đ•a ra kết quả.
e- L•u kết quả: EU h•ớng dẫn BIU l•u kết quả tại địa chỉ 0. để làm việc
này, BIU gửi yêu cầu ghi trên BUS điều khiển, địa chỉ 0 trên BUS địa chỉ và kết
quả phép tính trên BUS dữ liệu. Nội dung cũ của Word 0 bị ghi đè bằng kết
quả mới.
Chu kỳ sẽ đ•ợc lặp lại cho lệnh tiếp theo mà địa chỉ đã đ•ợc l•u trong thanh ghi
IP.
6- Đồng hồ hệ thống (Timming):
- Ví dụ trên chỉ ra rằng mặc dù các lệnh vô cùng đơn giản nh•ng quá trình thực
thi lại quá phức tạp. Để bảo đảm các b•ớc đ•ợc thi hành đúng tuần tự, mạch điều
khiển đồng hồ (CLOCK) điều khiển bộ xử lý bằng cách sinh ra chuỗi xung nhịp.
Khoảng ngắt giữa 2 xung đ•ợc gọi là chu kỳ (Period). Số l•ợng xung trong khoảng
thời gian 1 giây đ•ợc gọi là Tốc độ đồng hồ (Clock Rate hoặc Clock Speed) và đ•ợc
tính bằng đơn vị MegaHertz (MHz). Tốc độ nguyên bản của IBM PC là 4.77 MHz, các
máy tính hiện nay đã là 3060 MHz và còn nhanh hơn nữa.
This document is created with the unregistered version of Document2PDF Pilot.
- Các mạch của máy tính đ•ợc kích hoạt bằng xung đồng hồ, đồng nghĩa với
việc các mạch chỉ thực hiện lệnh khi đ•ợc cấp xung. Mỗi b•ớc trong việc tìm nạp và
thi hành lệnh đều yêu cầu 1 hay nhiều xung.
7- Ngôn ngữ lập trình (Programming Language):
- Các thao tác với phần cứng máy tính dều đ•ợc điều khiển bởi các phần mềm.
Khi máy tính đ•ợc bật, nó luôn trong tiến trình xử lý các lệnh. Vậy các lệnh diều
khiển là gì? đó là vấn đề chúng ta cần khảo sát.
a- Ngôn ngữ máy (Machine Language):
+ CPU chỉ thực thi đ•ợc các lệnh theo ngôn ngữ máy, đó dãy các bit.
D•ới đây là một ví dụ về mã lệnh theo ngôn ngữ máy dành cho IBM
PC.
Lệnh mã máy Chức năng
10100001 00000000 00000000 Tìm nạp nội dung Word 0 và đ•a vào thanh ghi AX
00000101 00000100 00000000 Cộng (Add) 4 vào AX
10100011 00000000 00000000 L•u tổng (Kết quả) nội dung của AX vào Word 0.
Rất khó nhớ và dễ dàng mắc sai lầm khi lập trình theo ngôn ngữ kiểu này.
b- Ngôn ngữ Assembly:
+ Ngôn ngữ sử dụng tiện lợi hơn là Assembly. Trong ngôn ngữ này, ta
dùng các tên theo ký hiệu để trình bày lệnh, thanh ghi, và địa chỉ bộ
nhớ. Nếu Word 0 là A thì đoạn mã lệnh dề cập tr•ớc sẽ đ•ợc trình bày
nh• sau:
Lệnh mã Assembly Chú thích
MOV AX,A ; Nạp nội dung địa chỉ A của bộ nhớvà đ•a vào thanh ghi AX
ADD AX,4 ;Cộng 4 vào AX
MOV A,AX ;Chuyển (L•u) kết quả trong AX vào địa chỉ A của bộ nhớ.
Mỗi ch•ơng trình trong ngôn ngữ này phải đ•ợc dịch qua ngôn ngữ máy tr•ớc khi CPU có thể thực
hiện. 1 ch•ơng trình dịch lệnh sẽ dịch mỗi phát biểu lệnh thành một lệnh máy đơn.
c- Ngôn ngữ bậc cao:
+ Mặc dù ngôn ngữ Assembly có vẻ dễ hiểu, dễ viết hơn nh•ng ngôn
ngữ này vẫn quá khó để kiểm soát bởi cả một chuỗi lệnh và các tên
lệnh phải nhớ. Chúng chẳng thân thiện với ngôn ngữ ta vẫn dùng hàng
ngày. Chính vì vậy một số ngôn ngữ bậc cao đã đ•ợc thiết kế và phát
triển. Ta có thể nghe thấy nhiều loại ngôn ngữ lập trình trong thể ghới
của máy tính nh•: FORTRAN, Pascal, C, C++… Về cơ bản, mỗi
loại ngôn ngữ đ•ợc thiết kế cho các ứng dụng khác nhau nh•ng có
điểm chung nhất là gần với ngôn ngữ tự nhiên của con ng•ời (Nhất là
các dân tộc sử dụng tiếng Anh!!!).
+ Để máy tính có thể xử lý đ•ợc các lệnh phải có các ch•ơngtrình biên
dịch (Compiler) các ch•ơng trình biên dịch phải thao tác rất nhiều để có thể
This document is created with the unregistered version of Document2PDF Pilot.
dịch một lệnh ra thành mã máy bởi các ngôn ngữ có độ phức tạp cao.
Mỗi một lệnh của ngôn ngữ lập trình bậc cao th•ờng đ•ợc dịch thành
nhiều lệnh mã máy.
+ Đôi khi ta vẫn phải sử dụng các đoạn mã dạng Assembly để xử lý
một vấn đề nào đó. Điều này th•ơng xảy ra khi ta quan tâm đến tốc độ và
sự đơn giản của ch•ơng trình. Ví dụ: Các thao tác đọc/ ghi các địa chỉ
bộ nhớ hoặc truy xuất các địa chỉ vào ra.
d- Một đoạn ch•ơng trình đơn giản:
Cung cấp khái niệm về ngôn ngữ lập trình Assembly và cách CPU xử lý
lệnh:
Ch•ơng trình 1: Prog01.asm
This document is created with the unregistered version of Document2PDF Pilot.
III- Kết luận
- Để hiểu đ•ợc kiến trúc của máy tính là một vấn đề hoàn toàn không đơn giản,
ngoài các kiến thức đ•ợc cung cấp một cách cơ bản, chúng ta cần phải tham khảo thêm
trong quá trình sử dụng, bảo trì hệ thống máy tính, tham khảo các sách h•ớng dẫn.
- Bài đầu tiên này cung cấp một số kiến thức cơ bản về cốt lõi của hệ thống máy
tính, cách thức xử lý của CPU. Một ngôn ngữ đặc tả hoạt động của hệ thống rõ nhất
(Nh•ng không dễ hiểu).
- Các vấn đề cần quan tâm nhất trong bài đầu tiên.
+ Các thành phần của máy tính nhìn d•ới góc độ kỹ thuật.
+ Main Board
+ Bộ nhớ (Memory).
+ Đ•ờng truyền dữ liệu (BUSES).
+ Cấu trúc CPU.
+ Chu kỳ th•c hiện lệnh
+ Ngôn ngữ lập trình.
Phụ lục 1:
* BUS dữ liệu và BUS địa chỉ:
This document is created with the unregistered version of Document2PDF Pilot.
Ch•ơng 2: Hệ thống máy tính cá nhân IBM
I- Giới thiệu họ vi xử lý:
- Hệ thống máy tính cá nhân bao gồm IBM PC, PC XT, PC AT, PS/1, và PS/2.
- Các hệ thống trên đều đ•ợc thiết kế dựa trên họ của bộ xử lý Intel 8086 bao gồm
8086/ 8088, 80186, 80188, 80286, 80386, 80386SX, 80486, 80486SX
- Các hệ thống hiện nay của IBM và t•ơng thích IBM đều dùng các bộ xử lý của Intel
từ Pentium, Pentium II, Pentium III, Pentium IV..
- Tốc độ xử lý của Bộ xử lý tăng rất nhanh từ 4.77 MHz ở những bộ xử lý 8086/ 8088
cho đến hiện nay là 3060 MHz.
II- Cấu trúc điển hình của bộ xử lý
1- Tổ chức cấu trúc trong bộ xử lý:
- Thông tin trong bộ vi xử lý đ•ợc l•u trong các thanh ghi (Registers). Các thanh
ghi đ•ợc phân loại dựa vào các chức năng mà chúng thực hiện. Nói một cách tổng
quát, các thanh ghi dữ liệu l•u trữ dữ liệu của lệnh, các thanh ghi địa chỉ l•u trữ địa
chỉ của lệnh hoặc dữ liệu, các thanh ghi trạng thái l•u trữ trạng thái hiện tại của bộ xử
lý.
- Hệ thống chuẩn 8086 đ•ợc thiết kế các thanh ghi nh• sau:
+ 4 thanh ghi dữ liệu AX, BX, CX, DX.
+ 4 thanh ghi đoạn CS, DS, SS, ES
+ 5 thanh ghi địa chỉ SI, DI, SP, BP, IP.
+ 1 thanh ghi trạng thái (Flag)
Tổng cộng gồm có 14 thanh ghi, mỗi thanh ghi có độ dài là 16 bit hay còn
đ•ợc gọi là 1 Word Bộ xử lý 16 bit. Các bộ xử lý sau này sử dụng thanh ghi có
độ dài 32 bit Bộ xử lý 32 bit…
- Các thanh ghi của CPU đ•ợc biêủ diễn nh• sau:
E AH AL
E BH BL
E CH CL
E DH DL
E SP
E BP
E SI
E DI
E IP
E FLAG
CS
DS
SS
ES
This document is created with the unregistered version of Document2PDF Pilot.
FS
GS
2- Các thanh ghi dữ liệu (Data Register).
- Mặc dù bộ xử lý có thể thao tác với các dữ liệu đ•ợc l•u trữ trong bộ nhớ
nh•ng để có thể làm việc đ•ợc nhanh hơn, bộ xử lý phải dụng các dữ liệu có sẵn trong
các thanh ghi. Đây cúng chính là lý do mà các bộ xử lý về sau cang có khuynh h•ớng
đ•ợc thiết kế vói nhiều thanh ghi hơn. 4 thanh ghi đ•ợc thiết kế để thao tác với dữ liệu
chung
- Các thanh ghi công dụng chung (Còn đ•ợc gọi là các thanh ghi dữ liệu "Data
Register"): ký hiệu là AX, BX, CX, DX đ•ợc sử dụng để l•u trữ các kết quả tính
toán.
+ Thanh ghi AX (Accumulator Register): Đ•ợc sử dụng cho các chỉ thị Số
học, Logic và chuyển dữ liệu. Thanh ghi này sinh ra các mã lệnh ngắn
nhất.Trong các phép tính nhân và chia, một trong các số có liên quan phải
đ•ợc l•u trong AX hoặc AL. Các thao tác nhập hoặc xuất cũng đ•ợc yêu
cầu phải sử dụng AL và AX.
+ Thanh ghi BX (Base Register): Dùng để tính toán các địa chỉ.
+ Thanh ghi CX (Count Register): Th•ờng đóng vai trò tính toán số vòng
lặp trong ch•ơng trình.
+ Thanh ghi DX (Data Register): Th•ờng đ•ợc sử dụng cho các phép toán
nhân và chia. Thanh ghi này cúng đ•ợc sử dụng cho các thao tác vào ra, xác
định địa chỉ dữ liệu.
E AH AL
E BH BL
E CH CL
E DH DL
+ Đối với các bộ xử lý Pentium trở lên, các thanh ghi đ•ợc thiết kế sử dụng
32 bit. Tên gọi của các thanh ghi đ•ợc thay đổi chút ít AX EAX
(ExtraAX)…
3- Các thanh ghi đoạn (Segment Register):
- Các thanh ghi đoạn đ•ợc tổ chức để tính toán địa chỉ của các khối bộ nhớ. Các
thanh ghi đoạn trỏ đến địa chỉ đầu của đoạn bộ nhớ:
+ Thanh ghi mã đoạn CS (Code Segment ):
+ Thanh ghi đoạn dữ liệu DS (Data Segment):
+ Thanh ghi EX (Extra Segment):
+ Thanh ghi Ngăn xếp SS (Stack Segment):
CS
DS
SS
ES
- Để hiểu rõ công dụng của các thanh ghi đoạn này, ta cần khảo sát đến cách tổ
This document is created with the unregistered version of Document2PDF Pilot.
chức bộ nhớ.
- Bộ nhớ là tập hợp của các Byte, mỗi Byte bộ nhớ đều có một địa chỉ nhất định
và đ•ợc bắt đầu bằng 0. Bộ xử lý 8086 có thể gán 20 địa chỉ vật lý cho các địa chỉ bộ
nhớ (20 bits BUS địa chỉ). Do đó khả năng đánh địa chỉ bộ nhớ là 220 = 1,048,576
Bytes (1 MB). 5 Bytes đầu tiên có các địa chỉ nh• sau (Tính theo hệ thập lục phân):
00000h
00001h
00002h
00003h
00004h
............ Địa chỉ cuối cùng là FFFFFh (1111 1111 1111 1111 1111 B)
+ Đoạn bộ nhớ (MemorySegments):
. Mỗi đoạn bộ nhớ là môt khối gồm 216 Bytes (64 KB).Mỗi đoạn đ•ợc
xác định bằng số hiệu đoạn bắt đầu bằng 0. Số hiệu Segment là 16 bit
giá trị cao nhất là FFFFh.
. Bên trong của Segment, vị trí của ô nhớ đ•ợc xác định bằng độ dời
(Offset). Đây là số l•ợng Byte đ•ợc tính từ đầu mỗi Segment. Với 64 KB
Segment, độ dời (Offset) có thể xác định bằng 1 số 16 bit. Byte đầu
tiên của Segment có độ dời là 0. Byte cuối cùng là FFFFh.
+ Địa chỉ Segment:Offset: 1 vị trí của ô nhớ có thể xác định bằng số hiệu
Segment và độ dời đ•ợc biểu diễn d•ới dạng "Segment:Offset" và đ•ợc
coi nh• là địa chỉ Logic. Ví dụ: A4FB:4872h có nghĩa độ dời 4872h
bên trong Segment có số hiệu A4FB. Để đạt đ•ợc 20 bit địa chỉ vật lý,
bộ vi xử lý 8086 phải dịch địa chỉ segment 4 bits về bên trái (nhân với 10h)
sau đó cộng độ dời địa chỉ vật lý của bộ nhớ sẽ là:
A4FB x 10h A4FB0h
+ 4872h
A9822h 20 bit địa chỉ vật lý
+ Vị trí của các Segments:
* Segment 0 đ•ợc bắt đầu = 0
0000:0000 = 00000h và kết thúc tại
0000:FFFF= 0FFFFh
* Segment 1 đ•ợc bắt đầu = 1
0001:0000 = 00010h và kết thúc tại
0001:FFFF= 1000Fh
Các Segment bắt đầu cho mỗi 16 Bytes (10h) và địa chỉ chỉ bắt đầu của
Segment luôn kết thúc với chữ số thập lục phân là 0. Ta gọi 16 Bytes này là 1
đoạn (Paragraph) giống nh• một đoạn văn. Ta có thể coi 1 địa chỉ chia hết
cho 16 (Kết thúc với số HEX 0) là đ•ờng biên của đoạn (Boundary).
Các segment có thể chồng mép lên nhau nên định dạng Segment:Offset là
không nhất định. Khảo sát các ví dụ sau:
Ví dụ 1: Tại vị trí bộ nhớ có địa chỉ vật lý đ•ợc xác định là 1256Ah, xác
định địa chỉ dạng Segment:Offset cho Segment 1240h
Giải quyết:
. Đặt X là Offset trong Segment 1256Ah
This document is created with the unregistered version of Document2PDF Pilot.
. Đặt Y là Offset trong Segment 1240h
Ta có:
. 1256Ah=12560h + X
. 1256Ah=12400h + Y
X=1256Ah - 12560h = Ah và
Y=1256Ah - 12400h = 16Ah
1256Ah =1256:000A = 1240:016A
Ta cũng có thể tính toán số hiệu Segment khi có đ•ợc địa chỉ vật lý và
Offset
Ví dụ 2: Vị trí bộ nhớ có địa chỉ vật lý 80FD2h, tìm Segment có Offset là
BFD2h.
Giải quyết:
Ta đã biết:
Địa chỉ vật lý = Segment x 10h + Offset
Segment x 10h = Địa chỉ vật lý - Offset.
Vậy ta có thể tính toán:
Địa chỉ vật lý = 80FD2h
- Offset = BFD2h
Segment x 10h = 75000h
Vậy Segment phải là: 7500h
+ Đoạn của ch•ơng trình (Program Segments):
. Các ch•ơng trình đ•ợc lập trình bằng ngôn ngữ máy tínhchứa các
chỉ thị (Code) và dữ liệu. Bao gồm cả Cấu trúc của dữ liệu (Data Structure)
đ•ợc gọi là Stack (Ngăn xếp) đ•ợc sử dụng bởi bộ xử lý để thực hiện
việc gọi các thủ tục.
. Mã ch•ơng trình, dữ liệu và ngăn xếp đ•ợc nạp vào các đoạn bộ nhớ
(Memory Segments) khác nhau có các thanh ghi mang tên t•ơng tự. CS
(Code Sement), DS (Data Segment), SS (Stack Segment). Khi cần thao
tác với dữ liệu bộ xử lý có thể sử dụng thêm thanh ghi ES (Extra Segment).
. Một đoạn ch•ơng trình không cần phải chiếm hết 1 đoạn 64 KB của
bộ nhớ, nhiều đoạn ch•ơng trình có thể nằm gối đầu lên nhau do đó ta
có các Số hiệu Segment và các đoạn ch•ơng trình tại các vị trí t•ơng
đối.
. Tại một thời điểm xác định, chỉ có các vị trí bộ nhớ đ•ợc đánh địa
chỉ bởi 4 thanh ghi đoạn mới có thể truy cập. Do đó, chỉ có 4 đoạn bộ nhớ
đ•ợc hoạt động. Tuy nhiên, nội dung của một thanh ghi đoạn có thể
đ•ợc cập nhật, thay đổi bởi ch•ơng trình để đánh địa chỉ các Segment khác
nhau.
4- Các thanh ghi con trỏ và các thanh ghi chỉ số (Pointer và Index Register):
- Các thanh ghi con trỏ và chỉ số th•ờng trỏ đến vị trí của ô nhớ (Chứa địa chỉ
Offset). Khác với các thanh ghi đoạn (Segment), các thanh ghi con trỏ và chỉ số có thể sử
dụng để tính toán các phép tính số học và một số thao tác khác.
- Các thanh ghi con trỏ và chỉ số bao gồm: SP (Stack Pointer), BP (Base Pointer),
IP Instruction Ponter, SI (Source Index), DI (Destination Index), Các thanh ghi cờ (Flag
Register).
This document is created with the unregistered version of Document2PDF Pilot.
E SP
E BP
E SI
E DI
E IP
E FLAG
+ Thanh ghi SP sử dụng kết hợp với thanh ghi SS để truy cập Stack Segment.
+ Thanh ghi BP đ•ợc sử dụng để truy cập dữ liệu tại Stack, có thể sử dụng
để truy cập Segment khác.
+ Thanh ghi SI trỏ đến vị trí bộ nhớ của Data Segment đ•ợc đánh địa chỉ
bởi DS. Khi tăng giá trị của SI, ta có thể truy cập các vị trí bộ nhớ khác.
+ Thanh ghi DI cùng chức năng nh• thanh ghi SI. Có 1 tập hợp các lệnh
đ•ợc gọi là chuỗi lệnh sử dụng thanh ghi DI để truy cập vào các địa chỉ bộ nhớ
đ•ợc đánh địa chỉ bởi thanh ghi ES.
+ Thanh ghi IP để truy cập các lệnh. Bộ xử lý sử dụng các thanh ghi CS, IP.
Thanh ghi CS chứa số hiệu Sement của lệnh tiếp theo, thanh ghi IP chứa
Offset đ•ợc cập nhật mỗi khi 1 lệnh đ•ợc thi hành với mục đích trỏ đến câu
lệnh kế tiếp. Không giống các thanh ghi khác, thanh ghi IP không thể điều
khiển trực tiếp bằng lệnh 1 câu lệnh không thể coi IP nh• một toán hạng
(Operand).
+ Thanh ghi trạng thái (Flag) th•ợc thiết kế để biểu thị trạng thái của bộ vi
xử lý. Các bit của thanh ghi Flag đ•ợc xử lý riêng lẻ. Có 2 loại cờ: Trạng
thái (Status Flag) và điều khiển (Control Flag).
. Các cờ trạng thái (Status Register) mô tả kết quả của lệnh đ•ợc xử lý.
Ví dụ khi phép trừ cho ra kết quả 0, cờ ZF cho giá trị 1 (True).
. Các cờ điều khiển (Contrl Flag) cho phép hoăc không cho phép các
thao tác nhất định của bộ xử lý. Ví dụ: nếu cờ ngắt (IF " Interrupt Flag")
đ•ợc xoá (= 0), việc nhập từ bàn phím bị bộ xử lý lờ đi.
11 10 9 8 7 6 4 2 0
. 0 Carry
. 2 Parity
. 4 Auxilary Carry
. 6 Zero
. 7
. 8 Trace
. 9 Interrupt
.10 Direction
.11 Overflow
Các bit còn lại không sử dụng.
5- Tổ chức một máy tính cá nhân
- Máy tính luôn đ•ợc xây dựng trên 2 phần cơ bản là phần cứng (Hardware) và
This document is created with the unregistered version of Document2PDF Pilot.
phần mềm (Software). Trong đó phần mềm điều khiển các thao tác của phần cứng. Để
hiểu đ•ợc các thao tác của phần cứng, chùng ta nên tìm hiểu phần mềm điều khiển máy
tính nh• thế nào?.
a- Hệ điều hành (Operating System):
+ Phần mềm quan trọng nhất cho máy tính là hệ điều hành. Mục đích chính
của hệ điều hành là xác định việc điều khiển tất cả các thiết bị cấu hình
thành một máy tính. Các chức năng chính của hệ điều hành là:
. Đọc và thi hành các lệnh đ•ợc đ•a ra bởi ng•ời dùng.
. Thực hiện các điều khiển vào ra.
. Đ•a ra các thông báo lỗi.
. Quản lý bộ nhớ và các tài nguyên khác.
+ Tại thời điểm hiện tại, các hệ điều hành đang đ•ợc sử dụng thông dụng là
các hệ điều hành Windows. Nh•ng để dễ hiểu và dễ sử dụng, chúng ta
khảo sát ch•ơng trình bằng hệ điều hành MS DOS trên các hệ thống máy
tính dựa vào cấu trúc chuẩn của bộ xử lý 8086/8088.
+ Một trong các chức năng chính của hệ điều hành DOS là các thao tác đọc
ghi đĩa. Ch•ơng trình và các thông tin đ•ợc l•u trên đĩa d•ới dạng File. Ví
dụ điển hình là File Command .com với phần tên file là Command và phần
mở rộng là com.
+ Các ch•ơng trình đ•ợc l•u trên đĩa, nên khi máy tính đ•ợc bật và các
ch•ơng trình muốn chạy đ•ợc phải đ•ợc truy xuất từ đĩa. Có 1 phần ch•ơng
trình hệ thống đ•ợc nạp sẵn trong ROM th•ờng đ•ợc gọi là tiểu trình BIOS
(Basic Input/ Output System routines).
b- BIOS:
+ Ch•ơng trình của BIOS điều khiển việc nhập/ xuất (I/O) của máy tính.
Mỗi loại máy tính có cấu hình phần cứng riêng do đó các ch•ơng trình BIOS phải
t•ơng thích vói hệ thống đó. Điều này liên quan mật thiết đến các mạch vào
ra của hệ thống. Các lệnh vào ra của DOS đều đ•ợc thực hiện bởi các
ch•ơng trình của BIOS
+ Chức năng quan trọng khác của BIOS là kiểm tra các mạch và nạp hệ điều
hành.
6- Tổ chức bộ nhớ của máy tính cá nhân
- Các ch•ơng trình ứng dụng có thể sử dụng rất nhiều bộ nhớ. Tuy nhiên một
vài vị trí của bộ nhớ chứa các thông tin dành cho bộ xử lý. Ví dụ 1 KB đầu tiên
dành cho bảng Vector ngắt Địa chỉ (00000 003FFh).
- Các vị trí khác khác có thể đ•ợc sử dụng cho các mục đích đặc biệt nh• các
tiểu trình của BIOS, Bộ nhớ hiển thị (Video Memory). Bộ nhớ hiển thị l•u trữ các dữ
liệu sẽ đ•ợc gửi đến màn hình. Để có thể xem đ•ợc các thông tin về màn hình, cách
tốt nhất là chia bộ nhớ thành nhiều đoạn khác nhau thành các Segment rời rạc. Bắt
đầu từ Sement 0 kết thúc bằng địa chỉ 0FFFFh, địa chỉ kế tiếp sẽ là 10000h =
1000:000T•ơng tự nh• vậy, Kết thúc của Segment này là 1FFFFh và cứ tiếp tục nh•
vậy.
- Bộ nhớ có thể đ•ợc chia nh• sau:
This document is created with the unregistered version of Document2PDF Pilot.
7- Các cổng vào ra thông dụng của máy tính cá nhân (I/O Ports)
- Một số địa chỉ cổng thông dụng của PC có thể đ•ợc liệt kê nh• sau. Trên các
hệ thống máy tính sử dụng Windows có thể dùng công cụ System Information để xem
thông tin chi tiết về các cổng này.
Stt Địa chỉ cổng Mô tả
1 20h - 21h Điều khiển ngắt
2 60h - 63h Điều khiển bàn phím
3 200h - 20Fh Điều khiển Game
4 2F8h - 2FFh Cổng tuần tự (COM 2)
5 320h - 32Fh ổ cứng
6 378h - 37Fh Cổng song song (LPT 1)
7 3C0h - 3CFh Màn hình EGA
8 3D0h - 3DFh Màn hình CGA
9 3F8h - 3FFh Cổng tuần tự (COM1)
8- Quá trình khởi động.
- Khi máy tính đ•ợc cấp điện, bộ xử lý đ•ợc đặt trong trạng thái khởi động,
Thanh ghi CS đ•ợc đặt là FFFFh, thanh ghi IP đ•ợc đặt 0000h lệnh đầu tiên đ•ợc xử
lý vùng nhớ FFFF0h. vị trí này dành cho ROM BIOS và chứa lệnh nhảy về địa
ch•ơng trình khởi động máy tính của BIOS. Sau đó quá trình tiếp tục cho tới khi hệ
điều hành đ•ợc nạp.
This document is created with the unregistered version of Document2PDF Pilot.
Chýừng 3: Ngôn ngữ Assembly
I- Cấu trúc lệnh
1- Cú pháp lệnh
- Ch•ơng trình chứa nhiều phát biểu lệnh, mỗi phát biểu lệnh nằm trên 1
dòng. Mỗi phát biểu lệnh có thể là mọtt lệnh đ•ợc dịch hoặc xử lý trực tiếp. Các câu
lệnh cần đ•ợc phát biểu theo một dạng (Cú pháp lệnh) nh• sau:
Name Operation Operand (s) ;Comment
Tên Toán tử Toán hạng ;Giải thích
+ Ví dụ:
Start Mov CX, 5 ;Khoi tao bo đem.
. Name: START đ•ợc coi nh• một nhãn.
. Operation: Mov
. Operand: CX và 5
. Comment: Khoi tao bo dem
- Mô tả chi tiết các tr•ờng (Field)
+ Tr•ờng Name: Sử dụng cho các lênh đặt nhãn, các tên thủ tục hoặc
biến.Trình dịch lệnh dịch các tên nh• là địa chỉ của bộ nhớ. Tên có thể đ•ợc
đặt có độ dài ttói đa 31 ký tự, có thể chứa chữ, chữ số và các ký tự dặc biệt
nh• ? . @ _ & %. Không đ•ợc chứa các khoảng trắng. Nếu dấu chấm đ•ợc
sử dụng thì phải đứng đầu tiên. Không phân biệt chữ in hoa hoặc chữ
th•ờng.
. Ví dụ các tên hợp lệ:
Bodem01
@Kytu
Tong_2_so
$1000
OK?
.Test
. Ví dụ các tên không hợp lệ
Hai Nguoi ; Có khoảng trắng
2AnhEm ; Bắt đầu bằng số
A32.77 ; Dấu chấm không ở đầu.
+ Tr•ờng Operation: Trong mỗi lệnh, Tr•ờng Operation chứa Mã điều
khiển dạng biểu t•ợng (Opcode). Trình dịch sẽ dịch mã trên thành mã theo
ngôn ngữ máy. Các ký hiệu th•ờng mô tả chức năng của lệnh, ví dụ nh•:
MOV, ADD, SUB…
+ Tr•ờng Operand: Trong mỗi lệnh , tr•ờng này xác định dữ liệu sẽ đ•ợc
xử lý bởi các Operatión. Các câu lệnh có thể có 0, 1, hoặc 2 Operand. Ví
dụ:
NOP ; Khong Operand.
INC AX ; 1 Operand .
ADD WORD1, 2 ; 2 Operands.
+ Tr•ờng Comment: Sử dụng để chú thích, làm rõ các câu lệnh. Các câu
chú thích đ•ợc bắt đầu là dấu ; . ví dụ:
Mov AX, 0 ; Khoi tao thanh ghi AX = 0.
Hoặc:
This document is created with the unregistered version of Document2PDF Pilot.
; Khoi tao cac thanh ghi AX, BX
Mov AX, 0
Mov BX, 0
2- Dữ liệu ch•ơng trình:
- Bộ xử lý chỉ thao tác đ•ợc với các dữ liệu Binary, do đó trình dịch phải dịch
tất cả dữ liệu thành các số Binary.. Tuy nhiên, trong các ch•ơng trình dung ngôn
ngữ Assembly ta có thể biểu diễn các dữ liệu là Binary, Decimal, Hexa Decimal, và
ngay cả các ký tự.
- Dữ liệu chữ số:
+ các chữ số Binary đ•ợc biểu diễn nh• một chuỗi các bit và kết thúc
bằng ký tự B hoặc b ví dụ nh• "1001b". T•ơng tự, các dạng chữ số decimal có
thể kết thúc bằng ký tự D hoặc d.
+ Các chữ số d•ới dạng Hex phải đ•ợc bắt đầu bằng một chữ số thập
phân (Decimal) và kết thúc bằng ký tự H hoặc h, Ví dụ "0ABCDh" Chữ số 0
đầu tiên, ký tự H sau cùng.
+ các ví dụ sau biểu diễn các các khai báo số hợp lệ trong ch•ơng trình:
Chữ số Loại dữ liệu
10101 Decimal
10101b Binary
3256 Decimal
-2453 Decimal
1,432 Không hợp lệ vì có chứa ký tự không phải là ký tự số
1B2Dh Hex
2B6C Không hợp lệ vì không kết thúc bằng ký tự H
FEEEH Không hợp lệ vì không bắt đầu bằng ký tự số
0FFFFH Hex
- Dữ liệu ký tự:
Các ký tự và chuỗi ký tự phải đ•ợc biểu diễn nằm trong cặp dấu nháy
đơn '..' Hoặc nháy kép "..", ví dụ "A" hoặc 'hello'. Các ký tự đ•ợc biên dịch
sang hệ thống mã ASCII bởi ch•ơng trình dịch, vì vậy không có gì la khác
nhau giữa cách biểu diễn "A" và 41H (Mã ASCII của A)
- Các biểu diễn dữ liệu quy •ớc:
Quy •ớc Đại diện cho
DB Define Byte
DW Define Word
DD Define Doubleword (Dãy 2 Words)
DQ Define Quadword (Dãy 4 Words)
DT Define Ten Byte (Dãy 10 Bytes)
3- Biến:
Các biến trong ngôn ngữ bậc thấp đóng vai trò nh• các biến trong các ngôn
ngữ lập trình bậc cao. Mỗi biến dều có kiểu dữ liệu riêng và đ•ợc gán một vị trí bộ
nhớ nào đó bởi ch•ơng trình. Các loại biến nh• sau:
- Biến Byte (Byte Variables):
Khai báo biến theo định dạng nh• sau:
Name DB Initial value
Tên biến Kiểu biến Giá trị khởi tạo
Ví dụ khai báo:
This document is created with the unregistered version of Document2PDF Pilot.
Alpha DB 4
Ch•ơng trình sẽ tổ chức 1 byte bộ nhớ đặt tên là Alpha, khởi tạo dữ liệu
trong bộ nhớ là 4. Nếu không cần khởi tạo dữ liệu tr•ớc, ta chỉ cần thay đổi
một chút trong khai báo nh• sau:
Alpha DB ?
Dấu "?" để thay thế cho dữ liệu cần khởi tạo.
Giới hạn khai báo của biền loại này theo giá trị Decimal:
-128 137 nếu sử dụng các số có dấu.
0 255 nếu sử dụng số không dấu.
- Biến Word (Word Variables):
Khai báo biến theo định dạng nh• sau:
Name DW Initial value
Tên biến Kiểu biến Giá trị khởi tạo
Ví dụ khai báo:
Alpha DB -4
Ch•ơng trình sẽ tổ chức 2 bytes bộ nhớ để sử dụng cho loại biến này.
Giới hạn sử dụng theo giá trị Decimal:
- 32768 32767 nếu sử dụng các số có dấu.
0 65535 nếu sử dụng các số không dấu.
- Biến mảng (Array Variables):
Trong ngôn ngữ Assembly, một mảng là một dãy các bytes hoặc words
bộ nhớ. Ví dụ nh• ta định nghĩa một mảng gồm 3 Bytes với các giá trị khởi
tạo lần l•ợt là 10h, 20h, 30h:
B_Array DB 10h,20h,30h
B_Array là Byte đầu tiên, B_Array +1 là Byte thứ 2 và B_Array + 2 là
Byte thứ ba. Nếu ch•ơng trình tổ chức địa chỉ 200h cho biến, bộ nhớ sẽ đ•ợc
phân bố nh• sau:
Địa chỉ Nội dung bộ nhớ
B_Array 200h 10h
B_Array + 1 201h 20h
B_Array + 2 202h 30h
T•ơng tự nh• trên, một mảng kiểu Word đ•ợc phân bố nh• sau:
W_Array DW 1000,40,29870,323
Địa chỉ Nội dung bộ nhớ
W_Array 0300h 1000d
W_Array + 1 0302h 40d
W_Array + 2 0304h 29870d
W_Array + 3 0306h 323d
- Byte thấp và Byte cao của Word.
Đôi khi ta chỉ cần sử dụng Byte cao hoặc byte thấp trong một biến dạng
Word. Ví dụ ta khai báo nh• sau:
Word01 DW 1234h
Byte thấp chứa giá trị 34h, Byte cao chứa giá trị 12h.
- Chuỗi ký tự (Character Strings):
Một mảng các mã ASCII có thể đ•ợc khởi tạo với một chuỗi các ký tự.
Ví dụ nh• sau:
Letters DB 'ABC'
Cũng có thể đ•ợc khai báo nh• sau:
Letters DB 41h,42h,43h
This document is created with the unregistered version of Document2PDF Pilot.
Trong một chuỗi, ch•ơng trình dịch phân biệt giữa các ký tự chữ hoa và
chữ th•ờng. Do đó 'ABC' (41h,42h,43h) sẽ khác với 'abc' (61h,62h,63h). ta có
thể khai báo kết hợp cả ký tự chữ cái và ký tự số chung một biến:
Mess DB 'Hello',0Ah,0Dh,'$'
T•ơng đ•ơng:
Mess DB 48h,45h,4Ch,4Ch,4Fh,0Ah,0Dh24h
- Hằng số đ•ợc định nghĩa (named Constants):
Nhằm mục đích để mã ch•ơng trình dễ hiểu hơn, ta th•ờng khai báo
một số hằng số cố định. Để khai báo hằng số, ta sử dụng từ khoá EQU, Cú
pháp nh• sau:
Name EQU Constant
Tên t•ơng đ•ơng Hằng số
Ví dụ:
LF EQU 0Ah
Giải thích:
Ta dùng tên LF cho giá trị 0Ah, Mã ASCII của 0Ah là Line
Feed (Xuống dòng). Tên LF có thể dùng để thay thế cho 0Ah bất cứ chỗ nào
trong ch•ơng trình. Hai câu lệnh sau là t•ơng đ•ơng:
Mov DL,0Ah ;và
Mov DL,LF
4- Một số lệnh cơ bản
Có hàng trăm lệnh trong bộ lệnh của CPU, chúng cũng đ•ợc thiết kế thêm cho
các loại CPU về sau này. Trong phần này, chúng ta chỉ quan tâm đến một số lệnh
thông dụng nhất đ•ợc sử dụng để di chuyển dữ liệu và một số tính toán số học.
Các mô tả d•ới đây sử dụng các từ Word01, Word02 nh• biến kiểu Word,
Byte01, Byte02 nh• biến kiểu Byte.
- Lệnh MOV và lệnh XCHG
+ Lệnh MOV đ•ợc sử dụng để di chuyển dữ liệu giữa các thanh ghi,
giữa thanh ghi và vị trí nào đó của bộ nhớ hoặc di chuyển trực tiếp một số vào
thanh ghi hoặc bộ nhớ.
Cú pháp lệnh:
MOV Destination, Source
Di chuyển Đích đến , Nguồn
Ví dụ:
Mov AX,Word01
Giá trị có trong thanh ghi AX sẽ đ•ợc thay thế bởi giá trị đ•ợc l•u
trong vị trí bộ nhớ Word01. Giá trị trong Word01 không bị thay đổi.
Mov AX,BX
AX nhận giá trị từ BX, Giá trị của BX không thay đổi.
Mov AX, 'A'.
Giá trị mã ASCII 041h sẽ đ•ợc di chuyển vào thanh ghi AX. Cụ
thể là vào Byte cao của AX (AH).
+ Lệnh XCHG: Đ•ợc sử dụng để tráo đổi giá trị giữa 2 thanh ghi, giữa
thanh ghi và bộ nhớ.
Cú pháp lệnh:
XCHG Destination, Source
Tráo đổi Đích đến , Nguồn
Ví dụ:
XCHG AX,BX
This document is created with the unregistered version of Document2PDF Pilot.
Đổi vị trí các giá trị của AX và BX lẫn nhau, AX sẽ l•u trữ
giá trị của BX và ng•ợc lại.
XCHG AX,Word01
Tráo đổi giá trị của AX và giá trị tại vị trí bộ nhớ Word01.
+ Điều cấm trong khi sử dụng 2 lệnh trên:
Vì các lý do về kỹ thuật, có một số các quy định mà ng•ời lập
trình phải tuân theo. Ví dụ minh hoạ:
Mov Word01,Word02 ; Không hợp lệ
Phát biểu lệnh trên là không hợp lệ, không đ•ợc phép di chuyển
dữ liệu trực tiếp từ vị trí bộ nhớ này sang vị trí bộ nhớ khác. Để có thể
làm đ•ợc việc trên ta phải thay đổi câu lệnh nh• sau:
Mov AX,Word02
Mov Word02,AX
Các kết hợp hợp lệ giữa các toán hạng trong 2 lệnh trên:
Destination Operand
Source Operand General Register Segment Register Memory Location Constant
General Reg Yes Yes Yes No
Segment Reg Yes No Yes No
Mem Location Yes Yes No No
Constant Yes No Yes No
Destination Operand
Source Operand General Register Memory Location
General Register Yes Yes
Memory Location Yes No
- Lệnh ADD, SUB, INC và DEC
+ Lệnh ADD và lệnh SUB đ•ợc sử dụng để thực hiện các phép tính
cộng, trừ giá trị giữa 2 thanh ghi, Giữa thanh ghi và bộ nhớ hoặc để cộng (trừ)
một số vào (ra) một thanh ghi hoặc bộ nhớ.
Cú pháp lệnh:
ADD Destination, Source
SUB Destination, Source
Ví dụ:
ADD Word01,AX
Cộng giá trị có trong AX vào Word01. Kết quả l•u trong Word01.
SUB AX,DX
Giá trị của thanh ghi DX sẽ bị trừ đi giá trị của thanh ghi AX, Kết
quả đ•ợc l•u trong thanh ghi AX, Giá trị của thanh ghi DX đ•ợc giữ
nguyên.
ADD BL,5
Cộng 5 vào giá trị đã có sẵn trong thanh ghi BL.
+ Quy tắc hợp lệ:
Destination Operand
Source Operand General Register Memory Location
General Register Yes Yes
Memory Location Yes No
This document is created with the unregistered version of Document2PDF Pilot.
Constant Yes Yes
Cộng hoặc trừ trực tiếp giữa 2 vị trí của bộ nhớ là không hợp lệ.
Ví dụ:
ADD Byte01,Byte02 ;Không hợp lệ
Giải pháp
Mov AL,Byte02
Add Byte01,AL
+ Lệnh INC và lệnh DEC đ•ợc sử dụng để cộng thêm 1 hoặc bớt đi 1 từ
thanh ghi hoặc tại một vị trí ô nhớ nào đó.
Cú pháp lệnh:
INC Destination
DEC Destination
Ví dụ:
Inc Word01
Cộng thêm một vào Word01.
Dec Byte01
Trừ Byte01 đi 1.
- Lệnh NEG:
Lệnh NEG đ•ợc sử dụng để thay đổi dấu của giá trị.
Cú pháp lệnh:
NEG Destination
Ví dụ:
Neg BX
Chuyển đổi giá trị của BX thành số âm.
- Tính t•ơng thích giữa các toán hạng.
Các toán hang trong một câu lệnh 2 toán hạng phải cùng một kiểu, cả
hai đều phải là kiểu Byte hoặc kiểu Word
Ví dụ:
Mov AX,Byte01
không hợp lệ.
Tuy nhiên ch•ơng trình có thể chấp nhận kiểu sau:
Mov AL, 'A' ;hoặc
Mov AX, 'A'
5- Mô tả lệnh với ngôn ngữ
Phát biểu Dịch lệnh Mô tả
B = A Mov AX,A Di chuyển A vào thanh ghi AX
Mov AX,5 Di chuyển 5 vào thanh ghi AX
Sub AX,A AX chứa giá trị 5 - A
Mov A,AX Di chuyển giá trị trên vào A
Neg A A = -A
Add A,5 A = 5 - A
Mov AX,B AX nhận giá trị B
Sub AX,A AX nhận giá trị B - A
Sub AX,A AX nhận giá trị B - 2*A
Mov A,AX Di chuyển kết quả vào A
6- Cấu trúc ch•ơng trình.
This document is created with the unregistered version of Document2PDF Pilot.
Chúng ta biết rằng, một ch•ơng trình ngôn ngữ máy tính bao gồm Mã ch•ơng
trình, dữ liệu và ngăn xếp. Mỗi một thành phần đều chiếm một phần trong một đoạn nào
đó cua bộ nhớ máy tính. Ch•ơng trình của ngôn ngữ assembly cũng đ•ợc tổ chức t•ơng
tự. Mã ch•ơng trình, dữ liệu và ngăn xếp ch•ơng trình có cấu trúc nh• một đoạn ch•ơng
trình. Mỗi một thành phần đều đ•ợc biên dịch và nạp vào từng đoạn của bộ nhớ.
- Tổ chức mô hình bộ nhớ:
Kích th•ớc của mã ch•ơng trình và dữ liệu ch•ơng trình có thể đ•ợc xác
định quan mô hình tổ chức bộ nhớ thông qua việc sử dụng từ khoá
".MODEL".
Cú pháp:
.Model Memory_model
Các cách tổ chức mô hình bộ nhớ th•ờng dùng là:
Small, Medium,Compact và Large theo nh• mô tả trong bảng sau:
Model Mô tả
Small Mã ch•ơng trình (Code) nằm trong một đoạn (Segment), Dữ liệu (Data) nằm trong
một đoạn khác
Medium Mã ch•ơng trình (Code) nằm trong nhiều đoạn, Dữ liệu (Data) nằm trong một đoạn
khác.
Compact Mã ch•ơng trình (Code) nằm trong một đoạn (Segment), Dữ liệu (Data) nằm trong
nhiều đoạn khác.
Large Mã ch•ơng trình (Code) nằm trong nhiều đoạn (Segment), Dữ liệu (Data) nằm
trong nhiều đoạn khác. Nh•ng không có mảng nào lớn hơn 64 KB.
Huge Mã ch•ơng trình (Code) nằm trong nhiều đoạn (Segment), Dữ liệu (Data) nằm
trong nhiều đoạn khác. Nh•ng có mảng có thể lớn hơn 64 KB.
- Đoạn dữ liệu (Data Segment):
Đoạn dữ liệu của ch•ơng trình chứa tất cả các khai báo biến ch•ơng
trình. Để khai báo đoạn dữ liệu trong ch•ơng trình, ta dung từ khoá ".DATA".
Ví dụ minh hoạ:
.DATA
Word01 DW 2
Word02 DW 5
MSG DB 'The First Message'
Mask EQU 10010010b
- Đoạn ngăn xếp (Stack Segment)
Mục đích của việc khai báo Stack Segment trong ch•ơng trình là để tổ
chức một khối bộ nhớ. Cú pháp khai báo nh• sau:
.STACK Size
Size là kích th•ớc của Stack tính theo Byte.
Ví dụ:
.STACK 100h
Giới hạn 100h byte cho vùng stack.
- Đoạn mã (Code Segment).
Đoạn này chứa các lệnh của ch•ơng trình (Program Instructions).
Cú pháp khai báo:
.CODE Name
Chú ý: Không cần phải khai báo tên trong Model Small.
Trong đoạn này, các lệnh có thể đ•ợc tổ chức thành các đoạn nhỏ gọi là
Procedure. Cách định nghĩa Procedure nh• sau
This document is created with the unregistered version of Document2PDF Pilot.
Name PROC ; Bắt đầu Procedure
; Mã ch•ơng trình
Name ENDP ; Kết thúc Procedure
Ví dụ về khai báo định nghĩa Code Segment
.CODE
MAIN PROC ; Bắt đầu Procedure
; Lệnh chính của Procedure
MAIN ENDP ; Kết thúc Procedure
; Procedure khác
7- Ghép nối ch•ơng trình
Ví dụ sau mô tả cách tổ chức một ch•ơng trình:
.Model Small
.Stack 100h
.Data
; Khai báo dữ liệu
.Code
Main Proc
; Các câu lệnh
Main Endp
; Các procedure khác
End Main
Dòng cuối cùng của ch•ơng trình phải có từ khoá END theo sau tên của
Procedure.
8- Viết ch•ơng trình và chạy ch•ơng trình.
- Các câu lệnh vào ra.
Ta đã biết, CPU muốn liên lạc đ•ợc với các thiết bị ngoại vi thông qua
các thanh ghi vào ra đ•ợc gọi là các cổng vào ra. Có hai lệnh IN và OUT cho
phép ta truy xuất trực tiếp các cổng. Các câu lệnh này đ•ợc sử dụng cần thiết
khi cần truy xuất các cổng một cách nhanh chóng nh• các ch•ơng trình
Game. Tuy nhiên, hầu hết các ch•ơng trình ứng dụng không sử dụng các lệnh
vào ra bởi vì các cổng vào ra khac biệt nhau giữa các hệ thống máy tính, tốt
nhất là sử dụng các ch•ơng trình con của nhà sản xuất.
Có 2 kiểu trình phục vụ các công tác vào ra, đó là BIOS và DOS.
Ch•ơng trình BIOS đ•ợc chứa trong BIOS ROM và có thể liên lạc trực tiếp với
các cổng vào ra. Các tiểu trình DOS có thể thực hiện đ•ợc rất nhiều các công
việc phức tạp ví dụ nh• in chuỗi ký tự, mặc dù các công việc đều thông qua
các tiểu trình của BIOS.
- Lệnh INT
Lệnh INT (interrupt) đ•ợc sử dụng để giải quyết các công việc liên quan
đến các tiểu trình DOS và BIOS
Cú pháp:
INT Interrupt_Number
Interrupt_Numberlà số hiệu để xác định ngắt. Ví dụ Int 16h liên quan
đến tiểu trình điều khiển bàn phím.
+ Int 21h: Đ•ợc sử dụng cho rất nhiều chức năng của DOS. Một chức
năng đặc biệt là thay đổi các số hiệu chức năng của thanh ghi AH. Các
chức năng nh• sau:
This document is created with the unregistered version of Document2PDF Pilot.
Số hiệu chức năng Tiểu trình
1 Nhập 1 phím
2 Xuất một ký tự đơn
3 Xuất chuỗi ký tự
Chức năng Int21h nhập một giá trị vào một thanh ghi nào đó và trả kết
quả ra thanh ghi khác. D•ới đây là mô tả các chức năng:
Chức năng 01
Nhập một phím
Input AH = 1
Output AL = mã ASCII nếu một phím đ•ợc nhấn
= 0 Nếu không có phím đ•ợc nhấn.
Để giải quyết vấn đề, viết các lệnh nh• sau:
Mov AH,1 ; Nhập chức năng phím
Int 21h ; Nhập mã ASCII vào AL
Bộ xử lý sẽ chờ cho đến khi ng•ời dùng nhấn một phím. Nếu một
phím đ•ợc nhấn, thanh ghi AL sẽ nhận đ•ợc mã ASCII của phím đó.
Ký tự đó sẽ hiện lên màn hình. Nếu có bất kỳ một phím nào khác đ•ợc
nhấn, ví dụ nh• các phím mũi tên, Fx hoặc t•ơng tự, thanh ghi AL sẽ
nhận giá trị 0. Các lệnh tiếp theo int21h sẽ đ•ợc thực hiện tiếp.
Chức năng 1 của int 21h không có dấu hiệu để ng•ời dùng có thể
nhập dữ liệu, vậy ta có thể sử dụng Chức năng 2 nh• sau:
Input AH =2
DH = mã ASCII hiện ký tự hoặc ký tự điều khiển
Output AL = mã ASCII hiện ký tự hoặc ký tự điều khiển
Ví dụ:
Mov AH,2
Mov DL, "?"
Int 21h
Hiện dấu ? lên màn hình và hiện dấu nhắc lệnh để chờ ng•ời dùng nhập
phím khác.
Chức năng 2 còn có thể đ•ợc sử dụng cho các chức năng điều khiển.
Nếu thanhghi DL nhận mã ASCII của các ký tự điều khiển, Int 21h sẽ
hiển thị ký tự điều khiển đó. Một số các ký tự điều khiển tiêu biểu nh•
sau:
Mã ASCII (Hex) Ký hiệu Chức năng
7 Bel Phát tiếng beep từ loa PC.
8 BS Phím lùi.
9 HT Phím Tab.
A LF Xuống hàng.
D CR Đầu dòng mới.
Trong khi xử lý, thanh ghi AL sẽ l•u giữ mã ASCII của ký tự điều khiển.
- Ch•ơng trình đầu tiên:
Một ch•ơng trình hoàn chỉnh với các chú thích để giải thích từng
câu lệnh, chú ý rằng các lời giải thích trong ch•ơng trình thật sẽ không
sử dụng đ•ợc tiếng Việt.
Tên ch•ơng trình Prg01.asm
This document is created with the unregistered version of Document2PDF Pilot.
Title Prg01: Echo Program
.Model Small
.Stack 100h
.Code
Main Proc
;Hiển thị dấu nhắc lệnh
Mov AH,2 ;Chức năng hiển thị ký tự
Mov DL,'?' ;Ký tự là dấu '?'
Int 21h ;Gọi dịch vụ 21h hiển thị ký tự
;Nhập ký tự
Mov AH,1 ;Chức năng đọc ký tự
Int 21h ;Gọi dịch vụ 21h để nhập ký tự vào AL
Mov BL,AL ;Ghi ký tự vào BL
;Xuống hàng mới
Mov AH,2 ;Chức năng hiển thị ký tự
Mov DL,0DH ;Con trỏ trở về đầu dòng
Int 21h ;Xử lý việc đ•a con trỏ về đầu dòng
Mov DL,0AH ;Xuống dòng mới
Int 21h ;Xử lý xuống dòng mới
;Hiển thị ký tự
Mov DL,BL ;Lấy ký tự l•u trong BL
Int 21h ;Hiển thị ký tự trong thanh ghi DL
;Quay trở lại nền DOS
Mov AH,4CH ;Gọi hàm thoát về DOS
Int 21h ;Thoát về DOS
Main Endp ;Kết thúc Procedure
End Main ;Kết thúc ch•ơng trình
- Tạo ch•ơng trình và chạy ch•ơng trình:
Có 4 b•ớc để tạo và chạy ch•ơng trình
a- Sử dụng một ch•ơng trình soạn thảo text để tạo ch•ơng trình nguồn.
b- Sử dụng ch•ơng trình dịch để tạo ra 1 file mã máy (Object File).
c- Sử dụng ch•ơng trình Link để liên kết các ch•ơng trình liên kết tạo ra
file chạy (Run File).
d- Chạy ch•ơng trình.
B•ớc 01: Tạo ch•ơng trình nguồn.
Sử dụng ch•ơng trình soạn thảo text để tạo một file có tên Prg01 có
nội dung nh• trên. File có đuôi là *.asm.
B•ớc 02: Dịch ch•ơng trình
Sử dụng ch•ơng trình Masm để dịch ch•ơng trình nguồn thành
một file đối t•ợng có tên là PRG01.OBJ. Câu lệnh có thể là nh• sau:
C:\>Masm PRG01;
Ch•ơng trình sẽ kiểm tra lỗi của ch•ơng trình nguồn. Nếu có lỗi,
ch•ơng trình sẽ báo lỗi cho ng•ời dùng biết. Ch•ơng trình sẽ dịch file
PRG01.ASM thành file đối t•ợng có tên là PRG01.OBJ. Nên có dấu ;
đằng sau câu lệnh.. Thông th•ờng, tên của file mới sẽ lấy mặc định là
tên file cũ với đuôi là OBJ.
File danh sách nguồn:
File sanh sách nguồn (*.LST) là một file text hiển thị các dòng
This document is created with the unregistered version of Document2PDF Pilot.
lệnh và các lệnh mã máy t•ơng đ•ơng và một số thông tin khác về
ch•ơng trình. File này rất hữu dụng cho công việc gỡ rối ch•ơng trình.
File tham khảo chéo (Cross-Reference File):
File có phần mở rộng (*.CRF) liệt kê tên hiển thị trong ch•ơng
trình, hữu dụng khi xác định các biến (Variable), các nhãn (Label) trong
một ch•ơng trình lớn.
B•ớc 03: Liên kết ch•ơng trình:
File OBJ là file chứa mã máy nh•ng không thể xử lý đ•ợc bởi vì
nó không phải là định dạng của file chạy.
Ch•ơng trình Link sẽ liên kết các file Obj thành file có thể xử lý
đ•ợc (.exe file). File dạng này có thể đ•ợc nạp vào bộ nhớ và có thể
chạy.
Cách liên kết ch•ơng trình
C:\>Link PRG01
B•ớc 04: Chạy ch•ơng trình.
Khi liên kết xong, ta sẽ có file PRG01.EXE. Ta có thể chạy file này
trực tiếp từ dấu nhắc lệnh của DOS.
- Một ch•ơng trình khác.
Ch•ơng trình này đ•ợc viết với mục đích hiển thị một chuỗi ký tự.
Để thực hiện ch•ơng trình này ta cần biết thêm một số vấn đề khác.
+ Hàm 9 của ngắt 21h Hiển thị chuỗi ký tự.
Input DX=Địa chỉ độ dời của chuỗi.
Chuỗi phải đ•ợc kết thúc bằng ký tự '$'
+ Một chuỗi có thể khởi tạo trong bộ nhớ nh• sau:
MSG DB 'Hello!$'
+ Lệnh LEA (Load Affective Address).
Cú pháp:
Lea Destination,Source
Lệnh này copy địa chỉ độ dời (Offset) vào thanh ghi công dụng
chung.
Ví dụ:
Lea DX,MSG
Nạp địa chỉ độ dời của biến MSG vào thanh ghi DX
Tuy nhiên để DOS có thể giải quyết đ•ợc các vấn đề khi ta chạy và
dịch ch•ơng trình, ch•ơng trình cần phải thêm 2 câu lệnh sau:
Mov AX,@Data
Mov DS,AX.
@Data là tên của đoạn dữ liệu đ•ợc định nghĩa bởi th• viện .DTA.
Ch•ơng trình dịch sẽ dịch tên @Data thành số hiệu đoạn (Segment). 2
lệnh trên rất cần thiết bởi vì số hiệu của Segment có thể không di chuyển
trực tiếp đến thanh ghi Segment.
Khi thanh ghi DS đ•ợc khởi tạo, ta có thể in dòng chữ "Hello!"
bằng cách đặt địa chỉ vào thanh ghi DX và gọi ngắt 21h của DOS.
Lea DX,MSG ;Lấy thông tin
Mov AH,9 ;Hàm hiện chuỗi ký tự
Int 21h ; Gọi ngắt 21h của DOS để thực
hiện.
Toàn bộ ch•ơng trình nh• sau:
Ch•ơng trình PRG02.Asm
This document is created with the unregistered version of Document2PDF Pilot.
Title PRG02 Print String Program
.Model Small
.Stack 100h
.Data
MSG DB 'Hello!$' ;Khai báo biến MSG
.Code
Main Proc
; Khởi tạo thanh ghi DS
Mov AX,@Data
Mov DS,AX ; Khởi tạo thanh ghi DS
;Hiện thông điệp
Lea DX,MSG ;Nạp thông điệp
Mov AH,9 ;Chức năng hiện chuỗi ký
tự
Int 21h ;Gọi ngắt DOS 21h
;Trở về DOS
Mov AH,4CH
Int 21h
Main Endp
End Main
Ch•ơng trình thêm: Đổi ký tự th•ờng thành ký tự in hoa.
III- Kết luận.
Chúng tôi đã giới thiệu cho các bạn một số cách sử dụng lệnh đúng cú pháp và đúng
quy tắc cũng nh• cách thức để các bạn có thể tạo đ•ợc một ch•ơng trìnhcó thể chạy độc
lập trên nền hệ điều hành. Khi viết một ch•ơng trình đầy đủ, các bạn cần chú ý một số vấn
đề nh• sau.
Một số khai báo cơ bản:
Khai báo bộ nhớ qua từ khoá Model
.Small
.Medium
.Compact
.Large
.Huge
Các kiểu dữ liệu cơ bản
DB, DW, DD, DQ, DT
Các câu lệnh cơ bản:
MOV, XCHG, ADD, SUB, INC, DEC, NEG, INT, LEA.
Cách sử dụng Ngắt 21h (Int 21h) của DOS.
Function 1: Đọc ký tự từ bàn phím
Function 2:Hiện ký tự
Function 9: Hiện chuỗi ký tự
Các b•ớc để tạo một ch•ơng trình chạy độc lập có đuôi là *.EXE
Sử dụng ch•ơng trình MASM để tạo ch•ơng trình chạy.
a- Sử dụng một ch•ơng trình soạn thảo text để tạo ch•ơng trình nguồn.
b- Sử dụng ch•ơng trình dịch để tạo ra 1 file mã máy (Object File).
This document is created with the unregistered version of Document2PDF Pilot.
c- Sử dụng ch•ơng trình Link để liên kết các ch•ơng trình liên kết tạo ra
file chạy (Run File).
d- Chạy ch•ơng trình. Gõ tên File tại dấu nhắc DOS.
Một số ch•ơng trình mẫu: PRG01.ASM, PRG02.ASM.
This document is created with the unregistered version of Document2PDF Pilot.
Chýừng 4: Trạng thái bộ xử lý và các loại cờ.
I- Giới thiệu các cờ:
Một đặc điểm đặc biệt phân biệt giữa computer và các laọi máy móc khác là khả năng
quyết định công việc. Các mạch điện trong CPU có thể thực hiện đ•ợc các quyết định đơn
giản dựa vào trạng thái hiện tại của bộ xử lý. Các trạng thái đ•ợc biểu hiện bởi các cờ trong
thanh ghi cờ của CPU.
Hình minh hoạ sau cho ta thấy cấu trúc của thanh ghi cờ (Flag Register):
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF AF PF CF
Tại các Bit 0, 2, 4, 7, 11 là các cờ trạng thái.
Tại các Bit 8,9,10 là các cờ điều khiển.
Các bảng sau sẽ mô tả các loại cờ và các đặc điểm của chúng:
Các cờ trạng thái:
Bit Tên cờ Ký hiệu Mô tả
0 Carry Flag CF Mô tả trạng thái dữ liệu đ•ợc nhớ để dành thêm vào bit
sau
2 Parity Flag PF Cờ trạng thái để kiểm tra chẵn lẻ các bits
4 Auxilary Carry Flag AF Đ•ợc sử dụng để mô tả trạng thái nhớ và trạng thái m•ợn
6 Zero Flag ZF Mô tả trạng thái dấu của chữ số +/-
11 Overflow Flag OF Mô tả trạng thái giới hạn của số.
Các cờ điều khiển:
Bit Tên cờ Ký hiệu Mô tả
8 Trap Flag TF Cờ bẫy
9 Interrupt Flag IF Cờ điều khiển ngắt
10 Direction Flag DF Cờ dẫn h•ớng
II- Mô tả trạng thái của bộ xử lý.
1- Trạng thái tràn (Overflow)
Điều cơ bản của trạng thái tràn số liên quan đến thực tế rằng giới hạn của các
số có thể hiển thị trong giới hạn của Computer.
Nh• đã giải thích ở các phần tr•ớc, giới hạn của một số nguyên có dấu có thể
biểu diễn đ•ợc bằng Word 16 bits là -32768 32767. Với số nguyên không dấu là 0
65535. Nếu kết quả tính toán v•ợt quá giới hạn trên, trạng thái tràn sẽ xảy ra và kết
quả sẽ bị cắt bớt để có thể biểu diễn đ•ợc trong thanh ghi, do đó kết quả sẽ là sai. Để
có thể hiểu rõ hơn, ta có thể tham khảo ví dụ sau:
Số có dấu hoặc không dấu là tùy thao quy định. Khi ta thực hiện một phép
tính số học, có thể là phép cộng (+), có thể có 4 tr•ờng hợp xảy ra.
+ Không tràn số.
+ Tràn số vì dấu (+/-).
+ Tràn số không dấu.
+ Tràn số cả tr•ờng hợp có dấu và không dấu.
Ví dụ sau là ví dụ tràn số không dấu. Giả định thanh ghi AX chứa giá trị
FFFFh, Thanh ghi BX chứa giá trị 0001h, Sử dụng lệnh ADD để cộng 2 giá
trị trên.
This document is created with the unregistered version of Document2PDF Pilot.
ADD AX,BX
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Kết quả đúng của phép tính trên là:
FFFFh + 0001h = 100000h 65536 (V•ợt quá giới hạn của số nguyên
dùng cho Word 16 bit). Kết quả đ•ợc l•u trong thanh ghi AX là 0000h (Số 1
là số nhớ và đ•ợc ghi trong cờ Carry). Vậy ta sẽ nhận đ•ợc kết quả sai.
Tuy nhiên kết quả sẽ là đúng trong tr•ờng hợp số có dấu. Giải thích nh• sau:
Ta có FFFFh = -1
0001h = 1
FFFFh + 0001h = 0
Vậy kết quả l•u trong AX là 0000h sẽ là đúng Tràn có dấu không xảy ra.
Một ví dụ khác về tràn số có dấu:
AX và BX cùng chứa giá trị 7FFFh.
ADD AX,BX
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0
Kết quả là FFFEh
Ta có 7FFFh = 32767
Vậy 7FFFh + 7FFFh = 32767 + 32767 = 65534. Kết quả này ngoài
giới hạn của số có dấu. Kết quả đ•ợc diễn giải theo số có dấu là FFFEh
= -2 Tình trạng tràn có dấu xảy ra.
- Cách thức bộ xử lý biểu hiện trạng thái tràn.:
Bộ xử lý sẽ thiết lập cờ OF = 1 với tràn số không dấu, CF = 1 với
tràn số có dấu. Điều này sẽ giúp ch•ơng tình hoạt động chính xác. nếu
không có hoạt dộng gí xảy ra ngay lúc đó, các câu lệnh khác phía sau sẽ
làm cho cờ tràn sẽ đ•ợc tắt OF = 0.
Để xác định trạng thái tràn số, bộ xử lý không dịch kết quả là số
có dấu hoặc không dấu. Hành động là sẽ sử dụng cả 2 cách thông dịch
cho mỗi phép toán và bật các cờ CF và OF cho trạng thái tràn số không
dấu và tràn số có dấu. Nếu Tính toán là số có dấu, chỉ có OF đ•ợc để ý
và CF sẽ bị lờ đi, Ng•ợc lại, CF sẽ đ•ợc để ý và OF sẽ bị lờ đi.
- Cách thức bộ xử lý xác định trạng thái tràn.
Có thể có nhiều lệnh làm xảy ra trạng thái tràn số nh•ng để đơn
giản vấn đề, ta chỉ giới hạn ở các lệnh cộng và trừ.
+ Tràn số không dấu: Trong phép toán cộng, Tràn số không dấu
xảy ra khi có số nhớ trên Bit MSB (Most Significant Bit). Điều đó có
nghĩa là kết quả đúng lớn hơn số không có dấu. ví dụ nh• FFFFh cho 1
Word và FFh cho 1 Byte. Trong phép trừ, Tràn số không dấu xảy ra khi
phải m•ợn thêm một số hạng từ MSB và kết quả sẽ phải nhỏ hơn 0.
+ Tràn số có dấu:
Phép cộng các số cùng dấu, trạng thái tràn số xảy ra khi kết
quả có dấu khác. Điều này xảy ra nh• trong ví dụ cộng hai số
7FFFh là hai số d•ơng và đ•ợc kết quả là số âm FFFEh.
Phép trừ các số khác dấu cũng giống nh• phép cộng các số
cùng dấu. Ví dụ A - ( - B) = A + B và -A-(+B) = (-A) + (- B).
Tràn số có dấu xảy ra nếu kết quả có dấu khác với mong muốn.
This document is created with the unregistered version of Document2PDF Pilot.
Trong phép cộng với các số khác dấu, hiện t•ợng tràn số
không xảy ra vì kết quả bao giờ cũng nhỏ hơn. t•ơng tự nh• với
phép trừ hai số cùng dấu.
2- Cách thức ảnh h•ởng của các lệnh đến các cờ
Mỗi khi bộ xử lý thực thi các lệnh, các cờ đ•ợc thiết lập để phản ánh kết quả.
Tuy nhiên, một vài lệnh không có chút ảnh h•ởng nào tới các cờ, chỉ ảnh h•ởng đến
một số cờ hoặc để mặc chúng. Bởi vì các câu lệnh nhảy dựa vào cách thức thiết lập
cờ. Điều này rất quan trọng để có thể xác định mỗi lệnh làm việc với cờ. Quay lại
một số lệnh cơ bản, chúng có thể ảnh h•ởng đến các cờ theo bảng sau:
Lệnh Các cờ có ảnh h•ởng
MOV, XCHG Không có cờ nào
ADD, SUB Tất cả các cờ
INC, DEC Tất cả các cờ ngoại trừ CF
NEG Tất cả các cờ (CF = 1 ngoại trừ kết quả là 0. OF = 1 nếu Word là 8000h hoặc
Byte là 80h)
Chúng ta nghiên cứu một ví dụ để rõ hơn các ảnh h•ởng này:
AX chứa FFFFh, BX chứa FFFFh
Lệnh ADD AX,BX
FFFFh
FFFFh
1FFFEh
Kết quả l•u trong AX là FFFEh = 1111 1111 1111 1110
SF = 1 Vì MSB là 1.
PF = 0 Vì có 7 bit trong Byte thấp của kết quả.
ZF = 0 Kết quả khác 0.
CF = 1 Vì có một số nhớ ngoài MSB tron phép cộng.
OF = 0 dấu của kết quả cùng dấu với số sẽ đ•ơc cộng thêm
3- Các lệnh điều khiển hoạt động.
Để có khái niệm về các lệnh nhảy, khảo sát ch•ơng trình minh hoạ sau:
1 Title PRG03: Display Character
2 .Model Small
3 .Stack 100h
4 .Code
5 Main Proc
6 Mov AH,2 ; Chức năng hiện ký tự
7 Mov CX,256 ;Số ký tự sẽ hiển thị
8 Mov DL,0 ; DL chứa mã ASCII rỗng (Null)
9 Prn_Loop ; Nhãn dành cho lệnh nhảy
10 Int 21h ; Hiện ký tự
11 Inc DL ;Lấy ký tự tiếp theo
12 Dec CX ;Giảm vòng đếm (Counter)
13 Jnz Prn_loop ;Tiếp tục xử lý từ nhãn cho tới khi nào
CX=0
14 ;Thoát ra nền DOS
15 Mov AH,4CH
16 Int 21h
17 Main Endp
This document is created with the unregistered version of Document2PDF Pilot.
18 End Main
Có 256 ký tự trong bộ ký tự IBM, mã từ 32 127 là các mã chuẩn ASCII
có thể hiển thị. Các má còn lại đ•ợc hiển thị d•ới dạng đồ hoạ (??????…).
Để hiển thị các ký tự, ta sử dụng một vòng lặp (Dòng 9 dòng 13).
Tr•ớc khi bắt đầu vòng lặp, thanh ghi AH đ•ợc khởi tạo là 2 (chức năng hiển
thị một ký tự đơn của Ngắt 21h) và thanh ghi DL thiết lập giá trị 0 (mã ASCII
đầu tiên). Thanh ghi CX đ•ợc sử dụng để làm bộ đếm vòng lặp. Nó đ•ợc khởi
tạo là 256 tr•ớc khi vào vòng lặp và sẽ giảm dần khi mỗi ký tự đã đ•ợc hiển
thị.
Câu lệnh điều khiển vòng lặp ở đây là câu lệnh JNZ (Jump If Not Zero).
Nếu giá trị của CX sau khi bị giảm đi (DEC) ch•a là 0 thì lệnh JNZ sẽ chuyển
điều khiển đến nhãn Prn_Loop. Nếu CX = 0 ch•ơng trình sẽ xử lý tiếp các
lệnh còn lại từ 14 trở đi.
4- Các lệnh nhảy có điều kiện.
Ta có lệnh JNZ là một lệnh nhảy có điều kiện.
Cú pháp của các lệnh nhảy có điều kiện nh• sau:
Jxxx Destination_label
Jxxx là một số lệnh nhảy bắt đầu bằng "J".
Destination_Label Là nhãn mà lệnh cần điều khiển. Nếu điều kiện để nhảy là
True (Đúng), Lệnh tiếp theo cần đ•ợc thực hiện là nhãn đã đ•ợc khai báo.
Ng•ợc lại lệnh kế tiếp của lệnh nhảy sẽ đ•ợc thực hiện.
- Cách thức CPU thực hiện lệnh nhảy có điều kiện:
Để thực hiện lệnh nhảy, CPU tìm trong thanh ghi cờ. Nếu điều kiện của
lệnh nhảy là đúng, CPU sẽ điều chỉnh thanh ghi con trỏ lệnh (IP) trỏ đến nhãn
lệnh. Nếu điều kiện của lệnh nhảy là sai (False), CPU sẽ không điều chỉnh
thanh ghi IP và dòng lệnh kế tiếp sẽ đ•ợc thực thi.
5- So sánh với các ngôn ngữ lập trình bậc cao
Ta đẫ biết, các câu lệnh Jump có thể đ•ợc sử dụng để thực hiện lệnh phân
nhánh và lệnh lặp. Tuy nhiên chúng t•ơng đối phức tạp nhất là đối với những ng•ời
dùng mới trong việc viết mã lệnh.
Ta có thể so sánh với một số cấu trúc của ngôn ngữ bậc cao hơn để có thể hiểu
rõ về cách thực thi chúng.
a- Cấu trúc phân nhánh:
- If - Then
Cấu trúc If - Then có thể đ•ợc mô tả nh• sau:
If điều kiện đúng
Then xử lý câu lệnh đúng theo điều kiện
EndIf
Điều kiện là một phát biểu có thể đúng hoặc sai. Trong tr•ờng hợp đúng, Câu
lệnh bên trong sẽ đ•ợc thực thi. Ng•ợc lại, câu lện bên trong sẽ không đ•ợc thực
hiện.
Ví dụ:
Đặt vào thanh ghi AX một số, mô tả nh• sau:
If AX < 0
Then thay thế AX bằng - AX
EndIf
Mã nh• sau
;If AX < 0
This document is created with the unregistered version of Document2PDF Pilot.
Cmp AX,0 ;So sanh AX va 0?
JNL EndIf ;Khong, thoat
;Then
Neg AX ; Dung, thay doi dau
End_If
Điều kiện AX<0 đ•ợc kiểm tra bởi lệnh CMP AX,0 Dùng lệnh nhảy JNL
(jump If Not Less) để nhảy đến nhãn End_If nếu AX không nhỏ hơn không.
- If - Then - Else
If điều kiện đúng
Then xử lý câu lệnh theo điều kiện đúng
Else
Then xử lý câu lệnh theo điều kiện sai
EndIf
Ví dụ:
Thanh ghi AL và BL chứa mã ASCII hai ký tự nhau, hiển thị ký tự có số
mã nhỏ hơn.
If AL <= BL
Then Hiển thị ký tự trong AL
Else
Hiển thị ký tự trong BL
EndIf
Mã lệnh có thể nh• sau
Mov AH,2 ; Chuẩn bị hiển thị
; if AL <= BL
Cmp AL,BL ; AL <= BL
JNBE Else_ ; Khong, hien thi BL
;then
Mov DL,AL ;Chuyen ky tu de hien thi
JMP Display ; Nhay den Display
Else_:
Mov DL,BL ;Chan bi de hien thi BL
Display:
Int 21h ;Hien thi
- Case:
Case Phatbieu
Giatri1: Lenh1
Giatri2: Lenh2
GiatriN: LenhN
End_case
Trong cấu trúc này, Phatbieu đ•ợc kiểm tra Nếu giá trị là thành viên của
giatri1, lenh1 đ•ợc thực hiện…
Ví dụ:
AX chứa 1 số âm, nạp -1 vào BX, Nếu AX chứa 0, nạp 0 vào BX, Nếu
AX chứa số d•ơng, Nạp 1 vào BX
Case AX
<0 Nạp -1 vào BX
=0 Nạp 0 vào BX
>0 Nạp 1 vào BX
This document is created with the unregistered version of Document2PDF Pilot.
End_Case
Mã ch•ơng trình nh• sau:
;Case AX
CMP AX,0 ;Kiem tra AX
JL So_am ;AX<0
JE Bang_0 ;AX=0
JG So_duong ;AX>0
So_am:
Mov BX,-1
JMP End_case
Bang_0:
Mov BX,0
JMP End_case
So_duong:
Mov BX,1
End_case
- And
Điều kiện và đ•ợc coi là đúng nếu cả hai thành phần so sánh đều đúng
Ví dụ:
Đọc ký tự, hiển thị khi chúng là Ký tự in hoa:
Đọc ký tự vào thanh ghi AL
If ('A' <= Kytu) And (Kytu<= 'Z')
Then Hien ky tu
Endif
Mã ch•ơng trình nh• sau:
; Doc Ky tu
Mov AH,1 ; Chuan bi doc ky tu
Int 21h ; Doc ky tu vao AL
; If ('A' <= Kytu) And (Kytu<= 'Z')
Cmp AL,'A' ; Ky tu >= A
JNGE End_if ; Khong, thoat
Cmp AL,'Z' ; Ky tu <= Z
JNLE End_if ; Khong, thoat
; Hien thi ky tu
Mov DL,AL ; Nhap ky tu
Mov AH,2 ; Chuan bi hien thi
Int 21h ; Hien thi
End_if
- OR
Câu lệnh Or đúng khi một trong hai diều kiện thành phàn đúng, sai khi cả hai
diều kiện thành phần sai.
Ví dụ:
Đọc ký tự. Nếu là 'y' hoặc 'Y' thì hiện chúng, nếu không phải thì thoát khỏi
chuong trình.
Đọc ký tự vào AL
If (Kytu= 'y') OR (Kytu= 'Y')
Then hiển thị
Else
Ng•ng ch•ơng trình
This document is created with the unregistered version of Document2PDF Pilot.
End_if
Mã ch•ơng trình
; Doc ky tu
Mov AH,1 ; Chuan bi doc
Int 21h ; Ky tu trong AL
;If (Kytu= 'y') OR (Kytu= 'Y')
Cmp AL, 'y' ; Ky tu la y?
JE Then ; Dung, hien thi y
Cmp AL, 'Y' ; Ky tu la Y
JE Then ; Dung, hien thi Y
Jmp Else_
Then:
Mov AH,2 ; Chuan bi hien thi
Mov DL,AH ; Nhan ky tu
Int 21h ; Hien thi
JMP End_if ; Thoat
Else_:
Mov AH,4Ch
Int 21h ; Thoat ra DOS
End_if
6- Các lệnh lặp.
Các câu lệnh lặp mô tả các lệnh có thể đ•ợc thực thi nhiều lần tuỳ thuộc vào
điều kiện để kết thúc vòng lặp.
Lệnh lặp FOR
Mô tả
For Điều kiện lặp Do
Các câu lệnh
End_for
Lệnh Loop có thể đ•ợc sử dụng cho lệnh lặp
Loop Nhãn
Số đếm cho lệnh lặp đ•ợc đặt trong thanh ghi CX, Các xử lý của lệnh Loop sẽ
làm cho giá trị trong thanh ghi CX giảm một cách tự động cho đến khi giá trị này
bằng 0.
Sử dụng lệnh Loop, câu lệnh lặp For đ•ợc phat biểu nh• sau:
;Khởi tạo thanh ghi CX
Top:
Các Lệnh
Loop Top
Ví dụ:
Hiển thị một hàng 80 hình sao *.
Mô tả:
For 80lan Do
Hienthi '*'
End_for
Mã ch•ơng trình
Mov CX,80 ; So l•ơng dau *
Mov AH,2 ;Chuc năng hien thi
Mov DL,'*' ; Ky tu se hien thi
This document is created with the unregistered version of Document2PDF Pilot.
Top:
Int 21h ; Hien thi *
Loop Top
Bạn phải chú ý đến điều này. Khi sử dụng lệnh Loop, it nhât một lần lệnh lặp
đ•ợc thực hiện. Thực sự nếu CX chứa 0 khi lệnh Loop có hiệu lực, lệnh Loop sẽ làm
cho thanh ghi CX giảm tới FFFFh, và lệnh Loop lại tiếp tục xử lý FFFFh = 65535.
Để tránh điều này, lệnh JCXZ (Jump if CX=0) có thể đ•ợc sử dụng
Cú pháp lệnh nh• sau:
JCXZ Nhãn
Ta có thể phát biểu lệnh nh• sau:
………………………..
JCXZ Skip
Top:
Lệnh
Loop Top
Skip:
- While.
Lệnh Loop tuỳ thuộc vào điều kiện
Phát biểu
While dieukien Do
Các câu lệnh
End_while
Ví dụ:
Viết một vài mã lệnh để đếm số ký tự trong một hàng
Mô tả:
Khởi tạo vòng đếm Count
Đọc ký tự
While Kytu Enter do
Count=Count+1
Doc ky tu
End_while
Mã ch•ơng trình
Mov DX,0 ; Khoi tao DX=0
Mov AH,1 ; Doc ky tu
Int 21h ; Ky tu trong AL
While_:
Cmp AL,0Dh ; Enter?
JE End_while ; Dung, thoat
Inc DX ; Tang DX
Int 21h ; Doc ky tu
Jmp While_
- Repeat.
Mô tả:
Repeat
Các lệnh
Until Điều kiện
Ví dụ:
Đọc các ký tự cho tới khi gặp khoảng trắng:
Mô tả:
This document is created with the unregistered version of Document2PDF Pilot.
Repeat
Doc ky tu
Until Ky tu la khoang trang
Mã ch•ơng trình:
Mov AX,1 ; Chuan bi doc
Repeat:
Int 21h ;Ky tu trong AL
; Until
Cmp AL, ; AL = Space
JNE Repeat
This document is created with the unregistered version of Document2PDF Pilot.
Chýừng 5: Các lệnh Logic.
I- Giới thiệu
Khả năng thao tác với từng bit dữ liệu là một lợi thể của ngôn ngữ Assembly. Chúng
ta có thể thay đổi từng bit đọc lập bằng cách sử dụng các lệnh logic. Giá trị nhị phân la 0 và
1 t•ơng ứng với các diều kiện Đúng (True) hoặc Sai (False)
Ví dụ minh hoạ các lệnh Logic.
1 0 1 0 1 0 1 0
And
1 1 1 1 0 0 0 0
= 1 0 1 0 0 0 0 0
1 0 1 0 1 0 1 0
OR
1 1 1 1 0 0 0 0
= 1 1 1 1 1 0 1 0
1 0 1 0 1 0 1 0
Xor
1 1 1 1 0 0 0 0
= 0 1 0 1 1 0 1 0
1 0 1 0 1 0 1 0
Not
= 0 1 0 1 0 1 0 1
II- Các lệnh Logic cơ bản.
1- Lệnh And, Or, Xor, Not:
Các lệnh này thực hiện các thao tác theo tên Logic của chúng.
Cú pháp lệnh:
AND Dich, Nguon
OR Dich, Nguon
XOR Dich, Nguon
Kết quả đ•ợc l•u trong Dich. Dich phai la thanh ghi hoặc ô nhớ. Nguon có thể
là Thanh ghi, Bộ nhớ hoặc hằng số. Tuy nhiên việc di chuyển giữa ô nhớ và ô nhớ là
không đ•ợc.
- ảnh h•ởng đến Các cờ:
SF, ZF, PF Phản ánh kết quả
AF Không xác định
CF, OF Giá trị 0.
Một chức năng của các lệnh And, Or, Xor là có thể làm thay đổi từng bit
của Dich. Để làm điều đó, ta phải xây dựng chức năng bit nguồn nh• là một mặt nạ
(Mask). Các bit Mask đ•ợc chọn để xác định các bit tại Diak đ•ợc thay đổi đúng vị
This document is created with the unregistered version of Document2PDF Pilot.
trí khi lệnh đ•ợc xử lý.
Để chọn Bit Mask, ta phải chọn các đặc tính của And, Or hoặc Xor.
b And 1 = b b or 0 = b b Xor 0 = b
b And 0 = 0 b or 1 = 1 b Xor 1 = ~b (Bù 2 của b)
Từ đó ta có:
+ Lệnh And cho phép ta xoá các bit của DichNh•ng có thể để nguyên một số
bit khác. Mask bit bằng 0 xoá bit tại vị trí t•ơng tự , Mask bit bằng 1 sẽ để nguyên
các bit tại vị trí t•ơng tự.
+ Lệnh OR sử dụng để thiết lập các bit đích và giữ nguyên các bit còn lại.
Mask bit là 1 làm thay đổi bit đích, Mask bit bằng 0 giữ nguyên các bit đích tại vị trí
t•ơng ứng.
+ Lệnh XOR cho phép ta lập mã bù 2 dối với các bit đích và để nguyên
các bit khác. Mask bit bằng 0 sẽ giữ nguyên các bit đích tại vị trí t•ơng ứng.
Ví dụ:
+ Xoá bít dấu của thanh ghi AL, giữ nguyên các Bit khác
Sử dụng lệnh AND với 01111111=7Fh là Mask
And AL,7Fh
+ Thay đổi bit dầu tiên và cuối cùng của thanh ghi AL
Sử dụng lệnh OR với 10000001=81h là Mask
Or AL,81h
+ Thay đổi bit dấu của DX
Sử dụng lệnh XOR với 8000h là Mask
XOR DX,8000h
Để tránh gõ sai, nên đổi từ nhị phân sang Hex nhất là các Mask 16 bits.
- Chuyển đổi ký tự ASCII thành số:
Chúng ta biết rằng khi ch•ơng trình đọc ký tự từ bàn phím, AL sẽ nhận ký tự
mã ASCII.ví dụ, khi ta nhấn phím số 5, AL sẽ nhận mã 35h chứ không phải số 5. Để
nhận số 5 trong AL, ta phải làm nh• sau
Sub AL,30h
Một cách khác ta sử dụng lệnh And để xoá bỏ 4 bit cao của AL.
And AL,0Fh
Lý do là Mã của 0 tới 9 là 30 39h, ph•ơng pháp này chuyển đổi các mã ký tự ASCII
sang giá trị số.
Bằng cách sử dụng lệnh And thay cho lênh Sub, chúng ta nhấn mạnh việc thay
đổi đặc điểm bit của AL và điều đó giúp cho ch•ơng trình dễ đọc hơn.
- Chuyển ký tự th•ờng thành ký tự in hoa:
Mã ASCII của 'a' 'z' là 61h 7Ah, 'A' 'Z' là 41h 5Ah. Nếu DL chứa mã ký tự
th•ờng, ta có thể đổi chúng thành ký tự in hoa nh• sau.
Sub DL,20h
Tuy nhiên, nếu ta so sánh mã nhị phân của các ký tự t•ơng ứng giữa chữ
th•ờng và chữ in ta sẽ có
Ký tự Mã Ký tự mã
A 01100001 a 01000001
B 01100010 b 01000010
Z 01111010 Z 01011010
So sánh trên cho ta thấy, khi chuyển đổi kiểu ký tự ta chỉ cần xoá bit số 5.
Việc chuyển đổi rất dễ dàng khi ta sử dụng lệnh Andvới Mask là 11011111b=0DFh.
This document is created with the unregistered version of Document2PDF Pilot.
Ta có
And DL,0DFh
- Xoá thanh ghi
Ta đã biết có hai cách để xoá thanh ghi nh• sau
Thanh ghi AX
Mov AX,0 (1)hoặc
Sub AX,AX (2)
Theo lệnh XOR 1 Xor 1=0 và 0 Xor 0=0 vậy ta có cách thứ 3
Xor AX,AX (3)
Mã máy của ph•ơng pháp 1 là 3 byte, ph•ơng pháp 2 và 3 là 2 Byte, vậy để
xoá giá trị một thanh ghi ta nên sử dụng ph•ơng pháp 2 hoặc 3. Tuy nhiên để xoá
bộ nhớ, ta phải sử dụng ph•ơng pháp 1.
2- Lệnh Not
Lệnh not thực hiện thao tác mã bù đối với đích. định dạng nh• sau
Not Dich
Lệnh không ảnh h•ởng đến các thanh ghi trạng thái.
Ví dụ:
Not AX
3- Lệnh Test:
Lệnh Test sử dụng phép toán And đối với đích và nguồn nh•ng không làm
thay đổi giá trị của đích. Mục đích của lênh Test là thiết lập trạng thái cho các cờ:
Cú pháp:
Test Dich, nguon
ảnh h•ởng đến các cờ trạng thái:
SF, ZF, PF Phản ánh kết quả
AF Không đinh nghĩa
CF, OF Giá trị 0
Kiểm tra các bits
Lệnh Test có thể đ•ợc sử dụng để kiểm tra từng bit trong một toán hạng.
Mask phải chứa 1 tại vị trí cần kiểm tra. Lý do 1 And b=b và 0 and b=0
Test Dich, Mask
Ví dụ:
Nhảy tới nhãn Below nếu AL chứa số chẵn
Byte chứa số chẵn nếu bit 0 có giá trị 0 Mask 00000001b=1
Test AL,1 ;AL Chẵn?
JZ Below ; Dung, nhay den Below.
This document is created with the unregistered version of Document2PDF Pilot.
Chýừng 6: Các lệnh dịch chuyển và quay.
I- Giới thiệu
Các lệnh dịch chuyển (Shift) và quay (Rotate)sẽ dịch chuyển đích 1 hoặc nhiều vị trí
sang trái hoặc phải tuỳ thuộc lệnh. Với các lệnh Shift, bit cuối cùng sẽ bị mất. Với các lệnh
Rotate, bit cuối cùng sẽ dịch chuyển sang đầu bên kia.
Các lệnh này cho phép ta thực hiện các phép toán nhân, chia hoặc bình ph•ơng một
giá trị. Và chúng ta có thể sử dụng chúng để tiến hành các thao tác vào ra số nhị phân hoặc
Hexa.
II- Các lệnh cơ bản.
1- Các lệnh dịch (Shift).
a- SHL (Shift Left "" Dịch sang trái)
Lệnh cho phép ta dịch một hoặc nhiều bit sang bên trái
Cú pháp:
SHL Dich,1
Giá trị 0 sẽ đ•ợc gán vào bit 0, giá trị tạo bit cao nhất của Dich sẽ đ•ợc
l•u trong cờ CF. Nếu muốn dịch nhiều bit, ta đ•a giá trị số lần dịch chuyển
vào CL
SHL Dich,CL
ảnh h•ởng đến cờ
SF, PF, ZF Phản ánh kết quả
AF Không định nghĩa.
CF Bit cuối cùng bị đẩy ra
OF 1 là kết quả thay đổi dấu của bit cuối cùng
Ví dụ:
DH chứa giá trị 8Dh, CL chứa giá trị 3 . Vậy giá trị của DH và CF
là bao nhiêu khi ta sử dụng câu lệnh
SHL DH,CL
Trả lời:
Giá trị tính theo nhị phân của DH là 10001010b Sau khi dịch trái 3 lần,
giá trị của DH sẽ là 01010000b=50h và giá trị của CF sẽ là 0.
b- Nhân bằng lệnh SHL
Giả sử ta có số 235 nếu ta dịch trái 1 lần (Thêm 0 vào số trên vào bên
phải) ta sẽ đ•ợc 2350 = 235 x 10
Cũng t•ơng tự nh• vậy, Dịch trái số nhị phân giống nh• nhân cho 2. Ví
dụ: AL chứa số 5=00000101b dịch trái ta sẽ có 00001010=10, dịch trái tiếp ta
có 00010100=20
c- SHL (Shift Right "Dịch sang phải"):
T•ng tự nh• lệnh dich trái, lệnh dich phải cũng có các thao tác t•ơng tự,
Sự khác nhau là chiều dịch của các bit.
2- Các lệnh quay (Rotate).
a- ROL(Rotate left "Quay trái")
Lệnh thao tác dịch bit sang trái. Bit đầu tiên sẽ mang giá trị bit cuối
cùng, CF sẽ chứa giá trị của bit đ•ợc đẩy ra.
Cú pháp lệnh:
ROL Dich,1 Và
This document is created with the unregistered version of Document2PDF Pilot.
ROL Dich,CL
b- ROR(Rotate Right "Quay phải")
T•ơng tự nh• lệnh quay trái, chỉ có điều các bit dịch chuyển qua bên
phải, bit cuối cùng sẽ mang giá trị của bit đầu tiên. Cờ CF sẽ mang giá trị của
bit bị đẩy ra.
Cú pháp lệnh
ROR Dich,1 Và
ROR Dich,CL
Trong các lệnh ROL và ROR, CF phản ánh bit bin đẩy ra, Khảo sát ví dụ sau
đây:
Ví dụ:
Sử dụng lệnh ROL để đếm số l•ợng bit mang giá trị 1 cua rthanh ghi
BX mà không thay đổi giá trị thah ghi BX. Giải đáp nằm trong thah ghi AX.
Xor AX, AX ; AX về 0
Mov CX,16 ; Bộ đếm lặp
Top:
ROL BX,1 ; CF= bit bị đẩy ra
JNC Next ; 0 Bit
INC AX ; 1 bit, tăng số l•ợng
Next:
Loop Top ; Lặp cho tới khi kết thúc.
Trong ví dụ này ta sử dụng JNC (Jump If No Carry) sẽ thực thi khi CF=0.
c- RCL
Lệnh RCL dịch chuyển các bit của Dich sang trái, Bit cao nhất chuyển
vào cờ CF và giá trị trong CL sẽ đ•ợc chuyển vào bit thấp nhất. Cũng giống
lệnh ROL nh•ng CF là một thành phần.
Cú pháp:
RCL Dich,1 và
RCL Dich,CL
d- RCR
Giống lênh RCL nh•ng bit dịch chuyển sang bên phải.
Cú pháp:
RCR Dich,1
RCL Dich,CL
This document is created with the unregistered version of Document2PDF Pilot.
Chýừng 7: Các chế độ làm việc với mảng và đánh địa chỉ
I- Giới thiệu
Trong nhiều ứng dụng, việc nhóm các giá trị thành từng tập hợp là rất cần thiết. Ví dụ
chúng ta cần phải đọc một tâph hợp các kết quả và tính toán ra giá trị trung bình của
chúng, để làm việc này ta th•ờng phải l•u giữ các kết quả thành một dãy đ•ợc sắp xếp theo
giá trị tăng dần. Trong các ngôn ngữ lập trình, có một cấu trúc dữ liệu đ•ợc gọi là mảng.
Ta có các loại mảng một chiều, mảng hai chiều và mảng đa chiều. Sau đây ta sẽ lần l•ợt
khảo sát các loại mảng trên để có thể hiểu đ•ợc cách tổ chức nhóm giá trị trong bộ nhớ và
cách thức sử dụng ngôn ngữ lập trình để thao tác với chúng
II- Các lệnh ứng dụng.
1- Mảng 1 chiều (1 Dimensional Array).
Mảng 1 chiều là một danh sách các thành phần đ•ợc sắp xếp theo thứ tự, tất cả
các thành phần đều có cùng một kiểu dữ liệu. Nếu A là một mảng, các thành phần
th•ờng đ•ợc mô tả là A[1], A[2], A[3], A[4]…Ví dụ về khai báo một mảng
MSG DB 'abcde'
Địa chỉ của biến mảng đ•ợc gọi là địa chỉ cơ sở của mảng. Nếu địa chỉ độ dời
(Offset) đ•ợc gán cho là W (Word) là 0200h, trong bộ nhớ, mảng đ•ợc sắp xếp nh•
sau:
Địa chỉ Offset Ký hiệu địa chỉ Giá trị thập phân
0200h W 10
0202h W+2h 20
0204h W+4h 30
0206h W+6h 40
0208h W+8h 50
020Ah W+2A 60
2- Toán hạng DUP
Chúng ta có thể định nghĩa nhiều mảng má các thành phần chia sẻ giá trị khởi
tạo bằng cách sử dụng toán hạng DUP (Duplicator). Định dạng của chúng nh• sau
Repeat_Count DUP(Value)
Ví dụ:
Gamma DW 100 DUP(0)
Tổ chức một mảng gồm 100 Words, Mởi tạo bằng 0, t•ơng tự
Delta DB 212 DUP(?)
Tổ chức một mảng 212 Words, không có giá trị khởi tạo.
3- Chế độ đánh địa chỉ
Cách thức một toán hạng đ•ợc xác định là nhờ vào chế độ đánh địa chỉ
(Addressing Modes). Chế độ đánh địa chỉ mà chúng ta khảo sát từ tr•ớc tới giờ là
+ Chế độ thanh ghi (Các toán hạng là thanh ghi)
+ Chế độ tức thì (Các toán hạng là hằng số)
+ Chế độ Trực tiếp (Các toán hạng là biến)
Ví dụ:
Mov AX,0 (Thanh ghi, hằng số)
Add Alpha,AX (Biến, thanh ghi).
Có 4 chế độ đánh địa chỉ trong hệ thống 8086:
1- Thanh ghi gián tiếp (Register Indirect)
This document is created with the unregistered version of Document2PDF Pilot.
2- Cơ sở (Based)
3- Index
4- Base Index
Các chế độ trên đ•ợc sử dụng để đánh địa chỉ bộ nhớ một cách gián tiếp.
4- Chế độ dùng thanh ghi gián tiếp
Trong chế độ này, địa chỉ độ dời của toán hạng đ•ợc chứa trong thanh ghi. Ta
có thể nói các thanh ghi hành động nh• một con trỏ trỏ đến bộ nhớ. Định dạng nh•
sau:
[Thanh ghi]
Các thanh ghi BX, SI, DI hoặc BP. Với thanh ghi BX, SI, DI, số hiệu đoạn
(Segment number) của toán hạng đ•ợc chứa trong DS. Với BP, SS , trực tiếp chứa số
hiệu đoạn.
Ví dụ:
SI chứa 0100hvà Word tại 0100h chứa giá trị 1234h:
Mov AX,[SI]
+ CPU sẽ kiểm tra SI và lấy địa chỉ Offset 100h,
+ Sử dụng địa chỉ DS:0100h để lấy giá trị 1234h
+ Chuyển giá trị 1234h sang thanh ghi AX
So sánh với:
Mov AX,SI
+ Đơn thuần là chuyển giá trị địa chỉ 0100h từ SI vào AX
5- Chế độ cơ sở và chế độ chỉ số địa chỉ.
Trong các chế độ này, địa chỉ Offset của toán hạng đ•ợc tìm thấy bằng cách
thêm vào một số đ•ợc gọi là Displacement đến nội dung của thanh ghi. Displacement
có thể là::
+ địa chỉ Offset của biến
+ Hằng số (D•ơng hoặc âm)
+ địa chỉ Offset của biến trừ đi hoặc cộng thêm một hằng số.
Nếu A là biến, ta có:
A (địa chỉ Offset của biến)
-2 (Hằng số)
A + 4 (Địac chỉ Offset của biến cộng với hằng số)
Cú pháp của toán hạng:
[Thanh ghi + Displacement]
[Displacement + Thanh ghi]
[Thanh ghi] + Displacement
Displacement + [Thanh ghi]
Displacement[Thanh ghi]
Các thanh ghi phải là BX, BP, SI hoặc DI. Trong tr•ơng fhợp các thanh ghi
BX, SI hoặc DI đ•ợc sử dụng, DS chứa số hiệu segment của địa chỉ toán hạng. Nếu
sử dụng BP, SS chứa số hiệu Segment. Chế độ đánh địa chỉ đ•ợc gọi là cơ sở (Based)
nếu BX hoặc BP đ•ợc sử dụng, Chỉ số (Index) nếu SI hoặc DI đ•ợc sử dụng.
Ví dụ:
W là mảng Word, BX chứa 4.
Mov AX,W[BX]
Displacement là địa chỉ Offset của biến W. Câu lệnh chuyển thành phần
tại địa chỉ W + 4 vào thanh ghi AX. Đây là thanh phần thứ 3 của mảng. Câu
This document is created with the unregistered version of Document2PDF Pilot.
lệnh trên có thể đ•ợc viết theo các định dạng khác nh• sau:
Mov AX,[W+BX]
Mov AX,[BX+W]
Mov AX,W+[BX]
Mov AX,[BX] - W
Một ví dụ khác:
SI chứa địa chỉ mảng W.
Mov AX,[SI + 2]
Displacement là 2. Câu lệnh di chuyển nội dung của W+2 là thành phần
thứ 2 của mảng vào AX. Câu lệnh có thể đ•ợc viết theo các định dạng sau:
Mov AX,[2+SI]
Mov AX,2+[SI]
Mov AX,2[SI]
Mov AX,[SI]+2
6- Chế độ đánh địa chỉ cơ sở chỉ số.
Trong chế đọ này, địa chỉ Offset của toán hạng là tổng của:
+ Nội dung thanh ghi BX, BP.
+ Nội dung thanh ghi SI, DI.
+ Địa chỉ Offset của biến
+ Hằng số (âm hoặc d•ơng).
Nếu BX đ•ợc sử dụng, DS chứa số hiệu Segment của địa chỉ toán hạng. Nếu
BP đ•ợc sử dụng, SS chứa số hiệu Segment. Toán hạng có thể đ•ợc biểu diễn theo
nhiều dạng nh• sau:
+ Vatiable[Base_register][Index_register]
+ [Base_register + Index_register + Variable + Constant]
+ Variable[Base_register+Index_register+Constant]
+ Constant[Base_register+Index_register+Variable]
Thứ tự trong dấu [] có thể thay đổi.
This document is created with the unregistered version of Document2PDF Pilot.
Chýừng 8: Ngắt BIOS
I- Giới thiệu
Trong các phần tr•ớc, chúng ta đã đề cập đến việc sử dụng lệnh Int để gọi các tiểu
trình. Trong ch•ơng này, chúng ta đi vào nghiên cứu nhiều loại ngắt khác nhau để tiếp cận
tốt hơn vói câu lệnh Int.
1- Dịch vụ ngắt
a- Ngắt cứng (hardware Interrupts)
Ngắt cứng cho phép thiết bị ng•ng các thao tác của CPU. Ví dụ nh• Khi
bàn phím đ•ợc bấm, CPU nhận đ•ợc tín hiệu đọc mã phím vào bộ đệm bàn
phím.
+ Một thiết bị phần cứng cần dịch vụ để gửi tín hiệu yêu cầu ngắt
(Interrupt Request) tới bộ xử lý.
+ CPU ng•ng công việc đang thực hiện, xử lý yêu cầu và chuyển điều
khiển cho tiểu trình ngắt (Interrupt Routine).
+ Dịch vụ ngắt phục vụ thiết bị phần cứng bằng cách thực hiện một số
thao tác vào ra.
+ Điều khiển đ•ợc trả về tác vụ gốc tại thời điểm nó bị ngắt (CPU xử lý
tiếp ch•ơng trình bị ng•ng lúc đầu).
Tín hiệu ngắt có thể đến bất cứ thời điểm nào, CPU kiểm tra tín hiệu yêu
cầu ngắt ngay khi xử lý xong một lệnh. Trong quá trình kiểm tra phát hiện tín
hiệu ngắt, CPU đáp trả bằng cách đ•a ra tín hiệu Nhận biết (Interrupt
Acknowledge Signal). Thiết bị ngắt đáp trả bằng cách gửi một số 8 bit trên
BUS dữ liệu (Interrupt Number). Mỗi thiết bị sử dụng một số hiệu ngắt đ•ợc
xác định bởi chính chúng. Việc gửi và nhận tín hiệu đ•ợc gọi là Bắt tay (Hand
Shaking). Điều này rất cần thiết để xác định thiết bị yêu cầu ngắt
b- Ngắt mềm (Software Interrupt)
Ngắt mềm đ•ợc sử dụng bởi các ch•ơng trình để yêu cầu dịch vụ hệ
thống. Một ngắt mềm xảy ra khi một ch•ơng trình gọi tiểu trình ngắt sử dụng
lệnh INT. Định dạng của lệnh INT nh• sau:
INT Interrupt_Number
CPU xử lý ngắt mềm t•ơng tự nh• xử lý với ngắt cứng
c- Loại trừ xử lý (Processor Exception):
Loại ngắt thứ ba mà ta đề cập đến là Loại trừ xử lý (Processor Exception).
Ngắt này xảy ra khi điều kiện tăng nhanh trong CPU nh• Tràn phép chia (Chia
cho 0), điều này yêu cầu điều khiển đặc biệt. Mỗi điều kiện đáp ứng một loại
ngắt duy nhất. Ví dụ Tràn phép chia là 0, do đó khi việc tràn xảy ra trong lệnh
chia, CPU tự động xử lý ngắt 0 để điều khiển việc tràn số.
2- Bảng Vector ngắt:
Các số hiệu ngắt trong 8086 là các giá trị Byte không dấu, do đó cso tới 256
loại ngắt. Không phải số hiệu ngắt nào cúng đ•ợc đáp ứng bởi tiểu trình ngắt. Các
nhà sản xuất máy tính cung cấp các dịch vụ ngắt cứng trong ROM, chúng là các tiểu
trình ngắt BIOS. Các tiểu trình ngắt hệ thống bậc cao nh• Int 21h là 1 thành phần của
hệ điều hành DOS đ•ợc nạp vào bộ nhớ ngay khi máy tính khởi động. Một vài số
hiệu ngắt đ•ợc dành riêng bởi hệ thống của IBM dành cho công việc dau này. Các
ngắt còn lại dành cho ng•ời dùng.
This document is created with the unregistered version of Document2PDF Pilot.
Ngắt 0 1Fh Các ngắt BIOS
Ngắt2 0 3Fh Các ngắt DOS
Ngắt 40 7Fh Các ngắt để dành
Ngắt 80 F0h Các ngắt ROM Basic
Ngắt F1h FFh Không sử dụng
CPU không tạo ra địa chỉ ngắt trực tiếp từ số hiệu ngắt , vì vậy các tiểu trình
ngắt phải đ•ợc l•u trữ tại một vị trí cố định trong các hệ thống máy tính. Các tiểu
trình ngắt đ•ợc l•u trong một địa chỉ bộ nhớ đã đ•ợc đặt tr•ớc và đ•ợc gọi là Bảng
Vector ngắt (Interrupt Vector).
Các Vector ngắt đ•ợc l•u trong bảng Vector ngắt, nó chiếm vị trí tại 1 KB đầu
tiên của bộ nhớ. Mỗi Vector ngắt đ•ợc đánh địa chỉ Segment:Offset và có độ dài 4
bytes. 4 Byte đầu tiên của bộ nhớ là Vector ngắt 0.
Để xác định đ•ợc Vector nào cho tiểu trình ngắt, chúng ta chỉ việc nhân số
hiệu ngắt với 4. Điều này xác định vị trí của bộ nhớ chứa Offset của tiểu trình ngắt.
Địa chỉ Segment của tiểu trình nằm trong Word kế tiếp.
Ví dụ:
Ngắt 9 (Keyboard)
Địa chỉ Offset đ•ợc l•u trong 9 x 4 = 36 = 00024h
Địa chỉ Segment là: 24h + 2 = 26h
BIOS khởi tạo các Vector ngắt khi máy tính đ•ợc bật. Các ngắt DOS
đ•ợc khởi tạo khi DOS đ•ợc nạp.
II- Các ngắt BIOS.
1- Ngắt loại 0h 7h
Các ngắt từ 0 đến 7 đ•ợc dành riêng cho Intel. Từ 0 đến 4 đã đ•ợc định sẵn.
IBM sử dụng 6 và 7.
a- Ngắt 0 - Divide Overflow: Xảy ra khi sử dụng các lệnh DIV hoặc IDIV gây
ra tràn số. Tiểu trình ngắt 0 hiển thị thông báo "Divide Overflow" và trả
ch•ơng trình về DOS
b- Ngắt 1- Single Step: Ngắt 1 xảy ra khi cờ TF đ•ợc bật.
c- Ngắt 2- Nonmaskable Interrupt: Ngắt 2 là ngăt cứng và nó không thể che
bằng cách xoá cờ IF, IBM sử dụng ngắt này để báo hiệu lỗi Parity cho bộ nhớ
(Bad Chip).
d- Ngắt 3- Breakpoint: Lệnh "Int 3" là lệnh một Byte (CCh) trong khi các lệnh
khác là lệnh 2 Bytes. Ta có thể đặt lệnh Int 3 bất kì nơi nào trong ch•ơng trình
để thay thế Opcode. Ch•ơng trình Debug sẽ sử dụng lệnh này để thay thế lệnh
G (Go).
e- Ngắt 4- Overflow: tạo ngắt bởi lệnh INTO (Ngắt nếu bị tràn) khi OF đ•ợc
thiết lập.
f- Ngắt 5- Print Screen: Chuyển thông tin từ màn hình ra máy in. Lệnh Int 5
sẽ đ•ợc thực thi khi nhấn PrintScreen trên bàn phím.
2- Ngắt loại 8h Eh
a- Ngắt 8- Timer: Mạch Timer của hệ thống IBM tạo ra một ngắt mỗi 54.92
This document is created with the unregistered version of Document2PDF Pilot.
ms. Ngắt BIOS số 8 phục vụ mạch đồng hồ. Sử dụng tín hiệu đồng hồ để l•u
giữ ngày giờ hệ thống.
b- Ngắt 9- Keyboard: Ngắt sinh ra mỗi khi một phím đ•ợc nhấn. Tiểu trình
trong BIOS sẽ đọc mã quét và l•u trữ lênh bộ đệm bàn phím.
c- Ngắt Eh- Diskette Error: Diều khiển lỗi ổ mềm.
3- Ngắt loại 10h 11h: Có thể đ•ợc gọi bởi ch•ơng trình ứng dụng để thực hiện các
thao tác vào ra và kiểm tra trạng thái.
a- Ngắt 10h- Video: tiểu trình ngắt BIOS 10h điều khiển hiển thị.
b- Ngắt 11h- Equipment Check: kiểm tra cấu hình hệ thống PC. Mã trả về l•u
trong AX.
c- Ngắt 12h- Memory Size: Trả lại thanh ghi ã dung l•ợng bộ nhớ cơ sở.
d- Ngắt 13h- Disk I/O: điều khiển ổ đĩa, cho phép các ứng dụng thao tác vào ra
với các ổ đĩa.
e- Ngắt 14h- Communication: Điều khiển truyền thông qua cổng tuần tự.
f- Ngắt 15h- Cassette: Sử dụng cho giao diện Cassette của các hệ thống cũ. Với
các hệ thống AT và PS/2 đ•ợc sử dụng cho rất nhiều dịch vụ.
g- Ngắt 16h- Keyboard I/O:Điều khiển bàn phím.
h- Ngắt 17h- Printer I/O: Điều khiển máy in. tiểu trình này gồm có 3 chức
năng từ 02. Chức năng 0 gửi ký tự ra máy in. Nhập AH=0, AL=Ký tự, DX Số
hiệu máy in.. Chức năng 1 Khởi tạo cổng máy in. Nhập AH=1, DX=Số hiệu
máy in. Chức năng 2 nhận lại trạng thái máy in, Nhập AH=2, DX = Số hiệu
máy in. Trạng thái sẽ đ•ợc l•u trong thanh ghi AH.
i- Ngắt 18h- BASIC:Chuyển điều khiển cho ROM BASIC.
j- Ngắt 19h- Bootstrap: Reboot hệ thống.
k- Ngắt 1Ah- Time Of Day: Cho phép ch•ơng trình lấy hoặc thiết lập bộ đếm
đồng hồ.
l- Ngắt 1Bh- CRTL-Break:Đ•ợc gọi bởi lệnh INT 9 khi tổ hợp phím
CRTL-Break đ•ợc nhấn. Tiểu trình BIOS chỉ chứa có một chức năng IRET.
m- Ngắt 1Ch- Timer tick: Đ•ợc gọi bởi lệnh INT 8 mỗi khi mạch Timer sinh
ngắt.
n- Ngắt 1Dh - 1Fh: Các vector ngắt trỏ tới dữ liệu thay vì các lệnh. Các vector
ngắt 1Dh, 1Eh và 1Fh trỏ đến các tham số khởi tạo Video, Diskette, Ký tự đồ
hoạ màn hình.
This document is created with the unregistered version of Document2PDF Pilot.
This document is created with the unregistered version of Document2PDF Pilot.
Các file đính kèm theo tài liệu này:
- Comarch08_20050429_013838.pdf