Trong hệ thống này, chúng ta dùng tổ hợp của các chữ số 0..9 để biểu diễn các giá trị số, đi kèm theo tập hợp có thể dùng thêm chữ D hoặc d ở cuối để chỉ ra rằng đó là hệ 10 một chữ số k
Trang 2Ch¬ng 1.MÔ HÌNH LẬP TRÌNH CỦA 8086
1.1 Giới thiệu chung về máy tính và sơ đồ cấu trúc của IBM-PC
* Máy tính ngày nay là máy tính số, thực chất là thiết bị điện tử thực hiện:
Nhận thông tin vào đã dược số hóa
Xử lý thông tin theo dãy các lệnh nhớ sẵn bên trong
Đưa thông tin ra
Dãy các lệnh nhớ sẵn bên trong chính là các chương trình
Máy tính gồm 2 phần:
Phần cứng (Hardware): Gồm các linh kiện vật lý
Phần mềm (Software): Gồm các chương trình và dữ liệu
* Các loại máy tính:
Máy tính điện tử đầu tiên ra đời vào năm 1946, rất cồng kềnh, nó chiếm khoảng
1500 m2 Hiện nay người ta chia máy tính ra làm 2 nhóm lớn:
+ Máy vi tính (MicroComputer):
Ra đời những năm 70 và phát triển rầm rộ vào những năm 80
Đặc điểm: Máy tính được chế tạo ra cho 1 người sử dụng, còn gọi là máy tính cánhân (Personal Computer - PC)
Máy vi tính chia làm 4 loại:
Đặc điểm: Hỗ trợ cho nhiều người sử dụng Có 2 loại:
MainFram
SuperComputer
Những máy này sản xuất ra làm 2 mục đích:
Làm máy chủ trong mạng máy tính lớn
Giải các bài toán phức tạp yêu cầu tốc độ nhanh
1.1.2.1 Các số nhị phân (số hệ hai)
Trang 3Trong máy tính để biểu diễn một giá trị số, chúng ta dùng hệ cơ số 2 hoặc nói ngắn gọn hơn là hệ hai (Binary number system, viết tắt là hệ B) Trong đó chỉ tồn tại 2 chữ số
0 và 1 để biểu diễn các giá trị số (ứng với 2 trạng thái: không có điện và có điện) 0 và 1
cũng là các giá trị có thể có của một chữ số hệ hai (Binary digit, viết tắt là bit).
Bit
Bit là thuật ngữ được viết tắt của cụm từ binary digit Mỗi một bit còn cho ta biết được
trạng thái của một tín hiệu điện trên một đường dây tại một thời điểm: điện áp ở mức cao (có điện) là 1, điện áp ở mức thấp (không có điện) 0.
1.1.2.2 Biểu diển dữ liệu
1.1.2.2.1 Hệ đếm
Hệ đếm thập phân
Trong cuộc sống hằng ngày chúng ta dùng hệ cơ số mười hoặc nói ngắn gọn là hệ
mười (Decimal number system, viết tắt là hệ D) để biểu diễn các giá trị số điều này là rất
tự nhiên vì từ xa xưa một con người bình thường đã biết dùng 10 ngón tay để đếm Trong
hệ thống này, chúng ta dùng tổ hợp của các chữ số 0 9 để biểu diễn các giá trị số, đi kèm theo tập hợp có thể dùng thêm chữ D hoặc d ở cuối để chỉ ra rằng đó là hệ 10 (một chữ số không có ký hiệu chữ đi kèm ở sau thì ta ngầm hiểu đó là số hệ 10)
Hệ đếm nhị phân
Số nhị phân hay còn gọi là số hệ hai là hệ đếm dùng trong máy tính Một số hệ hai gồm các bit được đánh dấu bằng chữ B hoặc b đi kèm ở cuối để phân biệt với các hệ khác khi ta làm việc cùng một lúc với các hệ đếm khác nhau Một cụm 4 bit sẽ tạo thành 1
nibble, một cụm 8 bit tạo thành 1 byte, một cụm 16 bit tạo thành 1 word (một từ), một
cụm 32 bit tạo thành 1 double word (từ kép) Chữ số dầu tiên bên trái trong dãy các số hệ hai gọi là bit có ý nghĩa lớn nhất (Most significant bit – MSB), còn bit cuối cùng bên phải (bit 0) trong dãy gọi là à bit có ý nghĩa bé nhất (Least significant bit – LSB) Ứng với thứ
Trang 4Nếu ta dùng số hệ hai để biểu diễn các số có giá trị lớn, ta sẽ gặp điều bất tiện là số hệ hai thu được quá dài Ví dụ để biểu diễn số 255 ta cần 8 bit viết như sau:
255 = 11111111b Trong thực tế để viết kết quả cho gọn lại, người ta tìm cách nhóm 4 số hệ hai
(1 nibble) thành một số hệ mười sáu Hệ 16 dùng tất cả 4 bit để biểu diễn các giá trị cho
một chữ số, một chữ số có giá trị từ 0 15 Để làm được điều này người ta sử dụng các chữ số có sẵn ở hệ 10 (0 9) để biểu diễn các giá trị số tương ứng 0 9, còn các số 10 15, dùng thêm các chữ cái A F hoặc a f để biểu diễn các giá trị còn lại Để phân biệt với các
số hệ khác, ta kèm theo chữ H hoặc h ở cuối.
Ví dụ: 255 = 11111111b = FFh
79 = 01001111b = 4Fh
1.1.2.2.2 Chuyển đổi giữa các hệ đếm
Ta gọi a là giá trị cơ số của hệ đếm (a = 2, 8, 10 hoặc 16), n là số chữ số biểu diễn giá trị cho một số P, trong đó có k chữ số phần nguyên, chỉ số vị trí của các chữ số phần nguyên trong P là 0 k-1 tính từ dấu phảy thập phân sang trái, chỉ số vị trí các chữ số phần thập phân trong P là -1 -n+k, m i là giá trị của chữ số có chỉ số vị trí i trong P (0 < m i < a,
i = -n+k k-1).
Ta có công thức chuyển đổi giữa các số hệ đếm cơ số a về số P hệ 10 như sau:
P = a k-1 x m k-1 + ak-2 x m k-2 + … + a1 x m 1 + m 0 + a-1 x m -1 + … + a-n+k x m -n+k (1)
Đổi số hệ 2 sang hệ 10
Muốn đổi một số từ hệ 2 sang số hệ 10 tương ứng, ta áp dụng công thức (1) ở trên với
cơ số a = 2, có nghĩa là ta chỉ cần tính các giá trị 2i tương ứng với các chữ số khác 0 thứ i của số hệ 2 rồi cộng chúng lại.
Trang 5Cách 1: Lấy số hệ mười cần đổi trừ đi 2x (với x là giá trị lớn nhất của số mũ chọn sao cho 2x nhỏ hơn hoặc bằng số hệ mười cần đổi), ghi lại giá trị 1 cho chữ số hệ 2 ứng với
2x tiép tục làm như vậy đối với hiệu số vừa tạo ra và các chữ sô 2i bậc thấp hơn cho tới khi đạt tới 20 và ghi lại các giá trị 0 hoặc 1 cho chữ số hệ hai thứ i tùy theo quan hệ giữa
số dư và lũy thức tương ứng.
0 Đảo ngược thứ tự dãy các số dư, ta sẽ được các chữ số của số hệ hai cần tìm.
Ví dụ đổi số 34 sang số hệ hai ta thực hiện như sau:
Các số dư trong khung sẽ được sắp xếp theo chiều mũi tên Ta có kết quả là 100010b Trong trường hợp số hệ mười có thêm phần lẻ sau dấu thập phân cần đổi sang số hệ hai thì ta phải thực hiện đổi riêng rẽ từng phần rối sau đó ghép kết quả lại.
Riêng với phần lẻ sau dấu phảy thập phân ta làm như sau:
Lấy số cần đôi nhân với 2, tích nhận được sẽ gồm phần nguyên và phần lẻ thập phân, ghi nhớ phần nguyên, lấy phần lẻ thập phân của tích vừa thu được nhân với 2 Cứ tiếp tục như vậy cho đến khi tích được chẵn bằng 1 (không còn phần lẻ thập phân) Lấy các phần nguyên đã lưu, sắp xếp lại ta được các chữ số sau dấu phảy nhị nhân (phần lẻ nhị phân) cần tìm.
22
2
2
2
340
Trang 6Ví dụ đổi 0.125 ra số hệ hai
0.125 x 2 = 0 250 0.250 x 2 = 0 500 0.500 x2 = 1 000 Kết quả ta thu được số nhị phân: 0.001b (như thứ tự phần được đóng khung)
Kết hợp 2 ví dụ ta có ví dụ đổi số 34.125 ra số nhị phân, kết quả là 100010.001b
Đổi số hệ 10 về hệ 16
Thực hiện tương tự như đổi số hệ 10 về số hệ 2, ta thực hiện chia kết quả phần thương liên tiếp cho 16, lấy giá trị phần dư sắp xếp theo thứ tự ngược lại…
Tóm lại: để việc chuyển đổi thực hiện nhanh chóng, tránh thực hiện quá nhiều phép
chia, để đổi một số hệ mười ra số hệ hai, ta thực hiện thao thứ tự:
Số hệ mười -> số hệ mười sáu -> số hệ hai -> số hệ tám
Vì việc thực hiện đổi số hệ mười sáu về số hệ hai rất đơn giản, chỉ việc đổi từng chữ số
hệ 16 ra hệ 2 rồi ghép chúng lại theo thứ tự Từ số hệ 2 về số hệ 8 ta lấy từng cụm 3 bit một bắt đầu từ LSB để đổi ra các số từ 0 7 sau đó ghép đúng theo thứ tự.
Ví dụ: đổi số 125 ra hệ 16, ta lấy 125 chia 16 được 7 dư 13 = C, nhớ C Lấy 7 chia 16 được 0, dư 7 Kết quả ta được 7Ch
Trong đó: Ch = 1101b
7h = 0111b Ghép lại ta được số nhị phân: 01111101b = 175 (8)
1.1.2.3 Các phép toán số học với số hệ hai
Trang 7Bảng 1.1 chính là cách mà các bộ cộng trong các khối tính toán số học của máy tính thực hiện.
hệ hai là ta phải biểu diễn số âm nhị phân như thế nào sao cho thích hợp để đáp ứng được
Trang 8việc sử dụng các bộ cộng trong máy tính Việc sử dụng số bù 2 chính là cách biểu diễn số
có dấu trong máy tính ngày nay.
Vậy số bù 2 của số A chính là số đảo dấu của số A đó Ví dụ số bù 2 của 5 là -5 và ngược lại, số bù 2 của –5 là 5.
Sau đây là phương pháp xây dựng số bù 2:
- Trước hết ta xây dựng số bù 1 của A Số bù một của A chính là số nhận được khi ta đảo tất cả các bit của số A
Ví dụ 5 = 00000101b, số bù 1 của 5 là 11111010b
- Số bù 2 của A = số bù 1 của A + 1
Ví dụ: số bù 2 của 5 = số bù 1 của 5 + 1 = 11111010b + 1 = 11111011b = -5
Bảng 1.4 Biểu diễn các số theo số hệ 2, số hệ hai có dấu và số bù 2
Số hệ hai 8 bit Số hệ mười tương
đương
Số hệ mười tính theo số bù 2
Qui tắc thực hiện phép nhân hệ 2 được chỉ ra trong bảng 1.5
Bảng 1.5 Qui tắc thực hiện phép nhân y = a x b
Trang 9Phân tích quá trình trên, ta thấy phép nhân có thể thực hiện theo thuật toán cộng và dịch như sau:
- Thành phần đầu tiên của tổng tích lũy thu được là tích của LSB trong số nhân với
số bị nhân Nếu LSB = 0 thì thành phần này bằng 0, Nếu LSB = 1 thì thành phần này = chính số bị nhân.
- Mỗi thành phần thứ i tiếp theo của tổng tích lũy sẽ tính được bằng cách tương tự, nhưng phải dịch trái đi i bit (có thể bỏ qua các thành phần = 0)
1.1.2.3.5 Phép chia
Phép chia là phép tính ngược của phép nhân Từ đó suy ra phép chia có thể thực hiện bằng các phép trừ và phép dịch liên tiếp cho tới khi không thể trừ được nữa (do không còn gì để trừ hoặc số bị trừ nhỏ hơn số chia) Sau đây là thuật toán thực hiện phép chia thông qua ví dụ cụ thể:
Trang 10Sau đây là một thuật toán khắc phục nhược điểm trên nêu trên:
1 Kiểm tra số bị chia, mở rộng bit dấu nếu cần
2 Đổi số chia ra số bù 2 của nó (để bước tiếp theo làm phép cộng với số bị chia thay cho phép trừ) K = số bù 2 của số chia dịch trái đi 8 bit (nếu số chia là số 8 bit) hoặc 16 bit nếu số chia là số 16 bit Q = số bị chia
Trang 11Thuật toán chia số nhị phân số 103/6:
Vậy ta có kết quả = 10001b = 17, số dư H = 1
1.1.2.4 Biểu diễn số trong máy tính
Trang 121.1.2.4.1 Biểu diễn số nguyên
Phần cứng của máy tính cần giới hạn độ lớn của một số để có thể lưu nó trong các thanh ghi hay các ô nhớ Do vậy các số nguyên được chia thành các số 8 bit, 16 bit, 32 bit, 64… tương ứng chúng có MSB là bit 7, 15, 31, 63 và MSB đều là bit 0.
Số nguyên không dấu
Số nguyên không dấu (unsigned integer) biểu diễn các số nguyên dương Số nguyên không dấu rất thích hợp để biểu diễn các đại lượng luôn dương, chẳng hạn địa chỉ của ô nhớ, bộ đếm hay, mã ASCII của ký tự (chúng ta sẽ thấy sau này) Bởi vì các số nguyên không dấu được định nghĩa là các số nguyên dương, nên không cần dùng bit nào để biểu diễn bit dấu, do đó 8 bit của một byte hay 16 bit của một word đều được dùng để biểu diễn giá trị.
- Số nguyên không dấu lớn nhất có thể chứa trong một byte là: 11111111b = FFh = 255.
- Số nguyên không dấu lớn nhất có thể chứa trong một word là: 1111111111111111b = FFFFh = 65535.
Chú ý rằng LSB = 1 thì số nguyên là số lẻ và ngược lại nó là số chẵn
Số nguyên có dấu
Số nguyên có dấu (signed integer) có thể là số dương hoặc âm MSB được dùng để biểu diễn dấu của số, MSB = 1 cho biết đó là số âm, MSB = 0 cho biết đó là số dương Các số nguyên có dấu được lưu trữ trong máy tính dưới dạng số bù 2.
Một ưu điểm của việc biểu diễn số âm trong máy tính bằng số bù 2 là phép trừ có thể thực hiện bằng phương pháp lấy bù và phép cộng, các vi mạch thực hiện phép cộng và bù các bit được con người thiết kế tương đối dễ dàng.
1.1.2.4.2 Biểu diễn số thực
Trong máy tính các số thực được biểu diễn và được viết dưới dạng dấu phảy động (dạng có phần số mũ) Còn trong thực tế con người biểu diễn số thực ở 2 dạng:
Đổi phần thập phân thành dạng nhị phân
Giả sử có phần thập phân là 0,d1d2d3…dn Có dạng biểu diễn nhị phân là
0,b1b2b3…bm
Bit b1 tương ứng với phần nguyên của tích: 0,d1d2d3…dn*2
Sau đây là thuật toán để đổi phần thập phân ra dạng nhị phân m chữ sô
X chứa phần thập phân cần đổi
Trang 13Các số dấu chấm (phảy) động
Dạng biểu diễn dấu phảy động, mỗi số được biểu diễn bằng 2 phần:
- Phần định trị (mantissa) chứa các bit của số
- Phần mũ (exponent) dùng để điều chỉnh lại vị trí của dấu phảy nhị phân
trong số đó
Ví dụ : số thập phân 2,5 biểu diễn dạng nhị phân là 1,01b
Phần biểu diến dấu phảy động của nó có phần định trị là 1,01
Phần mũ là 1
Vì 10,1b có thể viết là 1,01b*21
Đối với các số khác 0, phần định trị được lưu như là một trị số <1 và < 2 Phần
định trị như vậy được gọi là phần định trị đã được chuẩn hóa
Đối với các số < 1, nếu chúng ta chuẩn hóa phần định trị thì phần mũ của chúng sẽ âm chẳng hạn số 0,0001b có dạng biểu diễn dấu phảy động
là 1*2-4 Vì phần mũ âm không được biểu diễn như số có dấu, nên với tất cả các số phần
mũ sẽ được tính lại thông qua các số có tên gọi là bias bias sẽ được cộng thêm vào để
tạo ra phần mũ là một số dương Ví dụ nếu ta chọn 8 bits cho phần mũ thì số 27-1 = 127
sẽ được chọn làm bias
Short real – dùng 4 byte để lưu trữ, 1 bit dấu, 8 bit phần mũ, 23 bit phần định trị.
Không chứa phần nguyên của phần định trị Bias = 127.
Long real – dùng 8 byte để lưu trữ, 1 bit dấu, 11 bit phần mũ, 52 bit phần định trị.
Không chứa phần nguyên của phần định trị Bias = 1023.
Temporary real – dùng 10 byte để lưu trữ, 1 bit dấu, 15 bit phần mũ, 64 bit phần định
trị Gồm cả phần nguyên của phần định trị Bias = 16383.
Ta xem cụ thể một loại số chấm động kiểu short real sau để thấy rõ.
Số dấu chấm (phảy) động kiểu short real
Để biểu diễn số 0,0001b chúng ta có phần định trị là 1 và phần mũ là -4, Saukhi cộng thêm 127, chúng ta nhận được phần mũ là 123 = 011111101b
Hình sau mô tả sắp xếp của một dấu phảy động 32 bits, trong đó S là một bitdấu, exponent (phần mũ) chiếm 8 bits, mantissa (phần định trị) chiếm 23 bits
31 30 23 22 0
Hình 1.1 Biểu diễn số dấu chấm (phảy) động 32 bit trong máy tính
Trang 14Ví dụ biểu diễn số 4,9 ở dạng dấu phảy động 32 bit (short real):
Áp dụng cách biểu diễn số dấu chấm động ở hình 1.1, chúng ta có:
4.9 = 100.1110011001100…
Sau khi chuẩn hóa ta có phần định trị là: 1.00111001100110011001100 và phần mũ
là 2 Cộng thêm bias vào phần mũ, ta nhận được 129 = 10000001b Do phần nguyên
trong phần định trị không được lưu nên ta được số biểu diễn trên máy cho giá trị 4.9 là:
0 10000001 00111001100110011001100 hay bằng 409CCCCCh
Ví dụ biểu diễn số -0.75 ở dạng dấu phảy động 32 bit (short real):
Chúng ta có biểu diễn nhị phân của 0.75 = 0.11b, do đó –0.75 = -0.11b
Phần định trị sẽ được chuẩn hóa bằng 1.1
Phần mũ là -1, cộng với bias = 127, ta được phần mũ là 126 = 01111110b
Phần nguyên không được lưu nên ta có dạng short real của -0.75 là
1 01111110 10000000000000000000000 hay bằng BF400000h
1.1.2.4.3 Biểu diễn ký tự
Không phải mọi số liệu mà máy tính xử lý dều là các con sô các thiết bị ngoại vi như màn hình hay máy in đều so xu hướng làm việc với các ký tự Ngoài ra các chương trình như chương trình xử lý văn bản chuyên làm việc với dữ liệu kiểu ký tự Cũng như tất cả các dữ liệu khác, các ký tự cũng cần phải được mã hóa thành dạng nhị phân để máy tính
có thể xử lý chúng Một kiểu mã hóa thông dụng nhất cho các ký tự đó là mã ASCII (American Standard Code For Infermation Interchange – Mã chuẩn của Mỹ dùng để trao đổi thông tin) Trước đây mã ASCII được sử dụng trong thông tin với các thiết bị teletype, ngày nay mã ASCII được sử dụng trên tất cả các máy tính cá nhân.
Mã một byte
Hệ thống mã ASCII sử dụng 7 bit để mã hóa cho một ký tự, đo đó có tổng cộng 27 =
128 mã ASCII Bảng 1.6 trình bày các mã ASCII và các ký tự tương ứng với chúng Chú ý rằng chỉ có 95 ký tự ứng với 95 mã ASCII từ 32 126 là có khả năng hiển thị (in được), các mã từ 0 31 và mã 127 được dùng đến với các mục đích điều khiển quá trình truyền thông, do đó không có khả năng in được Hầu hết các máy vi tính chỉ sử dụng các ký tự in được và một số ký tự điều khiển như CR (về đầu dòng), LF (xuống dòng), HT (Tab), BS (xóa lùi), BEL (Đưa tiếng bip ra loa).
Trang 15Bảng 2.6 Bảng mã ASCII với 128 ký tự đầu.
Trang 17ký tự A trên màn hình, chương trình sẽ gửi mã ASCII 41h đến màn hình, còn để lùi con trỏ trở lại đầu dòng, chương trình sẽ gửi mã ASCII có giá trị 13 (0Dh – mã ASCII của ký
tự điều khiển CR) đến màn hình.
Ngoài ra máy tính cũng hiển thị một số ký tự đặc biệt ứng với một số mã ASCII không
in được Như ta sẽ thấy bộ điều khiển màn hình của IBM PC có thể hiển thị một bộ ký tự
mở rộng 256 ký tự (bảng 2.7)
1.1.2.5 Mã hai byte
Unicode là viết tắt của từ Universal Code, tức là bộ mã vạn năng, có thể dùng để mã hoá tất cả các ngôn ngữ chính trên toàn thế giới (trong đó có tiếng Việt), được dùng chủ yếu trong trao đổi hiển thị dữ liệu trong các hệ thống công nghệ thông tin Unicode còn là cộng động của một số công ty hàng đầu trong lĩnh vực công nghệ thông tin như Microsoft, IBM, Sun được thành lập từ năm 1991 nhằm tạo ra một bộ mã dùng chung cho toàn thế giới Song song với tổ chức Unicode còn có tổ chức ISO (Tổ chức chuẩn quốc tế chính thống) cũng nghiên cứu một bộ mã đa ngữ dùng trong CNTT là ISO /IEC
10646 Unicode và ISO từ năm 1993 đã thống nhất cùng nhau phát triển và đồng nhất 2
bộ mã ở miền 16-Bit Unicode là bộ mã 16-Bit (có 65.536 ô mã)
Các định dạng biến đổi tập kí tự Unicode (UTF-Unicode Transformation Format) thực hiện biến đổi mỗi giá trị Unicode thành một dãy giá trị mã duy nhất Một UTF có thể xác định một thứ tự byte cho việc tuần tự hoá các giá trị mã trong byte UTF cũng có thể xác định việc dùng dấu thứ tự byte Unicode định nghĩa ra các định dạng biến đổi tập kí tự là UTF-8, UTF-16, UTF-16LE, UTF-16BE, UTF-32.
Dạng mã hoá mặc định của chuẩn Unicode là bit: các kí tự được gán một giá trị bit duy nhất, ngoại trừ các kí tự được mã hoá bằng các thay thế bao gồm một cặp hai giá trị 16-bit Dạng mã hoá 16-bit này chính là định dạng UTF-16 Trong UTF-16, các kí tự
Trang 1816-cho tới 65 535 được mã hoá thành các giá trị 16-bit; các kí tự trên 65535 được mã hoá thành các cặp giá trị 16-bit (thay thế).
Sơ đồ khối chung:
Máy tính có 1 bộ xử lý trung tâm (CPU) thì máy tính đó gọi là máy tính tuần
tự, hay còn gọi là máy tính Ven Newmann
Máy tính có nhiều bộ xử lý gọi là máy tính song song
Đơn vị xử lý trung tâm:
Chức năng: - Điều khiển hoạt động của hệ thống
- Xử lý dữ liệu
Nguyên tắc hoạt động:
Hoạt động theo chương trình nằm trong bộ nhớ, nhận lần lượt từng lệnh từ bộ nhớ,giải mã để phát tín hiệu điều khiển thực hiện lệnh Trong quá trình thực hiệnchương trình, nó trao đổi dữ liệu với bộ nhớ và các thiết bị vào ra
và các mạch ghép nối)
Trang 19Đơn vị số học và logic (Arithmetic & Logic Unit - ALU): thực hiện các chức năng
Chức năng: Dùng để nhớ chương trình và dữ liệu
Chương trình là những lệnh yêu cầu máy tính phải thực hiện
Dữ liệu là những gì mà chương trình tác động vào
Các thành phần cơ bản:
Bộ nhớ chính: (Main Memory): Là thành phần nhớ được nối trực tiếp với CPU vàđược điều khiển bởi CPU Các chương trình đang thực hiện phải nằm trong bộ nhớchính
Bộ nhớ chính gồm các ngăn nhớ và mỗi ngăn nhớ có 1 địa chỉ xác định,các ngăn nhớ được tổ chức theo Byte
Bộ nhớ chính có tốc độ cao, dung lượng nhỏ Gồm:
ROM (Read Only Memory): Chứa thông tin cố định trong hệ thống.RAM (Random Access Memory): Bộ nhớ tạm thời
Bộ nhớ ngoài: Để lưu trữ các tài nguyên phần mềm của máy tính
Về mặt tổ chức: được tổ chức như 1 thiết bị vào ra
Bộ nhớ Cache: Bộ nhớ đệm truy nhập nhanh Được đặt xen giữa bộ nhớ chính vàCPU để tăng tốc độ trao thông tin giữa CPU và hệ thống nhớ
Bit là từ viết tắt của ‘BInary digiT’
Bản chất vật lý: Không có điện áp truyền 0
Có điện áp truyền 1
1 Bit (tại 1 thời điểm)
Trang 20Tập các đường dây vận chuyển thông tin đồng thời được gọi là độ rộng củaBus (Ví dụ: 8 đường dây thì độ rộng là 8 Bit)
* Chức năng của Bus:
Bus chia thành 3 loại: - Bus địa chỉ
Bus địa chỉ nói tổng quát gồm n đường dây A0 An-1 thì gọi độ rộng Bus
là n Bit và n Bit này được dùng để đánh địa chỉ, do đó có khả năng quản lý tối đa
2n địa chỉ ngăn nhớ hay 2n Byte nhớ (vì bộ nhớ chính quản lý theo Byte)
Ví dụ:
8088/8086: Bộ vi xử lý có n = 20 quản lý tối đa 220 Byte = 1MB
80286:n = 24 quản lý tối đa 224 Byte = 24 x 220 = 16 MB
80386:n = 32 quản lý tối đa 232 Byte = 22 x 230 = 4 GB
Pentum II:n = 36 quản lý tối đa 236 Byte = 26 x 230 = 64 GB
- Bus dữ liệu:
Vận chuyển dữ liệu từ bộ nhớ đến CPU
Vận chuyển dữ liệu giữa các thành phần với nhau
Bus dữ liệu ký hiệu D0 Dm-1 thì độ rộng Bus là m Bit
m thường là các giá trị: 8, 16, 32, 64
Ví dụ:
8088/86: m = 8 tức là vận chuyển 1 lúc 1 Byte
Bus dữ liệuBus điều khiển
Bus địa chỉ
nhớ chính
Mạch ghép nối vào ra
Các thiết
bị vào ra
Trang 2180286: m = 16 tức là vận chuyển 1 lúc 2 Byte.
80386/486: m = 32 tức là vận chuyển 1 lúc 4 Byte
Pentum II: m = 64 tức là vận chuyển 1 lúc 8 Byte
- Bus điều khiển:
Là tập hợp các tín hiệu điều khiển hoặc là phát ra từ CPU để điều khiển bộnhớ hay hệ thống vào ra, hoặc là từ bộ nhớ hay hệ thống vào ra đến yêu cầu CPU
1.2 Tổ chức các thanh ghi của vi xử lý 8086.
Để làm việc được thì trong CPU cần có các thanh ghi Thanh ghi chính là bộ nhớ
có tốc độ truy nhập cực nhanh, dùng để lưu trữ các giá trị địa chỉ và dữ liệu phục
vụ cho nhiệm vụ điều khiển và xử lý dữ liệu Trong 8086 có:
4 thanh ghi đoạn
3 thanh ghi con trỏ và 2 thanh ghi chỉ số
4 thanh ghi đa năng
1 thanh ghi cờ
Khối BIU đưa ra trên Bus địa chỉ 20 Bit địa chỉ, như vậy 8086 có khả năngphân biệt được 220 = 1.048.576 = 1M ô nhớ = 1 Mbyte
Nói cách khác: Không gian địa chỉ của 8086 là 1 Mbyte Trong không gian 1Mbyte này, bộ nhớ cần được chia thành các vùng khác nhau (điều này có lợikhi làm việc ở chế độ nhiều người sử dụng hoặc đa nhiệm) dành riêng để:Chứa mã chương trình
Chứa dữ liệu và kết quả trong không gian của chương trình
Tạo ra vùng nhớ đặc biệt gọi là ngăn xếp (Stack) dùng vào việc quản lý các thông
số của bộ VXL khi gọi chương trình con hoặc trở về từ chương trình con
Bộ vi xử lý 8086 có các thanh ghi 16 Bit liên quan đến địa chỉ đầu của cácvùng (các đoạn) kể trên và chúng được gọi là các thanh ghi đoạn (SegmentRegisters) Đó là:
CS - Code Segment: Thanh ghi đoạn mã
DS - Data Segment: Thanh ghi đoạn dữ liệu
SS - Stack Segment: Thanh ghi đoạn ngăn xếp
ES - Extra Segment: Thanh ghi đoạn dữ liệu phụ
Các thanh ghi đoạn sẽ xác định địa chỉ của các ô nhớ nằm ở đầu đoạn Địachỉ này gọi là địa chỉ cơ sở
Trong 8086 có 3 thanh ghi con trỏ và 2 thanh ghi chỉ số 16 Bit, các thanh ghinày được ngầm định như là thanh ghi lệch cho các đoạn tương ứng, cụ thể: IP - Instruction Pointer (Con trỏ lệnh): IP luôn trỏ vào lệnh tiếp theo sẽđược thực hiện nằm trong đoạn mã CS Địa chỉ đầy đủ của lệnh tiếp theonày ứng với: CS : IP
BP - Base Pointer (Con trỏ cơ sở): BP luôn trỏ vào 1 dữ liệu nằm trongđoạn ngăn xếp SS Địa chỉ đầy đủ của 1 phần tử trong đoạn ngăn xếp ứngvới: SS : BP
Trang 22SP - Stack Pointer (Con trỏ ngăn xếp): SP luôn trỏ vào đỉnh hiện thời củangăn xếp SS Địa chỉ đầy đủ của đỉnh ngăn xếp ứng với: SS : SP.
SI - Source Index (Chỉ số gốc/nguồn): SI trỏ vào 1 dữ liệu nằm trong đoạn
dữ liệu DS Địa chỉ đầy đủ của 1 phần tử trong đoạn DS: DS : SI
DI - Destination Index (Chỉ số đích): DI trỏ vào 1 dữ liệu nằm trong đoạn
dữ liệu DS Địa chỉ đầy đủ cụ thể ứng với:
ES : DI
*Địa chỉ của các ô nhớ khác nằm trong đoạn được tính bằng cách cộng thêm
vào địa chỉ cơ sở 1 giá trị gọi là địa chỉ lệch hay độ lệch (địa chỉ offset /địa
chỉ tương đối) Độ lệch này được xác định bởi các thanh ghi 16 Bit khácđóng vai trò thanh ghi lệch (offset register) - được nói rõ trong phần thanhghi con trỏ và chỉ số
Cụ thể, để xác định địa chỉ vật lý 20 Bit của 1 ô nhớ cụ thể nào đó trong 1đoạn bất kỳ, CPU 8086 phải dùng đến 2 thanh ghi 16 Bit (1 thanh ghi chứađịa chỉ cơ sở, 1 thanh ghi chứa địa chỉ lệch) Từ nội dung của cặp thanh ghitrên, tạo ra địa chỉ vật lý theo công thức sau:
Địa chỉ vật lý = thanh ghi đoạn *16 +thanh ghi lệch.
= segment * 16 + offset
Và địa chỉ logic được ký hiệu như sau:
Thanh ghi đoạn : thanh ghi lệch
Hay:
Segment : offset.
Địa chỉ kiểu Segment : offset là địa chỉ Logic vì nó tồn tại dưới dạng giá trị
của các thanh ghi cụ thể bên trong CPU Khi cần thiết truy nhập ô nhớ nào đó,CPU phải đổi địa chỉ logic này ra địa chỉ vật lý để rồi đưa lên Bus địa chỉ Việcchuyển đổi này do 1 bộ tạo địa chỉ thực hiện (Khối trong hình vẽ)
Riêng trong các lệnh thao tác với dữ liệu kiểu chuỗi thì cặp:
ES:DI luôn ứng với phần tử thuộc chuỗi đích
DS:SI luôn ứng với phần tử thuộc chuỗi gốc (nguồn)
Ví dụ:
Cặp CS:IP sẽ chỉ ra địa chỉ của lệnh sắp thực hiện trong đoạn mã Nếu tại 1 thời điểm nào đó ta có: CS = F000h và IP = FFF0h thì:địa chỉ logic CS : IP , tương ứng ta có địa chỉ vật lý:
Trang 23Trong khối EU có 4 thanh ghi đa năng 16 Bit: AX, BX, CX, DX, điều đặcbiệt là khi chứa các dữ liệu 8 Bit thì mỗi thanh ghi này có thể tách ra thành 2thanh ghi 8 Bit cao và 8 Bit thấp để làm việc độc lập Đó là các cặp thanhghi AH & AL, BH & BL, CH & CL, DH & DL.
(trong đó H - chỉ phần cao ; L chỉ phần thấp)
AX (Accumulater, Acc - thanh chứa): Các kết quả của thao tác được chứa
ở đây (Kết quả của phép *, / , )
BX (Base - thanh ghi cơ sở): Thường chứa địa chỉ cơ sở của 1 bảng dùngtrong lệnh XLAT
CX (Count - Bộ đếm): CX thường được dùng để chứa số lần lặp trongtrường hợp các lệnh LOOP (lặp) Còn CL chứa số lần dịch hoặc quay trongcác lệnh dịch hoặc quay thanh ghi
DX (Data - thanh ghi dữ liệu): DX cùng AX tham gia vào các thao tác củaphép * hoặc / các số 16 Bit
DX còn dùng để chứa địa chỉ của các cổng trong các lệnh vào/ra dữ liệutrực tiếp (IN/ OUT)
Đây là thanh ghi khá đặc biệt trong CPU, mỗi Bit của nó dùng để phản ánh 1trạng thái nhất định của kết quả phép toán do ALU thực hiện hoặc một trạngthái hoạt động của EU gọi là các Bit cờ
Dựa vào các cờ này người lập trình có thể có các lệnh thích hợp tiếp theocho bộ vi xử lý (các lệnh có điều kiện) Thanh ghi cờ gồm 16 Bit nhưngngười ta chỉ dùng hết 9 Bit của nó để làm các Bit cờ
x : Bit không được định nghĩa
Các cờ cụ thể:
C hoặc CF (Carry Flag): Cờ nhớ
CF = 1 khi có nhớ hoặc mượn từ MSB sang
(MSB - Most Significant Bit: Bit có ý nghĩa nhất)
P hoặc PF (Parity Flag): Cờ chẵn lẻ, phản ánh tính chẵn lẻ của tổng số Bit 1trong kết quả
PF = 1 khi tổng số Bit 1 trong kết quả là chẵn (even parity)
A hoặc AF (Auxiliary Flag): Cờ nhớ phụ, rất có ý nghĩa khi ta làm việc với
1 số BCD
AF = 1 khi có nhớ hoặc mượn từ 1 số BCD thấp (4 Bit thấp) sang 1 sốBCD cao (4 Bit cao)
Z hoặc ZF (Zero Flag): Cờ Zero, ZF = 1 khi kết quả = 0
S hoặc SF (Sign Flag): Cờ dấu, SF = 1 khi kết quả âm
O hoặc OF (Overflow Flag): Cờ tràn, OF = 1 khi kết quả là 1 số bù 2 vượt ra ngoài giớ hạn biểu diễn dành cho nó
Trên là 6 Bit cờ trạng thái phản ánh các trạng thái khác nhau của kết quả sau một thao tác nào đó Chúng được lập hoặc xóa tùy theo điều kiện cụ thể
Trang 24sau các thao tác của ALU Ngoài ra 8086 còn có 3 cờ điều khiển (các cờ nàyđược lập, xóa bằng các lệnh riêng):
T hoặc TF (Trap Flag): Cờ bẫy, TF = 1 khi CPU làm việc ở chế độ chạy từng lệnh (Chế độ này dùng khi cần tìm lỗi của 1 chương trình)
I hoặc IF (Interrupt enable Flag): Cờ cho phép ngắt, IF = 1 thì CPU chophép các yêu cầu ngắt (ngắt che được) được tác động
D hoặc DF (Direction Flag): Cờ hướng, DF = 1 khi CPU làm việc với 1chuỗi ký tự từ phải sang trái (DF còn gọi là cờ lùi)
* ý nghĩa của các cờ khá rõ ràng; Riêng cờ tràn cần làm rõ hơn để hiểu rõbản chất và cơ chế làm việc của nó
Giả thiết ta làm việc với số bù 2 dài 8 Bit, kết quả để ở AL Gọi C6,7 là cờ nhớ từBit 6 lên Bit 7 (b7), trong đó b7 là MSB và cũng chính là Bit dấu (SF) của AL
Quan hệ giữa cờ OF với cờ C6,7 tuân theo phương trình sau:
OF = CF C6,7
Nghĩa là: khi thực hiện các phép toán với số tính theo mã bù 2 (số có dấu),hiện tượng tràn sẽ xảy ra (Cờ OF = 1) nếu có nhớ từ MSB (tức là SF) sang CFnhưng ngược lại không có nhớ vào chính nó (SF) hoặc ngược lại
(Nhớ vào SF, xong không có
nhớ vào CF - Kết quả sai: Tổng
hai số dương bằng số âm)
Carry Out Overflow(Nhớ vào CF, xong không cónhớ vào SF - Kết quả sai:Tổng hai số âm bằng 1 sốdương)
ở đây: C6,7 = 0 (không có nhớ
từ bit 6 lên bit 7)
CF = 1 (có nhớ từ MSB sang)
do vậy: OF = CF C6,7 = 1
CF b7 b6 AL b0
C 6,7
Trang 25+ Hiệu năng (Performance):
Thời gian truy nhập
Xoá được và không xoá được
Khả biến và không khả biến
Khả biến: Mất nguồn thì mất thông tin
Không khả biến: Mất nguồn thì không mất thông tin (VD: Đĩa từ).+ Tổ chức bộ nhớ
SRAM
Bộ nhớ chính
Bộ nhớ ngoài
DRAM
Cache L1 (Sơ cấp)
Trang 26Đường chấm gạch thể hiện: Cache L2 có thể đưa 1 phần vào bộ vi xử lý, hoặc có thể đưa toàn bộ vào bộ vi xử lý.
Qui luật mô hình phân cấp hệ thống nhớ:
Dung lượng , thời gian truy nhập (tốc độ )
Tần xuất truy nhập bởi CPU , giá thành 1 Bit
Bộ nhớ bán dẫn gồm 2 loại là ROM và RAM
1.3.2.1 ROM - Read Only Memory:
EPROM - Erasable PROM:
Ghi thông tin được nhiều lần bằng thiết bị chuyên dùng
Trước khi ghi phải xóa nội dung cũ bằng tia cực tím
EEPROM - Electrically EPROM:
Giống RAM nhưng mất nguồn thì không mất thông tin
Cần đọc hay ghi thông tin thì đều được ngay Nó ghi thông tin theo từngByte Thông tin ghi lần cuối không bị mất khi mất nguồn
Flash Memory (bộ nhớ tia chớp): Giống EEPROM, chỉ cho phép đọc cả khối, ghi
cả khối, chế tạo với dung lượng lớn - ngày nay ít sử dụng Có 1 thời kỳ làm bộ nhớngoài cho máy tính xách tay
1.3.2.2 RAM - Random Access Memory:
Đã là bộ nhớ bán dẫn thì đều là bộ nhớ truy nhập ngẫu nhiên, tức là thời giantruy nhập trên tất cả các ô nhớ đều bằng nhau khi có địa chỉ phát ra
Bản chất của bộ nhớ này là Read Write Memory tức là bộ nhớ ghi dọc chứkhông phải là bộ nhớ truy nhập ngẫu nhiên
Trong máy tính nó được dùng làm Cache L2
DRAM (Dynamic RAM - RAM động):
Trang 27Thông tin không ổn định, do đó cần có mạch làm tươi để ổn định (mạch
dữ liệu để truy nhập nhanh
SDRAM (Symchronous DRAM): Loại này có chân để đưa tín hiệuxung Clock vào nhằm tạo ra sự đồng bộ theo đầu vào của tín hiệu Clock,
do đó phân mức thực hiện đồng thời kiểu Pipeline
Vị trí đặt Cache:
Cache có thể ở giữa CPU và bộ nhớ chính
Cache có thể ở giữa bộ nhớ chính và bộ nhớ ngoài
Trường hợp Cache giữa CPU và bộ nhớ chính:
- Tốc độ: CPU >> Cache >> bộ nhớ ngoài
- Dung lượng: Cache << bộ nhớ ngoài
1.3.2.4 Bộ nhớ ngoài:
Đĩa từ: Đặc trưng bởi các thông số sau
- Đầu từ: Tiếp xúc hay không tiếp xúc
Số lượng đĩa: 1 đĩa hay nhiều đĩa
Số lượng đầu từ trên một mặt:
Trang 28Dung lượng của 1 sector.
Tốc độ quay (vòng/ph)
Tốc độ truyền: Tốc độ trao đổi thông tin với bên ngoài
Đĩa quang:
CD-ROM
CD-WORM: Có khả năng ghi 1 lần/1 đĩa và không xóa được
Đĩa Magneto-Optical CD: Đĩa quang từ, có thể ghi đọc nhiều lần nên được dùngtương tự như đĩa cứng hoặc đĩa mềm
Bộ nhớ chính của 8086/8088 là một dãy các bytes liên tiếp nhau được đánh số
từ 0 220-1 (00000h FFFFFh) Chỉ số thứ tự đó được gọi là địa chỉ tuyệt đối
và sử dụng 20 bits địa chỉ để đánh địa chỉ Bộ VXL 80286 có 24 bits địa chỉ,cho phép bộ nhớ lên tới 16 MB Bộ VXL 80386 có 32 bits địa chỉ cho phép bộnhớ lên tới 4GB
Để tận dụng bộ nhớ và thuận lợi trong xử lý, người ta chia bộ nhớ thành từngđoạn (segment), mỗi đoạn bắt đầu từ địa chỉ chia hết cho 16 và có chiều dài tối
đa là 64 KB, địa chỉ trong một đoạn được đánh số từ 0 216-1 và gọi là địa chỉoffset Lúc đó vị trí của một byte trong bộ nhớ được xác định bằng cặp giá trịsegment:offset, cặp giá trị này gọi là địa chỉ logic, trong đó segment số nhịphân 16 bits biểu diễn địa chỉ tuyệt đối cho đầu của mỗi đoạn là segment*16,offset cũng là 1 số nhị phân 16 bits biểu diễn địa chỉ tương đối (địa chỉ lệch /địa chỉ hiệu dụng) trong mỗi đoạn
Bộ VXL 8086 có khả năng định địa chỉ tới 1 MB bộ nhớ, tuy nhiên toàn bộ bộnhớ không phải chỉ giành cho các chương trình ứng dụng Chẳng hạn:
1 KB đầu tiên giành cho bảng vector ngắt
Một số vùng nhớ giành riêng cho các mục đích đặc biệt như chứa các chươngtrình của BIOS, của bộ nhớ màn hình (Video display memory) - Bộ nhớ màn hìnhchứa các thông tin sẽ được hiển thị lên màn hình
Để trình bày bản đồ bộ nhớ của 8086, ta phân bộ nhớ thành các đoạn tách rời nhau,mỗi đoạn có không gian nhớ là 64 KB, Ví dụ:
Địa chỉ vật lý Địa chỉ đoạn (segment)
2000h1000h
Mỗi đoạn có không gian nhớ là 64 KB vì các thanh ghi biểu diễn giá trị địa chỉ lệch trong đoạn (offset) là các thanh ghi 16 bit, nên có chỉ có thể đánh địa chỉ trong một đoạn
từ 0 FFFFh, tức tối
đa là FFFFh Bytes = 64 KB
Trang 2948 32 16 0
Địa chỉ bắt đầu có thể cho mỗi đoạn:
Hoặc Đoạn 1Đoạn 1
Ta thấy các đoạn có thể chồng lên nhau, có thể nối tiếp nhau, có thể tách rời nhau.Việc phân bổ bộ nhớ thành từng đoạn làm cho việc tổ chức chương trình và dữ liệukhá mềm dẻo Chương trình không cần phải viết như một dãy liên tục các chỉ thị(instruction) và dữ liệu, mà có thể là các đơn thể (module) gồm mã và dữ liệu
Dữ liệu cũng có thể tổ chức thành các cấu trúc dữ liệu khác nhau: dữ liệu dùngriêng, dữ liệu dùng chung với các chương trình khác trong hệ thống Mỗi đơn thể
mã và dữ liệu này có thể có kích thước khác nhau
Bản đồ bộ nhớ của 8086:
F0000hE0000hD0000hC0000hB0000hA0000h
00400h00000h
BIOS
Để giành
Để giành
Để giànhVideoVideoVùng giành cho các ứng dụng khác
DOSBIOS & dữ liệu của DOS
Trang 301.4 Cơ chế thực hiện chương trình
Trong hệ thống 8086, CPU có 3 hoạt động cơ bản là:
- Thực hiện chương trình
- Xử lý ngắt
- Chuyển nhượng BUS
Nội dung chính của phần này giúp sinh viên nắm được hoạt động thực hiệnchương trình của CPU, xong tài liệu cũng đưa thêm nội dung hoạt động xử lýngắt và chuyển nhượng BUS nhằm giúp sinh viên nắm được tổng quan về hoạtđộng của CPU
+ Nhận lệnh (Instruction Fetch):
Địa chỉ của lệnh cần nhận nằm ở PC sẽ được chuyển qua Bus địa chỉ để đưa đến bộnhớ tìm ra ngăn nhớ chứa lệnh
CPU phát ra tín hiệu điều khiển đọc ngăn nhớ (MEMR)
Nội dung của lệnh được chuyển qua Bus dữ liệu đưa vào thanh ghi lệnh (có thể chỉnhận mã lệnh)
+ Giải mã lệnh (Instruction Decode):
Mã lệnh từ thanh ghi lệnh được chuyển đến đơn vị điều khiển và ở đó lệnh đượcgiải mã để xác định hành động của lệnh
+ Nhận dữ liệu (Data Fetch):
Lệnh có thể yêu cầu nhận dữ liệu từ bộ nhớ hay cổng vào ra đưa vào CPU
+ Xử lý dữ liệu (Data Processing):
Trang 31Nếu lệnh yêu cầu thực hiện 1 phép toán nào đó thì dữ liệu sẽ chuyển vào ALU Ở
đó phép toán sẽ được thực hiện và kết quả tạm thời sẽ được cất trong thanh ghi dữliệu
+ Cất dữ liệu (Data Saving):
Phát ra được tìm ra nơi cất
Đưa dữ liệu ra ngoài
Phát ra tín hiệu điều khiển ghi
Nếu hệ thống xử lý tuần tự thì tốc độ chậm, do đó ngày nay áp dụng kỹ thuậtPipeline (Kỹ thuật xử lý đường ống trong các bộ vi xử lý) để nâng cao tốc
Trong thực tế có 2 loại ngắt sau:
+ Ngắt do tín hiệu điều khiển từ bên ngoài gửi đến CPU (ngắt cứng)
Ngắt không che được: Bắt buộc CPU phải ngắt (VD: báo lỗi phần cứng)
Ngắt che được (ngắt vào ra): Còn tùy thuộc vào số hiệu ngắt hay mức độ ưu tiên
mà CPU có chấp nhận ngắt hay không
+ Ngắt do lỗi khi thực hiện chương trình (ngoại lệ):
Ví dụ: chia chi 0, tràn số,
Lúc này máy chuyển sang chương trình con báo lỗi
1.4.2.2 Đáp ứng của CPU khi có yêu cầu ngắt.
Khi có yêu cầu ngắt kiểu N (N là số hiệu ngắt) đến CPU và nếu yêu cầu đóđược phép, CPU thực hiện các công việc sau:
1 Giảm giá trị con trỏ ngăn xếp đi 2 và nạp thanh ghi cờ vào mảng nhớ ngăn
xếp có địa chỉ trên
(* SP SP- 2, {SP} FR: Trong đó {SP} ô nhớ do SP chỉ ra * )
Tức là chỉ ra đỉnh mới của ngăn xếp và cất thanh ghi cờ vào đỉnh ngăn xếp
2 Xóa cờ ngắt và xóa cờ bẫy
(* IF 0, TF 0 * )
Tức là cấm các ngắt khác tác động vào CPU, cho CPU chạy ở chế độ bìnhthường
3 Giảm giá trị con trỏ ngăn xếp đi 2 và nạp (PUSH) nội dung của thanh ghi
đoạn mã (CS) hiện hành vào mảng nhớ ngăn xếp có địa chỉ trên
(* SP SP – 2, {SP} CS * )
Tức là chỉ ra đỉnh mới của ngăn xếp, cất địa chỉ đoạn của địa chỉ trở về vàođỉnh ngăn xếp
Trang 324 Giảm giá trị con trỏ ngăn xếp đi 2 và nạp (PUSH) nội dung của thanh ghi
con trỏ lệnh (IP) hiện hành vào mảng nhớ ngăn xếp có địa chỉ trên (để nhớnơi chương trình bị gián đoạn)
6 Tại cuối chương trình phục vụ ngắt, khi gặp lệnh IRET bộ vi xử lý 8086
quay trở lại chương trình chính tại địa chỉ trở về và với giá trị cũ của thanhghi cờ được lấy ra từ ngăn xếp:
- Lấy lại địa chỉ lệch của địa chỉ trở về từ đỉnh ngăn xếp
CTC
(Thân CTC)
CPU tự + Cất thanh ghi FR CTcPVN
+ Xóa IF và TF Lệnh cất các thanh ghi vì không + Cất CS và IP muốn bị thay đổi bởi CTc
+ Lấy địa chỉ chương
trình con phục vụ ngắt (Thân CTcPVN)
CPU tự + Lấy lại IP, CS
+ Lấy lại thanh ghi FR Lệnh lấy lại các thanh ghi đã cất
IRET
Trong thực tế các ngắt mềm INT N đã bao trùm các loại ngắt khác bởi Intel đãqui định 1 số kiểu ngắt đặc biệt được xếp vào đầu dãy ngắt mềm INT N nhưsau:
+ INT 0: Ngắt mềm do phép chia cho số 0 gây ra
+ INT 1: Ngắt mềm để chạy từng lệnh ứng với trường hợp cờ TF = 1
+ INT 2: Ngắt mềm do tín hiệu tích cực tại chân NMI gây ra
Trang 33+ INT 3: Ngắt mềm để đặt điểm dừng của chương trình tại 1 địa chỉ nào đó.+ INT 4: (hoặc lệnh INTO): ngắt mềm ứng với trường hợp cờ tràn OF = 1 Các kiểu ngắt khác còn lại thì được giành cho Intel và cho user (IBM khônghoàn toàn tuân thủ các qui định này khi chế tạo máy PC/XT và PC/AT)
+ INT 5 – INT 1FH: dành riêng cho Intel trong các bộ vi xử lý cao cấp khác.+ INT 20H- INT 0FFH: dành cho user
Các kiểu ngắt N trong INT N đều tương ứng các địa chỉ xác định củaCTcPVN mà ta có thể tra được trong bảng các véc tơ ngắt
03FEH – 03FFH CS của CTcPVN INT FFH03FCH – 03FDH IP của CTcPVN INT FFH
0082H – 0083H CS của CTcPVN INT 20H0080H – 0081H IP của CTcPVN INT 20H
000AH – 000BH CS của CTcPVN INT20008H – 0009H IP của CTcPVN INT20006H – 0007H CS của CTcPVN INT10004H – 0005H IP của CTcPVN INT 10002H – 0003H CS của CTcPVN INT00000H – 0001H IP của CTcPVN INT0(Xem phụ lục A: các ngắt của DOS và BIOS/ 320 sách Kỹ thuật VXL củaThầy Văn Thế Minh_ĐHBKHN)
Intel qui định bảng này nằm trong RAM bắt đầu từ địa chỉ 0000H đến địachỉ 0400H (dài 1 KB)
(Vì 8086 có 256 kiểu ngắt, mỗi kiểu ứng 1 véc tơ ngắt, 1 véc tơ ngắt cần 4byte để chứa địa chỉ đầy đủ cho SC:IP của CTcPVN:
4 x 256 = 1024 byte = 1 KB)
1.4.2.3 Xử lý ưu tiên ngắt.
Trong thực tế tại cùng 1 thời điểm có nhiều yêu cầu ngắt thuộc các loại ngắt khác nhau cùng đòi hỏi CPU phục vụ thì CPU xử lí các yêu cầu ngắt đó như thếnào? CPU phải có chính sách xử lí ngắt theo luật ưu tiên
- Các yêu cầu ngắt được sắp xếp theo 1 thứ tự ưu tiên với nguyên tắc: ngắt nào có mức ưu tiên cao nhất sẽ được CPU nhận biết và phục vụ trước
Ngay từ khi chế tạo (thường được gọi là ngầm định) CPU 8086 có khả năng phân biệt các mức ưu tiên khác nhau cho các loại ngắt (theo thứ tự từ cao xuống thấp như sau):
+ Ngắt nội bộ: INT 0 (phép chia 0) Cao nhất
INTN, INTO
Trang 34+ Ngắt không che được NMI
+ Ngắt che được INTR
Theo thứ tự ưu tiên ngầm định trong việc xử lý ngắt của CPU 8086 thì INT
0 có mức ưu tiên cao hơn INTR vì vậy đầu tiên CPU sẽ thực hiện chươngtrình con phục vụ ngắt INT 0 để đáp ứng với lỗi đặc biệt do phép chia cho 0gây ra và cờ IF bị xóa về 0 Yêu cầu ngắt INTR sẽ tự động bị cấm cho tớikhi chương trình con phục vụ ngắt INT 0 được hoàn tất và trở về nhờ lệnhIRET, cờ IF cũ được trả lại (IF = 1) Tiếp theo đó CPU sẽ đáp ứng yêu cầungắt INTR bằng cách thực hiện chương trình con phục vụ ngắt dành choINTR
Là trường hợp CPU trao quyền điều khiển hệ thống cho 1 mạch điều khiểnkhác và khi đó CPU thả nổi Bus (Mạch CPU ở trạng thái trở kháng cao vềmặt logic) CPU chỉ giữ lại một số BUS điều khiển cơ bản, để khi cần thìphát tín hiệu điều khiển lấy lại quyền sử dụng BUS
CÂU HỎI VÀ BÀI TẬP
1 Nêu chức năng của:
- Bộ vi xử lý
- Các loại BUS
2 Trình bày đặc điểm chức năng của các thanh ghi con trỏ và chỉ số trong vi xử lý8086
3 Trình bày đặc điểm, chức năng của các thanh ghi đoạn trong vi xử lý 8086
4 Trình bày đặc điểm, chức năng của các thanh ghi đa năng trong vi xử lý 8086
5 Trình bày đặc điểm, chức năng của thanh ghi cờ cùng các bít cờ
6 Giả sử các byte trong bộ nhớ có địa chỉ từ 0 đến 4 có nội dung như sau:
Trang 35a Cho biết nội dung của word (từ nhớ) ở địa chỉ 2
b Cho biết nội dung của word (từ nhớ) ở địa chỉ 3
c Cho biết nội dung của word (từ nhớ) mà byte cao của nó ở địa chỉ 2
d Cho biết giá trị của bit 7 của byte 2
e Cho biết giá trị của bit 4 của byte 2
f Cho biết giá trị của bit 4 của byte 3
g Cho biết giá trị của bit 11 của word 2
7 Sử dụng số liệu của bài 6, cho biết nội dung của:
a nibble thấp của byte 1
b nibble cao của byte 4
8 Giả sử một lệnh chuyển nội dung của thanh ghi AX vào một từ nhớ trong bộnhớ máy tính Những gì sẽ xảy ra trong chu kỳ:
- nhận lệnh
- thực hiện lệnh
9 Có 2 loại bộ nhớ ROM và RAM, cho biết loại bộ nhớ nào:
a Chứa chương trình của người sử dụng
b Chứa chương trình để khởi động máy
c Có thể thay đổi bởi người sử dụng
d Giữ được dữ liệu kể cả khi đã tắt máy
10 Đổi các số nhị phân và số hex sau ra số thập phân:
a 1110b
b 100100111110b
c 46Ah
d FEA7Dh
11 Đổi các số thập phân sau ra số nhị phân và hex: 97, 629, 973, 1026
12 Đổi các số nhị phân sau ra các số hệ10 và hex:
Trang 3618 Đổi số -120 ra số nhị phân 16 bit và số nhị phân 8 bit.
19 Cho biết các số thập phân sau, có thể lưu được hay không trong (a) như một số
16 bit; (b) như một số 8 bit
23 Giả sử một byte có mã ASCII của một chữ hoa, hỏi phải cộng thêm một số hex
là bao nhiêu để đổi nó thành chữ thường
24 Giả sử một byte có mã ASCII của một chữ số thập phân từ 0 đến 9, hỏi phải trừ
đi một số hex là bao nhiêu để đổi nó thành chứa chính chữ số đó
25 Trình bày những điểm khác nhau giữa thanh ghi và ô nhớ
25 Hãy xác định địa chỉ vật lý của ô nhớ có địa chỉ logic 0A51h:ADBFh
26 Hãy chỉ ra 5 cặp địa chỉ logic của ô nhớ có địa chỉ vật lý A7627h
27 Hãy giải thích tại sao với vi xử lý 8086, độ dài một đoạn nhớ không quá 64 KB
Ch¬ng 2.TỔNG QUAN VỀ HỢP NGỮ
2.1 Giới thiệu hợp ngữ
Cũng như các ngôn ngữ lâp trình khác, để học hợp ngữ, trước tiên ta phải học
cú pháp, cách khai báo biến, các lệnh số học và dịch chuyển cơ bản và cuốicùng phải nắm được cách tổ chức trương trình
Trong chương trình hợp ngữ bao gồm mã lệnh, số hiệu và ngăn xếp giống nhưchương trình mã máy Việc thực hiện các thao tác vào/ ra trong hợp ngữ khókhăn hơn nhiều so với các ngôn ngữ bậc cao bởi vì các lệnh của hợp ngữ quá
Trang 37cơ bản và gần với ngôn ngữ máy Tuy nhiên chúng ta có thể sử dụng các hàmcủa DOS cho các thao tác vào ra vì chúng khá rõ ràng và đủ nhanh cho hầu hếtcác yêu cầu ứng dụng.
Một chương trình hợp ngữ để có thể thực hiện được thì vẫn phải chuyển sangdạng mã máy
Để có thể soạn thảo 1 chương trình hợp ngữ và dịch sang dạng mã máy cần:
1 text editor (y/c chuẩn ASCII) (of DOS or NC or WINDOWS)
Masm.exe/ Tasm.exe (chương assemble): là chương trình chạy trên máy PC Đây
là công cụ Assemple để kiểm tra cú pháp và dịch
Link.exe : dùng để liên kết các modull chương trình “*.obj” thành 1 file duy nhất
có dạng “*.exe”
Có thể cần tới file exe2bin.exe để đổi file “*.exe” thành file “*.com” hoặc cần
“Tlink/t”
Các file khi dịch ra đều có dạng “*.exe” nếu có thể đổi sang file “* Com” thì
có thể nó sẽ không chạy được ở file “*.exe”, do đó phảI đổi sang dạng “*.com”Ngoài ra nếu có các công cụ sau càng tốt:
codeview.exe (dùng để debug 1 cách logic 1 file)
lip.exe (tạo ra 1 hệ thống thư viện)
2.2 Cú pháp dòng lệnh trong chương trình hợp ngữ:
Các chương trình hợp ngữ được dịch ra các lệnh mã máy bằng một chươngtrình biên dịch vì vậy chúng cần được viết ra sao cho phù hợp với các khuônmẫu của trình biên dịch đó
Ở đây chúng ta sẽ sử dụng trình biên dịch MICROSOFT MACROASSEMBLER (MASM) hoặc TURBO ASSEMBLER (TASM) Mã lệnh hợpngữ nói chung không phân biệt chữ hoa hay chữ thường Chúng ta thống nhất sửdụng chữ hoa để phân biệt mã lệnh với phần còn lại của chương trình
Một chương trình hợp ngữ bao gồm nhiều dòng lệnh, mỗi dòng lệnh viết ở 1dòng Có 2 dạng:
Lệnh thật: dưới dạng ký hiệu (Symbolic), đôi khi còn gọi là dạng gợi nhớ(mnemonic) của bộ VXL
Hoặc là 1 hướng dẫn cho chương trình dịch (assembler directive), lệnh thật sẽ đượcdịch ra mã máy
Hướng dẫn chương trình dịch không được dịch ra mã máy, nó có tác dụngchỉ dẫn riêng cho chương trình dịch thực hiện công việc
Một dòng lệnh có thể có các trường sau (không nhất thiết phải có đủ tất cả cáctrường):
Tên mã lệnh các toán hạng chú giải
Trang 38Tên và nhãn có thể có độ dài từ 1->31 ký tự, không được chứa dấu cách và khôngđược bắt đầu bằng một con số.
Có thể dùng một số ký tự đặc biệt trong tên, nhãn, đó là: ?, , @._,$,% Nếu là dấu
“.” được dùng thì bắt buộc phải ở vị trí đầu tiên của tên hoặc nhãn
Một nhãn thường kết thúc bằng dấu (“:”)nói chung nên đặt tên bình thường, có ýnghĩa gợi nhớ là tốt nhất
Ví dụ trên trường tên là nhãn “S1”
Trường mã lệnh:
Trong trường mã lệnh nói chung sẽ có 2 dạng:
Lệnh thật: Chứa các mã lệnh gợi nhớ, mã lệnh gợi nhớ, mã lệnh này sẽ được định ra mã máy ở ví dụ trên là MOV
Hướng dẫn chương trình dịch: Chứa các lệnh giả và không được dịch ra
mã máy
Trường toán hạng:
Với lệnh thật: Chứa các toán hạng của lệnh, số toán hạng có thể có
là 0, 1 hoặc 2 toán hạng trong 1 một lệnh
Nếu là 1 toán hạng: Có thể là toán hạng đích hoặc toán hạng gốc
Nếu là 2 toán hạng: gồm có toán hạng đích và toán hạng gốc
Ví dụ 1 ở trên gồm 2 toán hạng là CX và 5
Trong đó: CX – toán hạng đích
5 – toán hạng gốcToán hạng đích: có thể là 1 thanh ghi hoặc 1 ô nhớ là nơi chứa kết quả.Toán hạng nguồn: cũng có thể là 1 thanh ghi hoặc 1 ô nhớ, các chỉ thị thường không làm thay đổi toán hạng nguồn
Ví dụ 2: NOP ; không có toán hạng, dây là lệnh không làm gì cả
INC AX ; 1 toán hạng, đây là lệnh tăng AX lên 1ADD X1, 2 ;2 toán hạng, đây là lệnh cộng 2 vào ô nhớ X1Trường giải thích:
Để cho người lập trình ghi chú lệnh đó để làm gì, mở đầu trường này làdấu “;” Trình biên dịch bỏ qua không dịch từ sau dấu “;” này của dònglệnh Lời giải thích ghi chú có thể có hoặc không có
Xong đây là ngôn ngữ bậc thấp, ta khó có thể hiểu được một chương trìnhviết bằng hợp ngữ khi không có lời bình Trong thực tế điền các lời giảithích vào hầu hết các dòng lệnh là một phương pháp học lập trình tốt
Dạng số Hex (hệ 16) 0BBAh, 1EF1h, 1EACh
Kí tự, chuỗi kí tự: ‘A’, “A”, “abc”, ‘abc’
Tóm lại:
Trang 39Số cho ở hệ nào phải được kèm đuôi của hệ đó như đã học ở tin học căn bản Số hệ
10 có thể không cần vì đây là trường hợp ngầm định của Assembler
Số Hex bắt buộc phải bắt đầu bằng một chữ số thập phân đứng trước, nếu bắt đầu
bằng các chữ a, ,f hoặc A, ,F thì phải thêm số 0 ở đầu
Kí tự và chuỗi kí tự phải được đặt trong cặp nháy đơn hoặc cặp nháy kép Các kí tự
sẽ được trình biên dịch dịch ra mã ASCII của chúng
Biến trong chương trình hợp ngữ có vai trò như nó có ở ngôn ngữ bậc cao Mỗibiến phải được gán 1 kiểu dữ liệu và được chương trình dịch gán cho 1 địa chỉnhất định trong bộ nhớ
Để định nghĩa các kiểu dữ liệu khác nhau ta thường dùng các lệnh giả sau (cáctoán tử giả định nghĩa số liệu)
DB (define byte) : định nghĩa biến kiểu byte
DW (define word) : định nghĩa biến kiểu từ (word- 2byte)
DD (define double word) : định nghĩa biến kiểu từ kép (4 byte)
a Các biến kiểu byte:
Biến kiểu byte chiếm 1 byte trong bộ nhớ
Hướng dẫn chương trình dịch để định nghĩa biến kiểu byte có dạng tổng quátsau:
W1 DW 50 ;biến kiểu từ W1 dành 2 byte trong bộ nhớ
W2 DW ? ;biến kiểu từ W2 dành 2 byte trong bộ nhớ
c Biến kiểu từ kép:
Trang 40(đọc tài liệu phần: 18.1 các số có độ chính xác kép - chương 18 các phép tính
số học nâng cao - giáo trình: lập trình hợp ngữ (assembler) & máy tính IBM –PC)
Hướng dẫn chương trình dịch để định nghĩa biến kiểu từ kép có dạng sau:
Tên DD giá_trị_khởi_đầu.
Ví dụ:
X1 DD 50 ;biến kiểu từ kép X1 dành 4 byte trong bộ nhớ
X2 DD ? ;biến kiểu từ kép X2 dành 4 byte trong bộ nhớ
phần tử thứ nhất trong mảng có giá trị là 7, có địa chỉ tại địa chỉ R1
phần tử thứ 2 trong mảng có giá trị là 8, có địa chỉ tại địa chỉ R1+1
Khi muốn khởi đầu các phần tử của mảng với cùng 1 giá trị chúng ta có thể dùngthêm toán tử DUP trong lệnh
Đối với bộ VXL của Intel: nếu ta có 1 từ (Word) để trong bộ nhớ thì:
byte thấp của nó được để trong ô nhớ có địa chỉ thấp
byte cao của nó được để trong ô nhớ có địa chỉ cao
cách lưu giữ số liệu kiểu này thường gọi là “qui ước đầu bé”
Đối với bộ VXL của Motorola: cách cất số liệu theo thứ tự ngược lại hay còn gọi là
“qui ước đầu to”
Ví dụ:
Sau khi định nghĩa biến kiểu từ có tên W1 như sau
w1 DW 0FFEEh
thì byte thấp là EEh được để tại ô nhớ có địa chỉ tại địa chỉ của w1
byte cao là FFH sẽ được để ở địa chỉ tiếp theo tức tại địa chỉ = (địa chỉ của w1+1)
d Biến kiểu xâu ký tự: