Kiến trúc máy tính và hợp ngữ - Biểu diễn số nguyên

First in, first out Political clout of project inventor Squeaky wheel getting the grease Any other method that does not involve a deliberate course of action analysis

pdf45 trang | Chia sẻ: huyhoang44 | Lượt xem: 749 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Kiến trúc máy tính và hợp ngữ - Biểu diễn số nguyên, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Môn học: Kiến trúc máy tính & Hợp ngữ 1 • Tổng quát số nguyên có n chữ số thuộc hệ cơ số q bất kỳ được biểu diễn: (mỗi chữ số xi lấy từ tập X có q phần tử) • Ví dụ: – Hệ cơ số 10: A = 123 = 100 + 20 + 3 = 1.102 + 2.101 + 3.100 – q = 2, X = {0, 1}: hệ nhị phân (binary) – q = 8, X = {0, 1, 2,, 7}: hệ bát phân (octal) – q = 10, X = {0, 1, 2,, 9}: hệ thập phân (decimal) – q = 16, X = {0, 1, 2,,9, A, B,, F}: hệ thập lục phân (hexadecimal) • Chuyển đổi: A = 123 d = 01111011 b = 173 o = 7B h • Hệ cơ số thường được biển diễn trong máy tính là hệ cơ số 2 2 0 0 1 1 1 1011 ......... qxqxqxxxx n nn    • Đặc điểm – Con người sử dụng hệ thập phân – Máy tính sử dụng hệ nhị phân, bát phân, thập lục phân • Nhu cầu – Chuyển đổi qua lại giữa các hệ đếm ? • Hệ khác sang hệ thập phân (...  dec) • Hệ thập phân sang hệ khác (dec  ...) • Hệ nhị phân sang hệ khác và ngược lại (bin  ) • 3 • Lấy số cơ số 10 chia cho 2 – Số dư đưa vào kết quả – Số nguyên đem chia tiếp cho 2 – Quá trình lặp lại cho đến khi số nguyên = 0 • Ví dụ: A = 123 – 123 : 2 = 61 dư 1 – 61 : 2 = 30 dư 1 – 30 : 2 = 15 dư 0 – 15 : 2 = 7 dư 1 – 7 : 2 = 3 dư 1 – 3 : 2 = 1 dư 1 – 1 : 2 = 0 dư 1 4 Kết quả: 1111011, vì 123 là số dương, thêm 1 bit hiển dấu vào đầu là 0 vào  Kết quả cuối cùng: 01111011 • Lấy số cơ số 10 chia cho 16 – Số dư đưa vào kết quả – Số nguyên đem chia tiếp cho 16 – Quá trình lặp lại cho đến khi số nguyên = 0 • Ví dụ: A = 123 – 123 : 16 = 7 dư 12 (B) – 7 : 16 = 0 dư 7 5  Kết quả cuối cùng: 7B • Khai triển biểu diễn và tính giá trị biểu thức • Ví dụ: – 10112 = 1.2 3 + 0.22 + 1.21 + 1.20 = 1110 6 0 0 1 1 1 1011 2.2....2.... xxxxxx n nn    • Nhóm từng bộ 4 bit trong biểu diễn nhị phân rồi chuyển sang ký số tương ứng trong hệ thập lục phân (0000  0,, 1111  F) • Ví dụ – 10010112 = 0100 1011 = 4B16 7 HEX BIN HEX BIN HEX BIN HEX BIN 0 0000 4 0100 8 1000 C` 1100 1 0001 5 0101 9 1001 D 1101 2 0010 6 0110 A 1010 E 1110 3 0011 7 0111 B 1011 F 1111 • Sử dụng bảng dưới đây để chuyển đổi: • Ví dụ: – 4B16 = 10010112 8 HEX BIN HEX BIN HEX BIN HEX BIN 0 0000 4 0100 8 1000 C` 1100 1 0001 5 0101 9 1001 D 1101 2 0010 6 0110 A 1010 E 1110 3 0011 7 0111 B 1011 F 1111 • Khai triển biểu diễn và tính giá trị biểu thức • Ví dụ: – 7B16 = 7.16 1 + 12 (B).160 = 12310 9 0 0 1 1 1 1011 16.16....16.... xxxxxx n nn    • Được dùng nhiều trong máy tính để biểu diện các giá trị lưu trong các thanh ghi hoặc trong các ô nhớ. Thanh ghi hoặc ô nhớ có kích thước 1 byte (8 bit) hoặc 1 word (16 bit). • n được gọi là chiều dài bit của số đó • Bit trái nhất xn-1 là bit có giá trị (nặng) nhất MSB (Most Significant Bit) • Bit phải nhất x0 là bit ít giá trị (nhẹ) nhất LSB (Less Significant Bit) 10 0 0 1 1 1 1011 2.2....2.... xxxxxx n nn    • Số nhị phân có thể dùng để biểu diễn bất kỳ việc gì mà bạn muốn! • Một số ví dụ: – Giá trị logic: 0  False; 1  True – Ký tự: • 26 ký tự (A  Z): 5 bits (25 = 32) • Tính cả trường hợp viết hoa/thường + ký tự lạ  7 bits (ASCII) • Tất cả các ký tự ngôn ngữ trên thế giới  8, 16, 32 bits (Unicode) – Màu sắc: Red (00), Green (01), Blue (11) – Vị trí / Địa chỉ: (0, 0, 1) – Bộ nhớ: N bits  Lưu được tối đa 2N đối tượng 11 • Đặc điểm – Biểu diễn các đại lương luôn dương • Ví dụ: chiều cao, cân nặng, mã ASCII – Tất cả bit đều được sử dụng để biểu diễn giá trị (không quan tâm đến dấu âm, dương) – Số nguyên không dấu 1 byte lớn nhất là 1111 11112 = 2 8 – 1 = 25510 – Số nguyên không dấu 1 word lớn nhất là 1111 1111 1111 11112 = 216 – 1 = 6553510 – Tùy nhu cầu có thể sử dụng số 2, 3 word. – LSB = 1 thì số đó là số đó là số lẻ 12  Lưu các số dương hoặc âm (số có dấu) • Có 4 cách phổ biến: – [1] Dấu lượng – [2] Bù 1 – [3] Bù 2 – [4] Số quá (thừa) K  Số có dấu trong máy tính được biểu diễn ở dạng số bù 2 13 • Bit trái nhất (MSB): bit đánh dấu âm / dương – 0: số dương – 1: số âm • Các bit còn lại: biểu diễn độ lớn của số (hay giá trị tuyệt đối của số) • Ví dụ: – Một byte 8 bit: sẽ có 7 bit (trừ đi bit dấu) dùng để biểu diễn giá trị tuyệt đối cho các số có giá trị từ 0000000 (010) đến 1111111 (12710)  Ta có thể biểu diễn các số từ −12710 đến +12710 – -N và N chỉ khác giá trị bit MSB (bit dấu), phần độ lớn (giá trị tuyệt đối) hoàn toàn giống nhau 14 • Tương tự như phương pháp [1], bit MSB dùng làm bit dấu – 0: Số dương – 1: Số âm • Các bit còn lại (*) dùng làm độ lớn • Số âm: Thực hiện phép đảo bit tất cả các bit của (*) • Ví dụ: – Dạng bù 1 của 00101011 (43) là 11010100 (−43) – Một byte 8 bit: biểu diễn từ −12710 đến +12710 – Bù 1 có hai dạng biểu diễn cho số 0, bao gồm: 00000000 (+0) và 11111111 (−0) (mẫu 8 bit, giống phương pháp [1]) – Khi thực hiện phép cộng, cũng thực hiện theo quy tắc cộng nhị phân thông thường, tuy nhiên, nếu còn phát sinh bit nhớ thì phải tiếp tục cộng 15 • Biểu diễn giống như số bù 1 + ta phải cộng thêm số 1 vào kết quả (dạng nhị phân) • Số bù 2 ra đời khi người ta gặp vấn đề với hai phương pháp dấu lượng [1] và bù 1 [2], đó là: – Có hai cách biểu diễn cho số 0 (+0 và -0)  không đồng nhất – Bit nhớ phát sinh sau khi đã thực hiện phép tính phải được cộng tiếp vào kết quả  dễ gây nhầm lẫn  Phương pháp số bù 2 khắc phục hoàn toàn 2 vấn đề đó • Ví dụ: – Một byte 8 bit: biểu diễn từ −12810 đến +12710 (được lợi 1 số vì chỉ có 1 cách biểu diễn số 0) 16 Số bù 1 và Số bù 2 17 0 0 0 0 0 1 0 1 Số 5 (8 bit) 1 1 1 1 1 0 1 0 Số bù 1 của 5 1 1 1 1 1 0 1 1 Số bù 2 của 5 1 + 0 0 0 0 0 1 0 1 + Số 5 0 0 0 0 0 0 0 0 1 Kết quả • (Số bù 2 của x) + x = một dãy toàn bit 0 (không tính bit 1 cao nhất do vượt quá phạm vi lưu trữ)  Do đó số bù 2 của x chính là giá trị âm của x hay – x (Còn gọi là phép lấy đối) • Đổi số thập phân âm –5 sang nhị phân?  Đổi 5 sang nhị phân rồi lấy số bù 2 của nó • Thực hiện phép toán a – b?  a – b = a + (–b)  Cộng với số bù 2 của b. 18 Số nguyên có dấu [4] Số quá (thừa) K 19  Còn gọi là biểu diễn số dịch (biased representation)  Chọn một số nguyên dương K cho trước làm giá trị dịch  Biểu diễn số N:  +N (dương): có được bằng cách lấy K + N, với K được chọn sao cho tổng của K và một số âm bất kỳ trong miền giá trị luôn luôn dương  -N (âm): có được bằng cáck lấy K - N (hay lấy bù hai của số vừa xác định)  Ví dụ:  Dùng 1 Byte (8 bit): biểu diễn từ -12810 đến +12710  Trong hệ 8 bit, biểu diễn N = 25, chọn số thừa k = 128, :  +2510 = 100110012  -2510 = 011001112  Chỉ có một giá trị 0: +0 = 100000002, -0 = 100000002 • Số bù 2 [3]  lưu trữ số có dấu và các phép tính của chúng trên máy tính (thường dùng nhất) – Không cần thuật toán đặc biệt nào cho các phép tính cộng và tính trừ – Giúp phát hiện dễ dàng các trường hợp bị tràn. • Dấu lượng [1] / số bù 1 [2]  dùng các thuật toán phức tạp và bất lợi vì luôn có hai cách biểu diễn của số 0 (+0 và -0) • Dấu lượng [1]  phép nhân của số có dấu chấm động • Số thừa K [4]  dùng cho số mũ của các số có dấu chấm động 20 -2n-1 2n-2 23 22 21 20 21 0 0 1 1 2 2 1 1011 2.2....2.)2.(... xxxxxxx n n n nn      N bits Phạm vi lưu trữ: [-2n-1, 2n-1 - 1]  Ví dụ:  1101 01102 = -2 7 + 26 + 24 + 23 + 22 + 21 = -128 + 64 + 16 + 4 + 2 = = -4210 22 • Tính giá trị không dấu và có dấu của 1 số? – Ví dụ số word (16 bit): 1100 1100 1111 0000 – Số nguyên không dấu ? • Tất cả 16 bit lưu giá trị  giá trị là 52464 – Số nguyên có dấu ? • Bit MSB = 1 do đó số này là số âm • Áp dụng công thức  giá trị là –13072 23 • Nhận xét – Bit MSB = 0 thì giá trị có dấu bằng giá trị không dấu. – Bit MSB = 1 thì giá trị có dấu bằng giá trị không dấu trừ đi 256 (28 nếu tính theo byte) hay 65536 (216 nếu tính theo word). • Tính giá trị không dấu và có dấu của 1 số? – Ví dụ số word (16 bit): 1100 1100 1111 0000 – Giá trị không dấu = 52464 – Giá trị có dấu: vì bit MSB = 1 nên giá trị có dấu = 52464 – 65536 = –13072 24 • Shift left (SHL): 1100 1010  1001 0100 – Chuyển tất cả các bit sang trái, bỏ bit trái nhất, thêm 0 ở bit phải nhất • Shift right (SHR): 1001 0101  0100 1010 – Chuyển tất cả các bit sang phải, bỏ bit phải nhất, thêm 0 ở bit trái nhất • Rotate left (ROL): 1100 1010  1001 0101 – Chuyển tất cả các bit sang trái, bit trái nhất thành bit phải nhất • Rotate right (ROR): 1001 0101  1100 1010 – Chuyển tất cả các bit sang phải, bit phải nhất thành bit trái nhất 25 AND 0 1 0 0 0 1 0 1 26 OR 0 1 0 0 1 1 1 1 XOR 0 1 0 0 1 1 1 0 NOT 0 1 1 0 “Phép nhân” “Phép cộng” “Phép so sánh khác” “Phép phủ định” • X = 0000 1000b = 8d X shl 2 = 0010 0000b = 32d = 8 . 22 (X shl 2) or X = 0010 1000b = 40d = 32 + 8 • Y = 0100 1010b = 74d ((Y and 0Fh) shl 4) = 1010 0000 OR OR ((Y and F0h) shr 4) = 0000 0100 = 1010 0100 = 164d (không dấu) = (164 – 28) = -92d (có dấu) 27 • x SHL y = x . 2y • x SHR y = x / 2y • AND dùng để tắt bit (AND với 0 luôn = 0) • OR dùng để bật bit (OR với 1 luôn = 1) • XOR, NOT dùng để đảo bit (XOR với 1 = đảo bit đó) • x AND 0 = 0 • x XOR x = 0 • Mở rộng: – Lấy giá trị tại bit thứ i của x: (x SHR i) AND 1 – Gán giá trị 1 tại bit thứ i của x: (1 SHL i) OR x – Gán giá trị 0 tại bit thứ i của x: NOT(1 SHL i) AND x – Đảo bit thứ i của x: (1 SHL i) XOR x 28 • Phép Cộng (+) • Phép Trừ (-) • Phép Nhân (*) • Phép Chia (/) 29 • Nguyên tắc cơ bản: • Ví dụ: 30 0 1 0 1 0 1 1 10 1 1 1 0 1 0 0 0 1 1 1 1 0 1 1 0 1 31 • Nguyên tắc cơ bản: Đưa về phép cộng A – B = A + (-B) = A + (số bù 2 của B) • Ví dụ: 11101 – 10011 = 11101 + 01101 32 1 1 1 0 1 0 0 0 1 1 0 1 0 1 1 0 1 0 1 1 33 • Nguyên tắc cơ bản: 34 0 1 0 1 0 0 0 1 35 0 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 1 1 36 • Giả sử ta muốn thực hiện phép nhân M x Q với – Q có n bit • Ta định nghĩa các biến: – C (1 bit): đóng vai trò bit nhớ – A (n bit): đóng vai trò 1 phần kết quả nhân ([C, A, Q]: kết quả nhân) – [C, A] (n + 1 bit) ; [C, A, Q] (2n + 1 bit): coi như các thanh ghi ghép • Thuật toán: 37 Khởi tạo: [C, A] = 0; k = n Lặp khi k > 0 { Nếu bit cuối của Q = 1 thì Lấy (A + M)  [C, A] Shift right [C, A, Q] k = k – 1 } 38 39 Khởi tạo: A = 0; k = n; Q-1 = 0 (thêm 1 bit = 0 vào cuối Q) Lặp khi k > 0 { Nếu 2 bit cuối của Q0Q-1 { = 10 thì A – M  A = 01 thì A + M  A = 00, 11 thì A không thay đổi } Shift right [A, Q, Q-1] k = k – 1 } Kết quả: [A, Q] 40 • Giả sử ta muốn thực hiện Q / M với 41 Khởi tạo: A = n bit 0 nếu Q > 0; A = n bit 1 nếu Q < 0; k = n Lặp khi k > 0 { Shift left (SHL) [A, Q] A – M  A # Nếu A < 0: Q0 = 0 và A + M  A # Ngược lại: Q0 = 1 k = k – 1 } Kết quả: Q là thương, A là số dư 42 • International Electrotechnical Commission (IEC) 43 • International System of Units (SI) • Chú ý: khi nói “kilobyte” chúng ta nghĩ là 1024 byte nhưng thực ra nó là 1000 bytes theo chuẩn SI, 1024 bytes là kibibyte (IEC) • Hiện nay chỉ có các nhà sản xuất đĩa cứng và viễn thông mới dùng chuẩn SI – 30 GB  30 * 109 ~ 28 * 230 bytes – 1 Mbit/s  106 b/s 44 • Đọc chương 9, sách của W.Stalling • Đọc trước slide bài giảng số thực 45

Các file đính kèm theo tài liệu này:

  • pdfch02_bieu_dien_so_nguyen_1753.pdf
Tài liệu liên quan