Giáo trình: Lập trình hợp ngữ

Chia sẻ: An Thiem | Ngày: | Loại File: DOC | Số trang:173

0
108
lượt xem
40
download

Giáo trình: Lập trình hợp ngữ

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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 hai phần phần cứng và phần mềm

Chủ đề:
Lưu

Nội dung Text: Giáo trình: Lập trình hợp ngữ

  1. GV. Vương Quốc Dũng 1 ------ Giáo trình Lập trình hợp ngữ 1
  2. GV. Vương Quốc Dũng Ch¬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 1.1.1. Giới thiệu chung về máy tính: * 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: . Desktop: Máy để bàn. . WorkStation: Máy trạm làm việc. Đầu tiên khái niệm này xuất hiện với máy mạng, xong ngày nay đây là loại máy PC có cấu hình mạnh. Hai loại trên có đặc điểm chung là đặt cố định. . NoteBook: Cỡ bỏ vừa cặp sách. . Parmitop: Cỡ bé cầm tay. + Máy tính lớn: Ra đời sớm hơn máy vi tính, hiện nay vẫn tồn t ại và phát tri ển, xong không nhiều vì đắt tiền và đã có mạng máy tính. Mạng máy tính thay cho máy tính lớn hiệu quả hơn. Đặ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. Biểu diễn thông tin 1.1.2.1.1. Các số nhị phân (số hệ hai) Trong 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ữ 2
  3. GV. Vương Quốc Dũng 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.1.2. Biểu diển dữ liệu 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ứ tự đếm 1, 2, 3 … ở hệ 10 thì ở hệ hai ta có 1, 10, 11, … 3 0 nibble 7 0 Byte 15 0 Word 31 0 Double Word Hình 1.1. Các đơn vị đo độ dài của số hệ hai dẫn xuất từ bit Hệ đếm thập lục phân 3
  4. GV. Vương Quốc Dũng Nế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 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, mi là giá trị của chữ số có chỉ số vị trí i trong P (0 < mi < 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 = ak-1 x mk-1 + ak-2 x mk-2 + … + a1 x m1 + m0 + 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ị 2 i 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. Ví dụ: 10111.11b = 24 + 22 + 21 + 1 + 2-1 + 2-2 = 25.75 Đổi số hệ 16 sang hệ 10 Tương tự như số hệ 2 sang hệ 10. Ta xét ví dụ sau: 1AF7h = 1 * 163 + 10 x 162 + 15 * 161 + 7 = 6903 Ta lưu ý các chữ số là chữ cái trong số hệ 16 có các giá trị tương ứng như sau: A 10 B 11 C 12 D 13 E 14 F 15 Đổi số hệ 10 về hệ 2 4
  5. GV. Vương Quốc Dũng Cá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ô 2 i 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. = 1 khi số dư ≥ 2i = 0 khi số dư ≤ 2i Ví dụ đổi 34 sang số hệ 2: - Các giá trị 2i cần tính đến (25 = 32 là giá trị 2x sát dưới nhất so với 34): 25 24 23 22 21 20 - Các chữ số hệ hai tính được: 1 0 0 0 1 0 Như vậy 34 = 100010b Cách 2: Lấy số cần đổi chia cho 2 và ghi nhớ phần dư, tiếp theo lấy thương của phép chia vừa nhận được chia cho 2 và ghi nhớ phần dư. Cứ như vậy cho đ ến khi thương bằ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: 34 2 0 17 2 1 8 2 0 4 2 0 2 2 0 1 2 1 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). 5
  6. GV. Vương Quốc Dũng 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. Ví 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.1.3. Các phép toán số học với số hệ hai Phép cộng Phép cộng các số hệ hai giống như khi ta thực hiện với số hệ mười. Quy tắc phép cộng số hệ 2 được chỉ ra trong bảng 1.1. Bảng 1.1. y=a+b A b y Nhớ 0 0 0 0 0 1 1 0 1 0 1 0 6
  7. GV. Vương Quốc Dũng 1 1 0 1 Bảng 1.2. Mở rộng bảng 1.1, y = a + b + c + d + e + f + g a b c d e f g y Nhớ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 1 … 0 0 0 1 1 1 1 0 2 0 0 1 1 1 1 1 1 2 1 0 1 1 1 1 1 0 3 1 1 1 1 1 1 1 1 3 Nhận xét: theo bảng 1.2 ta thấy kết quả tổng chia cho 2 (cơ số hệ đ ếm nhị phân) là giá trị cần nhớ, còn phần dư chính là y. Như vậy cách thực hiện không khác gì với số hệ mười, ví dụ ta cộng nhiều số thập phân được giá trị là 49, ta lấy 49 chia cho 10 (cơ số hệ đếm thập phân), được 4 dư 9, viết 9 và nhớ 4. Giá trị nhớ sẽ được dùng để cộng với cột bit ở vị trí tiếp theo. Bả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. Phép trừ Phép trừ các số hệ 2 giống như làm với số hệ 10. Bảng 1.3 là qui tắc thực hiện phép trừ số nhị phân. Bảng 1.3. Qui tắc trừ số nhị phân y = a - b a b y Mượn 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 0 Số bù 2 Trong thực tế, việc thực hiện phép trừ chính là cộng số bị trừ với số đảo dấu của số trừ, điều này cũng được ứng dụng trong các khối tính toán số học của máy tính đ ể tận dụng các bộ cộng đã có sẵn. Vậy số đảo dấu của số trừ chính là một số âm. Khi th ực 7
  8. GV. Vương Quốc Dũng hiện phép trừ trong máy tính cũng tất yếu sẽ có kết quả là một số âm. Vấn đề đặt ra đối với số 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 việ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 Số hệ mười tính đương theo số bù 2 0000 0000 0 0 0000 0001 1 +1 0000 0010 2 +2 … … … 0111 1101 125 +125 0111 1110 126 +126 0111 1111 127 +127 1000 0000 128 -128 1000 0001 129 -127 1000 0010 130 -126 … … … 1111 1101 253 -3 1111 1110 254 -2 1111 1111 255 -1 Phép nhân Phép nhân số hệ hai thực hiện giống như ta làm với số hệ mười. Chỉ cần chú ý khi cộng kết quả tuân thủ theo bảng 1.2. qui tắc cộng mở rộng. 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 a b y 8
  9. GV. Vương Quốc Dũng 0 0 0 0 1 0 1 0 0 1 1 1 Trên cơ sở quy tắc vừa nêu và để đơn giản ta thực hiện ví dụ một phép nhân 2 số hệ 2 với độ dài 4 bit để làm sáng tỏ thuật toán nhân thực hiện trong máy tính. 1001 Số bị nhân = 9 x 0110 Số nhân = 6 0000 Thành phần 1 của tổng tích lũy 1001 Thành phần 2 của tổng tích lũy 1001 Thành phần 3 của tổng tích lũy 0000 Thành phần 4 của tổng tích lũy 0110110 Tổng tích lũy bằng 54 Độ dài cực đại của kết quả trong trường hợp này là 8 bit. Nếu ta nhân các số 8 bit (hoặc 16) bit thì độ dài cực đại của kết quả là 16 bit (hoặc 32 bit). Mỗi lần nhân một bit khác 0 của số nhân với số bị nhân, ta thu được chính số bị nhân, nếu dịch trái nó một số lần tương ứng với cị trí các bit khác 0, ta tạo ra 1 thành phần của tổng tích lũy. Tổng của các thành phần như trên là kết quả của phép nhân. Phâ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) - Tổng của các thành phần là tích cần tìm. Để minh họa thuật toán trên, ta dùng luôn nó để rút gọn ví dụ đã làm ở trên: 1001 Số bị nhân = 9 x 0110 Số nhân = 6 1001 Số bị nhân dịch trái 1 lần 1001 Số bị nhân dịch trái 2 lần 0110110 Tổng tích lũy bằng 54 Trong máy tính, phép nhân được thực hiện bởi bộ cộng và bộ dịch trái theo như thuật toán cộng và dịch vừa trình bày. 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 9
  10. GV. Vương Quốc Dũ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ể: Ví dụ: 35/7 = 7 Ta hãy quan sát kỹ các bước phải thực hiện khi thực hiện phép chia bằng tay 100011 101 000 0111 1000 101 0111 101 0101 101 000 Trong các phép tính ở trên ta liên tục cần phải dự đoán và kiểm tra để tìm ra kết quả đúng. Công việc này rất khó khăn với các mạch điện tử của khối tính toán số học (vốn là các phần tử để thực hiện phép cộng và dịch trong máy tính). Trong máy tính: - Nếu số chia là 1 byte, thì số bị chia phải là 2 byte, do vậy khi số bị chia là 1 byte ta phải mở rộng bit dấu cho số bị chia lên 8 bit cao. - Nếu số chia là 2 byte, thì số bị chia phải là 4 byte, do vậy s ố b ị chia là 1 word ta phải mở rộng bit dấu cho số bị chia lên 16 bit cao. Sau đâ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 3. H = Q + K. - Nếu H có MSB = 0 (có nghĩa là phần này của số bị chia chia được cho số chia) thì bit tương ứng của thương bằng 1. Q = H - Nếu kết quả này có MSB = 1 (có nghĩa là phần này của số bị chia không chia được cho số chia) thì bit tương ứng của thương bằng 0. 4. Số K = số K dịch phải đi 1 bit, và làm lại bước 3 cho đ ến khi nh ận đ ược H = 0 (chia hết) hoặc H số chia (chia còn dư). 5. Kết quả của thương số là các bit 0, 1 ghép theo trình tự các bit t ương ứng c ủa thương. Ví dụ: 103/6 = 17 dư 1. Thực hiện phép chia này ở hệ 2 theo thuật trên. Ta có: Số chia = 00000110b Số bù 2 của số chia = 11111010b 10
  11. GV. Vương Quốc Dũng Số bị chia = 01100111b = 0000000001100111b (mở rộng bit dấu) Thuật toán chia số nhị phân số 103/6: Tên toán hạng, thao tác Giá trị Thương Q = Số bị chia 0000000001100111 K = Số bù 2 của số chia > 1 bit (giữ nguyên bit dấu) 1111110100000000 H=Q+K 1111110111100111 0 Q 0000000001100111 K = K >> 1 bit (giữ nguyên bit dấu) 1111111010000000 H=Q+K 1111111011100111 0 Q 0000000001100111 K = K >> 1 bit (giữ nguyên bit dấu) 1111111101000000 H=Q+K 1111111110100111 0 Q 0000000001100111 K = K >> 1 bit (giữ nguyên bit dấu) 1111111110100000 H=Q+K>6 0000000000000111 1 Q=H 0000000000000111 K = K >> 1 bit (giữ nguyên bit dấu) 1111111111010000 H=Q+K 1111111111010111 0 Q 0000000000000111 K = K >> 1 bit (giữ nguyên bit dấu) 1111111111101000 H=Q+K 1111111111101011 0 Q 0000000000000111 K = K >> 1 bit (giữ nguyên bit dấu) 1111111111110100 H=Q+K 1111111111111011 0 Q 0000000000000111 K = K >> 1 bit (giữ nguyên bit dấu) 1111111111111010 H=Q+K
  12. GV. Vương Quốc Dũng 1.1.2.1.4. Biểu diễn số trong máy tính 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. 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: - Dạng bình thường: 3.14, 3.0, -24.1234567, - 0.0002 Việc dùng dấu chấm trong cách viết số thực là cách viết của các nước Anh, Mỹ. - Dạng viết có phần mũ. Để hiện thị được ra màn hình một số thực dạng bình thường hay dạng viết dấu phảy động, phải thông qua giả lập bằng phần mềm. Các dạng số dấu chấm độ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 12
  13. GV. Vương Quốc Dũng 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 FOR i = 1 to m DO Begin Y=X*2 X = phần thập phân của Y Bi = Phần nguyên của Y End; Cá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ố
  14. GV. Vương Quốc Dũng Hình 1.1. Biểu diễn số dấu chấm (phảy) động 32 bit trong máy tính Ví 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 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 2 7 = 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). 14
  15. GV. Vương Quốc Dũng Bảng 2.6. Bảng mã ASCII với 128 ký tự đầu. Hexa- 0 1 2 3 4 5 6 7 decimal 0 0 @ P ` p 0 16 32 48 64 80 96 112 1 ! 1 A Q a q 1 17 33 49 65 81 97 113 2 “ 2 B R b r 2 18 34 50 66 82 98 114 ♥ 3 # 3 C S c s 3 19 35 51 67 83 99 115 4 ♦ $ 4 D T d t 4 20 36 52 68 84 100 116 ♣ 5 21 % 5 E U e u 5 37 53 69 85 101 117 6 ♠ & 6 F V f v 6 22 38 54 70 86 102 118 7 23 ‘ 7 G W g w 7 39 55 71 87 103 119 8 ( 8 H X h x 8 24 40 56 72 88 104 120 9 ) 9 I Y i y 9 25 41 57 73 89 105 121 A 26 * : J Z j z 15
  16. GV. Vương Quốc Dũng 10 42 58 74 90 106 122 B + ; K [ k { 11 27 43 59 75 91 107 123 C , < L \ l | 12 28 44 60 76 92 108 124 D 29 - = M ] Mm } 13 45 61 77 93 109 125 E 30 . > N ^ n ~ 14 46 62 78 94 110 126 F 31 / ? O _ o 15 47 63 79 95 111 127 Bảng 2.7. Bảng mã ASCII với 128 ký tự nửa sau. Hexa- 8 9 A B C D E F decimal 0 Ç É á α ≡ 128 144 160 176 192 208 224 112 1 ü æ í β ± 129 145 161 177 193 209 225 241 2 é Æ ó γ ≥ 130 146 162 178 194 210 226 242 3 â ô ú π ≤ 131 147 163 179 195 211 227 243 4 ä ö Ñ ∑ ⌠ 132 148 164 180 196 212 228 244 5 à ò Ñ σ ⌡ 133 149 165 181 197 213 229 245 6 å Û ª µ ÷ 134 150 166 182 198 214 230 246 7 ç ù º τ ≈ 135 151 167 183 199 215 231 247 8 ê Ÿ ¿ Φ • 136 152 168 184 200 216 232 248 9 ë Ö θ ⋅ 16
  17. GV. Vương Quốc Dũng 137 153 169 185 201 217 233 249 A è Ü ¬ Ω − 138 154 170 186 202 218 234 250 B ï ¢ ½ δ √ 139 155 171 187 203 219 235 251 C î £ ¼ ∞ ∧ 140 156 172 188 204 220 236 252 D ì ¥ i φ ² 141 157 173 189 205 221 237 253 E Ä « ∈ ■ 142 158 174 190 206 222 238 254 F Ă ƒ » ∩ 255 143 159 175 191 207 223 239 Vì mỗi ký tự ASCII được mã hóa bằng 7 bit nên mã của một ký tự chứa vừa vặn trong một byte với MSB = 0. Các ký tự in được có thể hiển thị ra màn hình hoặc ra máy in, trong khi đó các ký tự điều khiển lại dùng để điều khiển các thiết bị này. Ví d ụ đ ể hiển thị ký 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.1.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. 17
  18. GV. Vương Quốc Dũng Dạng mã hoá mặc định của chuẩn Unicode là 16-bit: các kí tự được gán một giá trị 16-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ự 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ế). 1.1.3. Sơ đồ khối cấu trúc của IBM-PC. Gồm 5 thành phần cơ bản: Bộ xử lý (Processor). Hệ thống nhớ (Memory). Hệ thống vào ra (I/O System). Bus liên kết hệ thống. Chương trình. Sơ đồ khối chung: CPU Bộ nhớ chính Bus liên kết hệ thống Hệ thống vào ra (Bàn phím , màn hình, ổ đĩa, chuột, ... và các mạch ghép nối) 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ện chương trình, nó trao đổi dữ liệu với bộ nhớ và các thiết bị vào ra. 18
  19. GV. Vương Quốc Dũng Các thành phần cơ bản: Đơn vị điều khiển (Control Unit): điều khiển hoạt động của CPU và các thành phần khác của máy tính. Đơn vị số học và logic (Arithmetic & Logic Unit - ALU): th ực hi ện các ch ức năng xử lý dữ liệu. Các thanh ghi: Là các ngăn nhớ đặc biệt nằm trong CPU để ch ứa các thông tin tạm thời phục vụ cho quá trình thực hiện chương trình. Bus bên trong: Dùng để kết nối và trao đổi thông tin giữa các thành ph ần v ới nhau. Hệ thống nhớ: 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ớ. Hệ thống vào ra: Chức năng: Dùng để trao đổi thông tin giưa máy tính với thế giới bên ngoài. Các thành phần: Các thiết bị ngoại vi (các thiết bị vào ra): làm nhiệm vụ chuy ển đ ổi thông tin ở dạng vật lý nào đó về dạng dữ liệu phù hợp với máy tính. Các mạch ghép nối vào ra: Các thiết bị ngoại vi không được nối ghép trực tiếp với CPU mà phải thông qua các mạch ghép nối vào ra. Trong các m ạch ghép n ối vào ra có các cổng vào ra và được đánh địa chỉ xác định. Các thiết bị vào ra được ghép nối thông qua cổng. Bus liên kết hệ thống: * Định nghĩa Bus: Là tập hợp các đường dây để vận chuyển thông tin (các Bit) t ừ ph ần m ạch này đến các phần mạch khác trong phạm vi máy tí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) 19
  20. GV. Vương Quốc Dũng Tập các đường dây vận chuyển thông tin đồng thời được gọi là độ rộng của Bus (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 dữ liệu. - Bus điều khiển Chỉ có Bus địa chỉ và Bus dữ liệu mới có khái niệm độ rộng. Bus địa chỉ CP Bộ Mạch Các U nhớ ghép nối thiết bị chính vào ra vào ra Bus dữ liệu Bus điều khiển Lý do tồn tại của các loại Bus: - Bus địa chỉ: . CPU muốn trao đổi dữ liệu với ngăn nh ớ nào, với cổng vào ra nào thì cần phải có Bus địa chỉ. . Bus địa chỉ vận chuyển địa chỉ từ CPU đến bộ nhớ hay c ổng vào ra đ ể xác định ngăn nhớ nào hay cổng vào ra nào cần trao đổi thông tin. . Bus địa chỉ nói tổng quát gồm n đường dây A 0 ÷ 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ý n n tối đa 2 địa chỉ ngăn nhớ hay 2 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. 20
Đồng bộ tài khoản