Cấu trúc máy tính - Chương 2: Biểu diễn dữ liệu và số học máy tính
Bạn đang xem 20 trang mẫu của tài liệu "Cấu trúc máy tính - Chương 2: Biểu diễn dữ liệu và số họ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
Tài liệu đính kèm:
- cau_truc_may_tinh_chuong_2_bieu_dien_du_lieu_va_so_hoc_may_t.pdf
Nội dung text: Cấu trúc máy tính - Chương 2: Biểu diễn dữ liệu và số học máy tính
- Cấu trúc máy tính Chương 2 BIỂU DIỄN DỮ LIỆU & SỐ HỌC MÁY TÍNH 1
- Nội dung chương 2 2.1. C|c hệ đếm cơ bản 2.2. M~ hóa v{ lưu trữ dữ liệu trong m|y tính 2.3. Biểu diễn số nguyên 2.4. C|c phép to|n số học với số nguyên 2.5. Biểu diễn số thực 2.6. Biểu diễn kí tự 2
- Các hệ đếm cơ bản . Về mặt to|n học, ta có thể biểu diễn số theo hệ đếm cơ số bất kì. . Khi nghiên cứu về m|y tính, ta chỉ quan t}m đến c|c hệ đếm sau đ}y: Hệ thập ph}n (Decimal System) → con người sử dụng Hệ nhị ph}n (Binary System) → m|y tính sử dụng Hệ mười s|u (Hexadecimal System) → dùng để viết gọn cho số nhị ph}n 3
- Hệ thập phân . Sử dụng 10 chữ số: 0,1,2,3,4,5,6,7,8,9 để biểu diễn số . Dùng n chữ số thập ph}n có thể biểu diễn được 10n gi| trị nguyên khác nhau: . 00 000 = 0 . . 99 999 = 10n-1 . Giả sử một số A được biểu diễn dưới dạng: A = an an-1 a1 a0 . a-1 a-2 a-m . Gi| trị của A được hiểu như sau: n n 1 1 0 1 m A an10 an 110 a110 a010 a 110 a m10 n i A ai10 i m 4
- Ví dụ . Số thập ph}n 472.38 có gi| trị được hiểu như sau: 472.38 = 4 x 102 + 7 x 101 + 2 x 100 + 3 x 10-1 + 8 x 10-2 5
- Mở rộng cho hệ cơ số r (r>1) . Sử dụng r chữ số có gi| trị riêng từ 0 đến r-1 để biểu diễn số . Giả sử có số A được biểu diễn bằng c|c chữ số của hệ đếm theo cơ số r như sau: A = an an-1 a1 a0 . a-1 a-2 a-m . Gi| trị của A l{: n n 1 1 0 1 2 m A anr an 1r a1r a0r a 1r a 2r a mr n i A air i m . Một chuỗi n chữ số của hệ đếm cơ số r sẽ biểu diễn được rn giá trị nguyên khác nhau. 6
- Hệ nhị phân . Sử dụng 2 chữ số: 0,1 . Chữ số nhị ph}n gọi l{ bit (binary digit) . Bit l{ đơn vị thông tin nhỏ nhất . Dùng n bit có thể biểu diễn được 2n gi| trị kh|c nhau: 00 000 = 0 n 11 111 = 2 -1 . Giả sử có số A được biểu diễn theo hệ nhị ph}n như sau: A = an an-1 a1 a0 . a-1 a-2 a-m . Với ai l{ c|c chữ số nhị ph}n, khi đó gi| trị của A l{: n n 1 1 0 1 2 m A an 2 an 1 2 a1 2 a0 2 a 1 2 a 2 2 a m 2 n i A ai 2 i m 7
- Ví dụ . Số nhị ph}n 1101001.1011 có gi| trị được x|c định như sau: 6 5 3 0 -1 -3 -4 1101001.1011(2) = 2 + 2 + 2 + 2 + 2 + 2 + 2 = 64 + 32 + 8 + 1 + 0.5 + 0.125 + 0.0625 = 105.6875(10) 8
- Đổi số thập phân sang nhị phân . Thực hiện chuyển đổi phần nguyên v{ phần lẻ riêng. . Chuyển đổi phần nguyên: Cách 1: chia dần số đó cho 2, x|c định c|c phần dư, rồi viết c|c số dư theo chiều ngược lại. . Ví dụ: chuyển đổi 105(10) sang hệ nhị ph}n ta l{m như sau: 105 : 2 = 52 dư 1 52 : 2 = 26 dư 0 26 : 2 = 13 dư 0 13 : 2 = 6 dư 1 6 : 2 = 3 dư 0 3 : 2 = 1 dư 1 1 : 2 = 0 dư 1 Như vậy, ta có: 105(10) = 1101001(2) 9
- Đổi số thập phân sang nhị phân . Chuyển đổi phần nguyên (tiếp): Cách 2: ph}n tích số đó th{nh tổng c|c lũy thừa của 2, sau đó dựa v{o c|c số mũ để x|c định dạng biểu diễn nhị ph}n. . Ví dụ: 105 = 64 + 32 + 8 + 1 = 26 + 25 + 23 + 20 105(10) = 1101001(2) . Chuyển đổi phần lẻ: Nh}n phần lẻ với 2 rồi lấy phần nguyên Sau đó viết c|c phần nguyên theo chiều thuận. . Ví dụ: chuyển đổi số 0.6875(10) sang hệ nhị ph}n: 0.6875 x 2 = 1.3750 phần nguyên = 1 0.375 x 2 = 0.750 phần nguyên = 0 0.75 x 2 = 1.50 phần nguyên = 1 0.5 x 2 = 1.0 phần nguyên = 1 Kết quả l{: 0.6875(10) = 0.1011(2) 10
- 3. Hệ mười sáu (Hexa) . Sử dụng 16 chữ số, kí hiệu như sau: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F . Dùng để viết gọn cho số nhị phân. 11
- Một số ví dụ . Nhị ph}n Hexa: 11 1011 1110 0110.01101(2) = 3BE6.68(16) . Hexa Nhị ph}n: 3E8(16) = 11 1110 1000(2) . Thập ph}n Hexa: 14988 ? 14988 : 16 = 936 dư 12 tức l{ C 936 : 16 = 58 dư 8 58 : 16 = 3 dư 10 tức l{ A 3 : 16 = 0 dư 3 Như vậy, ta có: 14988(10) = 3A8C(16) . Hexa Thập ph}n: 3A8C ? 3 2 1 0 3A8C (16) = 3 x 16 + 10 x 16 + 8 x 16 +12 x 16 = 12288 + 2560 + 128 + 12 = 14988(10) 12
- Chuyển đổi nhanh . 105 = 6x16 + 9 = 69(16)= 110 1001 . 35 = 2x16 + 3 = 23(16) = 10 0011 13
- Cộng trừ số Hexa 8A9B B46E B7E5 FA9D + - + - 37CD 1AC9 2AF9 2BC5 C268 99A5 E2DE CED8 B800 8E9A 1234 4B6D + - + - 0FFF 3FE2 ABCD 3FEA CFFF A78D 879D 98BA + - + - 1FFF 45FB 5DF8 8A9D 14
- Nội dung chương 2 2.1. C|c hệ đếm cơ bản 2.2. M~ hóa v{ lưu trữ dữ liệu trong m|y tính 2.3. Biểu diễn số nguyên 2.4. C|c phép to|n số học với số nguyên 2.5. Biểu diễn số thực 2.6. Biểu diễn kí tự 15
- Mã hóa và lưu trữ dữ liệu 1. Nguyên tắc chung về m~ hóa dữ liệu 2. Lưu trữ thông tin trong bộ nhớ chính 16
- 1. Nguyên tắc chung về mã hóa dữ liệu . Mọi dữ liệu đưa v{o m|y tính đều phải được m~ hóa th{nh số nhị ph}n. . C|c loại dữ liệu : Dữ liệu nh}n tạo: do con người quy ước Dữ liệu tự nhiên: tồn tại kh|ch quan với con người 17
- Nguyên tắc mã hóa dữ liệu . M~ hóa dữ liệu nh}n tạo: Dữ liệu số nguyên: m~ hóa theo chuẩn qui ước Dữ liệu số thực: m~ hóa bằng số dấu chấm động Dữ liệu ký tự: m~ hóa theo bộ m~ ký tự 18
- Nguyên tắc mã hóa dữ liệu (tiếp) . M~ hóa dữ liệu tự nhiên: Phổ biến l{ c|c tín hiệu vật lý như }m thanh, hình ảnh, C|c dữ liệu tự nhiên cần phải được số hóa (digitalized) trước khi đưa vào trong máy tính. Sơ đồ m~ hóa v{ t|i tạo tín hiệu vật lý: 19
- Độ dài từ dữ liệu . Độ d{i từ dữ liệu: L{ số bit được sử dụng để m~ hóa loại dữ liệu tương ứng Trong thực tế, độ d{i từ dữ liệu thường l{ bội số của 8 bit, ví dụ: 8, 16, 32, 64 bit 10 20 30 1GB = 2 MB = 2 KB = 2 Byte 32 4GB = 2 Byte 20
- 2. Lưu trữ thông tin trong bộ nhớ chính . Bộ nhớ chính thường được tổ chức theo Byte . Độ d{i từ dữ liệu có thể chiếm 1 hoặc nhiều Byte . Cần phải biết thứ tự lưu trữ c|c byte trong bộ nhớ chính: Lưu trữ kiểu đầu nhỏ (Little-endian) Lưu trữ kiểu đầu to (Big-endian) . Little-endian: Byte có ý nghĩa thấp hơn được lưu trữ trong bộ nhớ ở vị trí có địa chỉ nhỏ hơn. . Big-endian: Byte có ý nghĩa thấp hơn được lưu trữ trong bộ nhớ ở vị trí có địa chỉ lớn hơn. 21
- Ví dụ Intel 80x86, Pentium: Little-endian Motorola 680x0, c|c bộ xử lý RISC: Big-endian Power PC, Itanium: hỗ trợ cả hai (Bi-endian) 22
- Bài tập . Dữ liệu 16 bit có gi| trị l{ 5B9D được lưu trữ v{o bộ nhớ chính tổ chức theo kiểu Little-endian bắt đầu từ byte nhớ có địa chỉ l{ 1234. H~y x|c định nội dung c|c byte nhớ chứa lưu trữ dữ liệu đó dưới dạng nhị ph}n. 23
- Nội dung chương 2 2.1. C|c hệ đếm cơ bản 2.2. M~ hóa v{ lưu trữ dữ liệu trong m|y tính 2.3. Biểu diễn số nguyên 2.4. C|c phép to|n số học với số nguyên 2.5. Biểu diễn số thực 2.6. Biểu diễn kí tự 24
- Biểu diễn số nguyên 1. Số nguyên không dấu 2. Số nguyên có dấu 3. Biểu diễn số nguyên theo m~ BCD 25
- 1. Số nguyên không dấu . Dạng tổng qu|t: giả sử dùng n bit để biểu diễn cho một số nguyên không dấu A: an-1an-2 a3a2a1a0 . Gi| trị của A được tính như sau: n 1 n 2 1 0 A an 1 2 an 2 2 a1 2 a0 2 n 1 i A ai 2 i 0 . Dải biểu diễn của A: từ 0 đến 2n-1 26
- Các ví dụ . Ví dụ 1. Biểu diễn c|c số nguyên không dấu sau đ}y bằng 8 bit: A = 45 B = 156 Giải: A = 45 = 32 + 8 + 4 + 1 = 25 + 23 + 22 + 20 A = 0010 1101 B = 156 = 128 + 16 + 8 + 4 = 27 + 24 + 23 + 22 B = 1001 1100 27
- Các ví dụ (tiếp) . Ví dụ 2. Cho c|c số nguyên không dấu X, Y được biểu diễn bằng 8 bit như sau: X = 0010 1011 Y = 1001 0110 Giải: X = 0010 1011 = 25 + 23 + 21 + 20 = 32 + 8 + 2 + 1 = 43 Y = 1001 0110 = 27 + 24 + 22 + 21 = 128 + 16 + 4 + 2 = 150 28
- Trường hợp cụ thể: với n = 8 bit . Dải biểu diễn l{ [0, 255] . Trục số học máy tính: 0000 0000 = 0 255 0 1 0000 0001 = 1 254 2 0000 0010 = 2 3 0000 0011 = 3 1111 1111 = 255 . Trục số học: 0 1 2 255 29
- Với n = 8 bit . Kiểu dữ liệu tương ứng trong Turbo C l{ kiểu unsigned char. . Ví dụ: unsigned char a; 1111 1111 a = 255; + 0000 0001 a = a + 1; 1 0000 0000 printf(“%d”,a); //Kết quả sai l{ 0 KQ sai: 255 + 1 = 0 ? (do phép cộng bị nhớ ra ngoài) 30
- Với n = 16 bit, 32 bit, 64 bit . n = 16 bit: Dải biểu diễn l{ [0, 65535] Kiểu dữ liệu tương ứng trong Turbo C l{ kiểu unsigned int Ví dụ: unsigned int a; a = 0xffff; a = a + 1; printf(“%d”,a); . n = 32 bit: 32 Dải biểu diễn l{ [0, 2 -1] . n = 64 bit: 64 Dải biểu diễn l{ [0, 2 -1] 31
- 2. Số nguyên có dấu a. Khái niệm về số bù . Số bù chín v{ số bù mười (hệ thập ph}n): Giả sử có một số nguyên thập ph}n A được biểu diễn bởi n chữ số thập ph}n. Khi đó ta có: . Số bù chín của A = (10n - 1) - A . Số bù mười của A = 10n - A . NX: Số bù mười = Số bù chín + 1 Ví dụ: . Xét n = 4 chữ số, A = 2874 . Số bù chín của A = (104 - 1) - 2874 = 7125 . Số bù mười của A = 104 - 2874 = 7126 32
- Khái niệm về số bù . Số bù một v{ số bù hai (hệ nhị ph}n): Giả sử có một số nguyên nhị ph}n A được biểu diễn bởi n bit. Khi đó ta có: . Số bù một của A = (2n - 1) - A . Số bù hai của A = 2n - A . NX: Số bù hai = Số bù một + 1 Ví dụ: . Xét n = 4 bit, A = 0110 . Số bù một của A = (24 - 1) - 0110 = 1001 . Số bù hai của A = 24 - 0110 = 1010 33
- Nhận xét . Có thể tìm số bù một của A bằng c|ch đảo tất cả c|c bit của A . Số bù hai của A = Số bù một của A + 1 34
- Nhận xét Ví dụ: cho A =0110 0101 Số bù một của A =1001 1010 + 1 Số bù hai của A =1001 1011 Nhận xét A = 0110 0101 Số bù hai của A += 1001 1011 1 0000 0000 = 0 (bỏ qua bit nhớ ra ngo{i) ->Số bù hai của A=-A 35
- Biểu diễn số nguyên có dấu b. Biểu diễn số nguyên có dấu bằng số bù hai . Dùng n bit biểu diễn số nguyên có dấu A: an-1an-2 a2a1a0 . Với số dương: . Bit an-1 = 0 . C|c bit còn lại biểu diễn độ lớn của số dương đó Dạng tổng qu|t của số dương: 0an-2 a2a1a0 Gi| trị của số dương: n 2 i A ai 2 i 0 n-1 Dải biểu diễn của số dương: [0, 2 -1] 36
- Biểu diễn số nguyên có dấu (tiếp) . Với số }m: . Được biểu diễn bằng số bù hai của số dương tương ứng . Bit an-1 = 1 Dạng tổng qu|t của số }m: 1an-2 a2a1a0 Gi| trị của số }m: n 2 n 1 i A 2 ai 2 i 0 n-1 Dải biểu diễn của số }m: [-2 , -1] . Dải biểu diễn của số nguyên có dấu n bit l{ [-2n-1, 2n-1-1] 37
- Biểu diễn số nguyên có dấu (tiếp) . Dạng tổng qu|t của số nguyên có dấu A: an-1an-2 a2a1a0 . Gi| trị của A được x|c định như sau: n 2 n 1 i A an 12 ai 2 i 0 . Dải biểu diễn: [-2n-1, 2n-1-1] 38
- Các ví dụ . Ví dụ 1. Biểu diễn c|c số nguyên có dấu sau đ}y bằng 8 bit A = +50 B = -70 Giải: A = +50 = 32 + 16 + 2 = 25 + 24 + 21 A = 0011 0010 B = -70 Ta có: +70 = 64 + 4 + 2 = 26 + 22 + 21 +70 = 0100 0110 Số bù 1 = 1011 1001 + 1 Số bù 2 = 1011 1010 B = 1011 1010 39
- Các ví dụ (tiếp) . Ví dụ 2. X|c định gi| trị của c|c số nguyên có dấu 8 bit sau đ}y: A = 0101 0110 B = 1101 0010 Giải: A = 26 + 24 + 22 + 21 = 64 + 16 + 4 + 2 = +86 B = -27 + 26 + 24 + 21 = -128 + 64 + 16 + 2 = -46 40
- Trường hợp cụ thể: với n = 8 bit . Dải biểu diễn l{ [-128, +127] . Trục số học máy tính: 0000 0000 = 0 0000 0001 = +1 -1 0 +1 0000 0010 = +2 -2 +2 0111 1111 = +127 1000 0000 = -128 1000 0001 = -127 1111 1110 = -2 -128 +127 1111 1111 = -1 . Trục số học: -128 -2 -1 0 1 2 127 41
- Với n = 8 bit (tiếp) . Kiểu dữ liệu tương ứng trong Turbo C l{ kiểu char. . Ví dụ: char a; a = 127; 0111 1111 a = a + 1; + 0000 0001 printf(“%d”,a); //Kết quả sai l{ -128 1000 0000 KQ sai: 127 + 1 = -128 ? (do phép cộng bị tràn số học) 42
- Với n = 16 bit, 32 bit, 64 bit . n = 16 bit: Dải biểu diễn l{ [-32768, +32767] Kiểu dữ liệu tương ứng trong Turbo C l{ kiểu int . n = 32 bit: 31 31 Dải biểu diễn l{ [-2 , 2 -1] Kiểu dữ liệu tương ứng trong Turbo C l{ kiểu long int . n = 64 bit: 63 63 Dải biểu diễn l{ [-2 , 2 -1] 43
- Chuyển từ 8 bit sang 16 bit . Với số dương: +35 = 0010 0011 (8 bit) +35 = 0000 0000 0010 0011 (16 bit) Thêm 8 bit 0 vào bên trái . Với số }m: -79 = 1011 0001 (8 bit) -79 = 1111 1111 1011 0001 (16 bit) Thêm 8 bit 1 vào bên trái . Kết luận: mở rộng sang bên tr|i 8 bit bằng bit dấu 44
- 3. Biểu diễn số nguyên theo mã BCD . BCD – Binary Coded Decimal (M~ hóa số nguyên thập ph}n bằng nhị ph}n) . Dùng 4 bit để m~ hóa cho c|c chữ số thập ph}n từ 0 đến 9 0 0000 5 0101 1 0001 6 0110 2 0010 7 0111 3 0011 8 1000 4 0100 9 1001 . Có 6 tổ hợp không sử dụng: 1010, 1011, 1100, 1101, 1110, 1111 45
- Ví dụ về số BCD . 35 0011 0101BCD . 79 0111 1001BCD . 2281 0010 0010 1000 0001BCD . 1304 0001 0011 0000 0100BCD 46
- Phép cộng số BCD . 35 0011 0101BCD + 24 + 0010 0100BCD 59 0101 1001BCD Kết quả đúng (không phải hiệu chỉnh) . 89 1000 1001BCD + 52 + 0101 0010BCD 141 1101 1011 kết quả sai + 0110 0110 hiệu chỉnh 0001 0100 0001BCD kết quả đúng 1 4 1 . Hiệu chỉnh: cộng thêm 6 ở những h{ng có nhớ 47
- Các kiểu lưu trữ số BCD . BCD dạng nén (Packed BCD): Hai số BCD được lưu trữ trong 1 Byte. Ví dụ số 52 được lưu trữ như sau: 0101 0010 . BCD dạng không nén (Unpacked BCD): Mỗi số BCD được lưu trữ trong 4 bit thấp của mỗi Byte. Ví dụ số 52 được lưu trữ như sau: 0101 0010 48
- Nội dung chương 2 2.1. C|c hệ đếm cơ bản 2.2. M~ hóa v{ lưu trữ dữ liệu trong m|y tính 2.3. Biểu diễn số nguyên 2.4. C|c phép to|n số học với số nguyên 2.5. Biểu diễn số thực 2.6. Biểu diễn kí tự 49
- Các phép toán số học với số nguyên 1. Bộ cộng 2. Cộng số nguyên không dấu 3. Cộng/trừ số nguyên có dấu 4. Nh}n số nguyên 5. Chia số nguyên 50
- 1. Bộ cộng . Bộ cộng 1 bit to{n phần (Full Adder) 51
- Bộ cộng (tiếp) . Bộ cộng n bit 52
- 2. Cộng số nguyên không dấu . Nguyên tắc: Sử dụng bộ cộng n bit để cộng 2 số nguyên không dấu n bit, kết quả nhận được cũng l{ n bit. Nếu không có nhớ ra khỏi bit cao nhất (Cout=0) thì kết quả nhận được l{ đúng. Nếu có nhớ ra khỏi bit cao nhất (Cout=1) thì kết quả nhận được l{ sai, khi đó đ~ xảy ra hiện tượng nhớ ra ngo{i. . Hiện tượng nhớ ra ngoài (Carry-out) xảy ra khi tổng của 2 số nguyên không dấu n bit > 2n-1 53
- VD cộng số nguyên không dấu 8 bit . Trường hợp không xảy ra carry-out: X = 1001 0110 = 150 Y = 0001 0011 = 19 S = 1010 1001 = 169 Cout = 0 . Trường hợp có xảy ra carry-out: unsigned char x, y, s; X = 1100 0101 = 197 x = 197; Y = 0100 0110 = 70 y = 70; S = 0000 1011 267 s = x + y; C = 1 carry-out out printf(“%d”,s); (KQ sai = 23 + 21 + 20 = 11) 54
- 3. Cộng/trừ số nguyên có dấu . Khi cộng hai số nguyên có dấu n bit, ta không quan t}m đến bit Cout v{ kết quả nhận được cũng l{ n bit. Cộng hai số kh|c dấu: kết quả luôn đúng Cộng hai số cùng dấu: . Nếu tổng nhận được cùng dấu với 2 số hạng thì kết quả l{ đúng . Nếu tổng nhận được kh|c dấu với 2 số hạng thì đ~ xảy ra hiện tượng tràn số học (Overflow) v{ kết quả nhận được l{ sai Tr{n số học xảy ra khi tổng thực sự của hai số nằm ngo{i dải biểu diễn của số nguyên có dấu n bit: [-2n-1, 2n-1-1] 55
- Phép trừ số nguyên có dấu . Nguyên tắc thực hiện phép trừ: Ta có: X – Y = X + (-Y) C|ch thực hiện: lấy X cộng với số bù 2 của Y n-bit Y n-bit X Bù 2 Bộ cộng n bit n-bit S 56
- Ví dụ cộng 2 số nguyên có dấu (không tràn) 57
- Ví dụ cộng 2 số nguyên có dấu (Overflow) 58
- 4. Nhân số nguyên a. Nh}n số nguyên không dấu b. Nh}n số nguyên có dấu 59
- a. Nhân số nguyên không dấu . C|c tích riêng phần được x|c định như sau: Nếu bit của số nh}n = 0 → tích riêng phần = 0 Nếu bit của số nh}n = 1 → tích riêng phần = số bị nh}n Tích riêng phần tiếp theo được dịch tr|i 1 bit so với tích riêng phần trước đó . Tích = tổng c|c tích riêng phần . Nh}n 2 số nguyên n bit, tích có độ d{i 2n bit → không tr{n 60
- Bộ nhân số nguyên không dấu Số bị nhân M Mn-1 M1 M0 Điều khiển cộng Bộ cộng n bit Bộ điều khiển dịch và cộng Điều khiển dịch phải C An-1 A1 A0 Qn-1 Q1 Q0 Số nhân Q 61
- Lưu đồ thực hiện Bắt đầu C, A ¬ 0 M ¬ Số bị nhân Q ¬ Số nhân Bộ đếm ¬ n S Đ Q0 = 1 ? C, A ¬ A M Dịch phải C, A, Q Bộ đếm ¬ Bộ đếm - 1 S Đ Bộ đếm = 0 ? Kết thúc 62
- Ví dụ nhân số nguyên không dấu . M = 1011 (11 - Số bị nhân) . Q = 1101 (13 - Số nhân) . = 1000 1111 (143 - Tích) C A Q . 0 0000 1101 Các giá trị khởi đầu + 1011 . 0 1011 1101 A ¬ A + M 0 0101 1110 Dịch phải . 0 0010 1111 Dịch phải + 1011 . 0 1101 1111 A ¬ A + M 0 0110 1111 Dịch phải + 1011 . 1 0001 1111 A ¬ A + M 0 1000 1111 Dịch phải 63
- b. Nhân số nguyên có dấu . Sử dụng thuật giải nh}n không dấu: Bước 1: Chuyển đổi số nh}n v{ số bị nh}n th{nh số dương tương ứng. Bước 2: Nhân 2 số bằng thuật giải nh}n số nguyên không dấu → được tích 2 số dương. Bước 3: Hiệu chỉnh dấu của tích: . Nếu 2 thừa số ban đầu cùng dấu thì tích nhận được ở bước 2 l{ kết quả cần tính. . Nếu 2 thừa số ban đầu kh|c dấu nhau thì kết quả l{ số bù 2 của tích nhận được ở bước 2. 64
- Nhân số nguyên có dấu . Sử dụng thuật giải Booth: Với số nh}n dương: . Ta có: 2i + 2i-1 + + 2j = 2i+1 - 2j (với i j) . VD: M * 01110010 = M * (27 – 24 + 22 – 21) . Quy tắc: duyệt từ tr|i sang phải: Nếu gặp 10 thì trừ A đi M rồi dịch phải Nếu gặp 01 thì cộng A với M rồi dịch phải Nếu gặp 00 hay 11 thì chỉ dịch phải Với số nh}n }m: . Ta có: n-1 n-2 k+1 k-1 0 11 10ak-1ak-2 a0 = -2 + 2 + + 2 + ak-12 + + a02 n-1 n-1 k+1 k-1 0 = -2 + 2 - 2 + ak-12 + + a02 . -2k+1 ứng với bit 10 nên vẫn đảm bảo quy tắc ở TH trên 65
- Lưu đồ thực hiện thuật toán Booth Bắt đầu A Q Q-1 A ¬ 0 Q-1 ¬ 0 M ¬ Số bị nhân Q ¬ Số nhân Bộ đếm ¬ n = 10 = 01 Q0Q-1 A ¬ A M = 00 / 11 A ¬ A M Dịch phải A, Q, Q-1 (Giữ nguyên bit dấu của A) Bộ đếm ¬ Bộ đếm - 1 S Đ Bộ đếm = 0 ? Kết thúc 66
- Ví dụ về thuật toán Booth Ví dụ 1: Ví dụ 2: n = 4 bit, M = +7, Q = +3 n = 4 bit, M = +7, Q = -3 M = 0111, Q = 0011, -M = 1001 M = 0111, Q = 1101, -M = 1001 A Q Q-1 A Q Q-1 0000 0011 0 ; khởi tạo 0000 1101 0 ; khởi tạo +1001 +1001 1001 0011 0 ; A ¬ A - M 1001 1101 0 ; A ¬ A - M 1100 1001 1 ; dịch phải 1100 1110 1 ; dịch phải 1110 0100 1 ; dịch phải +0111 +0111 10011 1110 1 ; A ¬ A + M 10101 0100 1 ; A ¬ A + M 0001 1111 0 ; dịch phải 0010 1010 0 ; dịch phải +1001 0001 0101 0 ; dịch phải 1010 1111 0 ; A ¬ A - M 1101 0111 1 ; dịch phải 1110 1011 1 ; dịch phải 67
- 5. Chia số nguyên a. Chia số nguyên không dấu b. Chia số nguyên có dấu 68
- a. Chia số nguyên không dấu . Ví dụ: 69
- Bộ chia số nguyên không dấu Số chia M Mn-1 M1 M0 Điều khiển cộng/trừ Bộ logic điều khiển Bộ cộng/trừ n bit cộng, trừ và dịch Điều khiển dịch trái An-1 A1 A0 Qn-1 Q1 Q0 Số bị chia Q 70
- Lưu đồ thực hiện Bắt đầu A ¬ 0 M ¬ Số chia Q ¬ Số bị chia Bộ đếm ¬ 0 Dịch trái A, Q A ¬ A M S Đ A < 0 ? Q ¬ 0 Q ¬ 1 0 0 A ¬ A M Bộ đếm ¬ Bộ đếm - 1 S Đ Bộ đếm = 0 ? Kết thúc 71
- b. Chia số nguyên có dấu . Bước 1: Chuyển đổi số chia v{ số bị chia th{nh số dương tương ứng . Bước 2: Sử dụng thuật giải chia số nguyên không dấu để chia 2 số dương, kết quả nhận được l{ thương Q v{ phần dư R đều dương . Bước 3: Hiệu chỉnh dấu kết quả theo quy tắc sau: 72
- Nội dung chương 2 2.1. C|c hệ đếm cơ bản 2.2. M~ hóa v{ lưu trữ dữ liệu trong m|y tính 2.3. Biểu diễn số nguyên 2.4. C|c phép to|n số học với số nguyên 2.5. Biểu diễn số thực 2.6. Biểu diễn kí tự 73
- Biểu diễn số thực 1. Kh|i niệm về số dấu chấm tĩnh 2. Kh|i niệm về số dấu chấm động 3. Chuẩn IEEE 754/85 74
- Biểu diễn số thực . Quy ước: "dấu chấm" (point) được hiểu l{ kí hiệu ngăn c|ch giữa phần nguyên v{ phần lẻ của 1 số thực. . Có 2 c|ch biểu diễn số thực trong m|y tính: Só dáu chám tĩnh (fixed-point number): . Dấu chấm l{ cố định (số bit d{nh cho phần nguyên v{ phần lẻ l{ cố định) . Dù ng trong các bo ̣ vi xử lý hay vi đièu khiẻn thế hệ cũ . Só dáu chám đo ̣ng (floating-point number): . Dấu chấm không cố định . Dù ng trong các bo ̣ vi xử lý hie ̣n nay, có đo ̣ chính xác cao hơn. 75
- 1. Khái niệm về số dấu chấm tĩnh . Số bit d{nh cho phần nguyên v{ số bit phần lẻ l{ cố định. . Giả sử rằng: U(a,b) là ta ̣p các só dáu chám tĩnh không dấu có a bit trướ c dáu chám và b bit sau dáu chám. A(a,b) là ta ̣p các só dáu chám tĩnh có dấu có a bit (không kẻ bit dáu) trướ c dáu chám và b bit sau dáu chám. 76
- Số dấu chấm tĩnh không dấu . Khoảng x|c định của số dấu chấm tĩnh không dấu: [0, 2a - 2-b] . Ví dụ: Dùng 8 bit để m~ hóa cho kiểu số dấu chấm tĩnh, trong đó có 2 bit d{nh cho phần lẻ. Khoảng x|c định của kiểu dữ liệu này là: 0 R 26 – 2-2 = 63.75 -2 VD: gi| trị của 101011.11 = 10101111 x 2 = 43.75 77
- Số dấu chấm tĩnh có dấu . Khoảng x|c định của số dấu chấm tĩnh có dấu: [-2a, 2a - 2-b] . Ví dụ: Dùng 8 bit đẻ biẻu diẽn só chám tĩnh có dáu với a=5, b=2 Ta đượ c ta ̣p các só chấm tĩnh thuo ̣c A(5,2) nàm trong khoảng: [-25, 25 – 2-2] hay [-32, 31.75] 78
- Đặc điểm của số dấu chấm tĩnh . C|c phép to|n thực hiện nhanh. . Độ chính x|c khi thực hiện c|c phép to|n không cao, đạ c bie ̣t là với phép tính nhân. . Ví dụ: Khi thực hiện phép nh}n ta cần phải có thêm một số lượng bit nhất định để biểu diễn kết quả. Đói vớ i só không dáu: U(a1, b1) x U(a2, b2) = U(a1 + a2, b1 + b2) Đói vớ i só có dáu: A(a1, b1) x A(a2, b2) = A(a1 + a2 + 1, b1 + b2) 79
- 2. Khái niệm về số dấu chấm động . Floating Point Number biểu diễn cho số thực . Một số thực X được biểu diễn theo kiểu số dấu chấm động như sau: X = M * RE Trong đó: M l{ phần định trị (Mantissa) R l{ cơ số (Radix) E l{ phần mũ (Exponent) . Với R cố định thì để lưu trữ X ta chỉ cần lưu trữ M v{ E (dưới dạng số nguyên) 80
- 3. Chuẩn IEEE 754/85 . L{ chuẩn m~ hóa số dấu chấm động . Cơ số R = 2 . Có c|c dạng cơ bản: Dạng có độ chính x|c đơn, 32-bit Dạng có độ chính x|c kép, 64-bit Dạng có độ chính x|c kép mở rộng, 80-bit . Khuôn dạng m~ hóa: 31 30 23 22 0 S e m 63 62 52 51 0 S e m 79 78 64 63 0 S e m 81
- Khuôn dạng mã hóa . S l{ bit dấu, S=0 đó l{ số dương, S=1 đó l{ số }m. . e l{ m~ lệch (excess) của phần mũ E, tức l{: E = e – b Trong đó b l{ độ lệch (bias): Dạng 32-bit : b = 127, hay E = e - 127 Dạng 64-bit : b = 1023, hay E = e - 1023 Dạng 80-bit : b = 16383, hay E = e - 16383 . m l{ c|c bit phần lẻ của phần định trị M, phần định trị được ngầm định như sau: M = 1.m . Công thức x|c định gi| trị của số thực tương ứng l{: X = (-1)S x 1.m x 2e-b 82
- Ví dụ về số dấu chấm động . Ví dụ 1: Có một số thực X có dạng biểu diễn nhị ph}n theo chuẩn IEEE 754 dạng 32 bit như sau: 1100 0001 0101 0110 0000 0000 0000 0000 X|c định gi| trị thập ph}n của số thực đó. . Giải: S = 1 X l{ số }m e = 1000 0010 = 130 m = 10101100 00 1 130-127 Vậy X = (-1) x 1.10101100 00 x 2 = -1.101011 x 23 = -1101.011 = -13.375 83
- Ví dụ về số dấu chấm động (tiếp) . Ví dụ 2: X|c định gi| trị thập ph}n của số thực X có dạng biểu diễn theo chuẩn IEEE 754 dạng 32 bit như sau: 0011 1111 1000 0000 0000 0000 0000 0000 . Giải: 84
- Ví dụ về số dấu chấm động (tiếp) . Ví dụ 3: Biểu diễn số thực X = 9.6875 về dạng số dấu chấm động theo chuẩn IEEE 754 dạng 32 bit . Giải: 3 X = 9.6875(10) = 1001.1011(2) = 1.0011011 x 2 Ta có: S = 0 vì đ}y l{ số dương E = e – 127 nên e = 127 + 3 = 130(10) = 1000 0010(2) m = 001101100 00 (23 bit) Vậy: X = 0100 0001 0001 1011 0000 0000 0000 0000 85
- Các quy ước đặc biệt . Nếu tất cả c|c bit của e đều bằng 0, c|c bit của m đều bằng 0, thì X = 0 . Nếu tất cả c|c bit của e đều bằng 1, c|c bit của m đều bằng 0, thì X = . Nếu tất cả c|c bit của e đều bằng 1, m có ít nhất một bit bằng 1, thì X không phải l{ số (not a number - NaN) 86
- Trục số biểu diễn underflow overflow overflow -b -a -0 +0 a b . Dạng 32 bit: a = 2-127 ≈ 10-38 b = 2+127 ≈ 10+38 . Dạng 64 bit: a = 2-1023 ≈ 10-308 b = 2+1023 ≈ 10+308 . Dạng 80 bit: a = 2-16383 ≈ 10-4932 b = 2+16383 ≈ 10+4932 87
- Thực hiện các phép toán E1 . X1 = M1 * R E2 . X2 = M2 * R . Ta có E1-E2 E2 X1 X2 = (M1 * R M2) * R , với E2 E1 E1+E2 X1 * X2 = (M1 * M2) * R E1-E2 X1 / X2 = (M1 / M2) * R 88
- Các khả năng tràn số . Tr{n trên số mũ (Exponent Overflow): mũ dương vượt ra khỏi gi| trị cực đại của số mũ dương có thể. . Tr{n dưới số mũ (Exponent Underflow): mũ }m vượt ra khỏi gi| trị cực đại của số mũ }m có thể. . Tr{n trên phần định trị (Mantissa Overflow): cộng hai phần định trị có cùng dấu, kết quả bị nhớ ra ngo{i bit cao nhất. . Tr{n dưới phần định trị (Mantissa Underflow): Khi hiệu chỉnh phần định trị, c|c số bị mất ở bên phải phần định trị. 89
- Phép cộng và phép trừ . Kiểm tra c|c số hạng có bằng 0 hay không Nếu có thì g|n kết quả dựa trên số còn lại. . Hiệu chỉnh phần định trị Sao cho 2 số có phần mũ giống nhau: tăng số mũ nhỏ v{ dịch phải phần định trị tương ứng (dịch phải để hạn chế sai số nếu có). 3 3 3 VD: 1.01 * 2 + 1.11 = 1.01 * 2 + 0.00111 * 2 . Cộng hoặc trừ phần định trị Nếu tr{n thì dịch phải v{ tăng số mũ, nếu bị tr{n số mũ thì b|o lỗi tr{n số. . Chuẩn hóa kết quả Dịch tr|i phần định trị để bit tr|i nhất (bit MSB) kh|c 0. Tương ứng với việc giảm số mũ nên có thể dẫn đến hiện tượng tr{n dưới số mũ. 90
- Nội dung chương 2 2.1. C|c hệ đếm cơ bản 2.2. M~ hóa v{ lưu trữ dữ liệu trong m|y tính 2.3. Biểu diễn số nguyên 2.4. C|c phép to|n số học với số nguyên 2.5. Biểu diễn số thực 2.6. Biểu diễn kí tự 91
- Biểu diễn kí tự trong máy tính 1. Bộ m~ ASCII (American Standard Code for Information Interchange) 2. Bộ m~ Unicode 92
- 1. Bộ mã ASCII . Do ANSI (American National Standard Institute) thiết kế . L{ bộ m~ 8 bit m~ hóa được cho 28 = 256 kí tự, có m~ từ 0016 FF16, bao gồm: 128 kí tự chuẩn có m~ từ 0016 7F16 128 kí tự mở rộng có m~ từ 8016 FF16 93
- HEXA 0 1 2 3 4 5 6 7 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 % 5 E U e u 5 21 37 53 69 85 101 117 6 & 6 F V f v 6 22 38 54 70 86 102 118 7 ' 7 G W g w 7 23 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 * : J Z j z 10 26 42 58 74 90 106 122 B + ; K [ k { 11 27 43 59 75 91 107 123 C , - = M ] m } 13 29 45 61 77 93 109 125 E . > N ^ n ~ 14 30 46 62 78 94 110 126 F / ? O - o 15 31 47 63 79 95 111 127 94
- a. Các kí tự chuẩn . 95 kí tự hiển thị được: có m~ từ 2016 ÷ 7E16 26 chữ c|i hoa Latin 'A' ÷ 'Z' có m~ từ 4116 ÷ 5A16 26 chữ c|i thường Latin 'a' ÷ 'z' có m~ từ 6116 ÷ 7A16 10 chữ số thập ph}n '0' ÷ '9' có m~ từ 3016 ÷ 3916 C|c dấu c}u: . , ? ! : ; C|c dấu phép to|n: + - * / Một số kí tự thông dụng: #, $, &, @, Dấu c|ch (m~ l{ 2016) . 33 m~ điều khiển: m~ từ 0016 ÷ 1F16 và 7F16 dùng để m~ hóa cho c|c chức năng điều khiển 95
- Điều khiển định dạng BS Backspace - Lùi lại một vị trí: Ký tự điều khiển con trỏ lùi lại một vị trí. HT Horizontal Tab - Tab ngang: Ký tự điều khiển con trỏ dịch tiếp một khoảng đã định trước. LF Line Feed - Xuống một dòng: Ký tự điều khiển con trỏ chuyển xuống dòng dưới. VT Vertical Tab - Tab đứng: Ký tự điều khiển con trỏ chuyển qua một số dòng đã định trước. FF Form Feed - Đẩy sang đầu trang: Ký tự điều khiển con trỏ di chuyển xuống đầu trang tiếp theo. CR Carriage Return - Về đầu dòng: Ký tự điều khiển con trỏ di chuyển về đầu dòng hiện hành. 96
- Điều khiển truyền số liệu SOH Start of Heading - Bắt đầu tiêu đề: Ký tự đánh dấu bắt đầu phần thông tin tiêu đề. STX Start of Text - Bắt đầu văn bản: Ký tự đánh dấu bắt đầu khối dữ liệu văn bản và cũng chính là để kết thúc phần thông tin tiêu đề. ETX End of Text - Kết thúc văn bản: Ký tự đánh dấu kết thúc khối dữ liệu văn bản đã được bắt đầu bằng STX. EOT End of Transmission - Kết thúc truyền: Chỉ ra cho bên thu biết kết thúc truyền. ENQ Enquiry - Hỏi: Tín hiệu yêu cầu đáp ứng từ một máy ở xa. ACK Acknowledge - Báo nhận: Ký tự được phát ra từ phía thu báo cho phía phát biết rằng dữ liệu đã được nhận thành công. NAK Negative Aknowledge - Báo phủ nhận: Ký tự được phát ra từ phía thu báo cho phía phát biết rằng việc nhận dữ liệu không thành công. SYN Synchronous / Idle - Đồng bộ hóa: Được sử dụng bởi hệ thống truyền đồng bộ để đồng bộ hoá quá trình truyền dữ liệu. ETB End of Transmission Block - Kết thúc khối truyền: Chỉ ra kết thúc khối dữ liệu được truyền. 97
- Điều khiển phân cách thông tin FS File Separator - Ký hiệu phân cách tập tin: Đánh dấu ranh giới giữa các tập tin. GS Group Separator - Ký hiệu phân cách nhóm: Đánh dấu ranh giới giữa các nhóm tin (tập hợp các bản ghi). RS Record Separator - Ký hiệu phân cách bản ghi: Đánh dấu ranh giới giữa các bản ghi. US Unit Separator - Ký hiệu phân cách đơn vị: Đánh dấu ranh giới giữa các phần của bản ghi. 98
- Các kí tự điều khiển khác NUL Null - Ký tự rỗng: Được sử dụng để điền khoảng trống khi không có dữ liệu. BEL Bell - Chuông: Được sử dụng phát ra tiếng bíp khi cần gọi sự chú ý của con người. SO Shift Out - Dịch ra: Chỉ ra rằng các mã tiếp theo sẽ nằm ngoài tập ký tự chuẩn cho đến khi gặp ký tự SI. SI Shift In - Dịch vào: Chỉ ra rằng các mã tiếp theo sẽ nằm trong tập ký tự chuẩn. DLE Data Link Escape - Thoát liên kết dữ liệu: Ký tự sẽ thay đổi ý nghĩa của một hoặc nhiều ký tự liên tiếp sau đó. DC1 ÷ Device Control - Điều khiển thiết bị : Các ký tự dùng để điều khiển các thiết bị DC4 phụ trợ. CAN Cancel - Hủy bỏ: Chỉ ra rằng một số ký tự nằm trước nó cần phải bỏ qua. EM End of Medium - Kết thúc phương tiện: Chỉ ra ký tự ngay trước nó là ký tự cuối cùng có tác dụng với phương tiện vật lý. SUB Substitute - Thay thế: Được thay thế cho ký tự nào được xác định là bị lỗi. ESC Escape - Thoát: Ký tự được dùng để cung cấp các mã mở rộng bằng cách kết hợp với ký tự sau đó. DEL Delete - Xóa: Dùng để xóa các ký tự không mong muốn. 99
- b. Các kí tự mở rộng . Được định nghĩa bởi: Nh{ chế tạo m|y tính Người ph|t triển phần mềm . Ví dụ: Bộ m~ ký tự mở rộng của IBM: được dùng trên m|y tính IBM-PC. Bộ m~ ký tự mở rộng của Apple: được dùng trên m|y tính Macintosh. C|c nh{ ph|t triển phần mềm tiếng Việt cũng đ~ thay đổi phần n{y để m~ ho| cho c|c ký tự riêng của chữ Việt, ví dụ như bộ m~ TCVN 5712. 100
- 2. Bộ mã Unicode . Do c|c h~ng m|y tính h{ng đầu thiết kế . L{ bộ m~ 16-bit . Được thiết ké cho đa ngôn ngữ, trong đó có tiếng Việt 101
- Bài tập 1 . Giả sử có c|c biến nhớ dưới đ}y chứa c|c số nguyên có dấu 8-bit với nội dung biểu diễn theo hệ 16 như sau: P = 3A Q = 7C R = DE S = FF H~y x|c định gi| trị của c|c biến nhớ đó dưới dạng số thập ph}n. 102
- Bài tập 2 . Giả sử có X thuộc kiểu số nguyên có dấu 16-bit, nó được g|n gi| trị dưới dạng thập ph}n bằng -1234. H~y cho biết nội dung của c|c byte nhớ chứa biến đó dưới dạng Hexa, biết rằng bộ nhớ lưu trữ theo kiểu đầu nhỏ (little-endian). 103
- Bài tập 3 . Giả sử có biến P chứa số nguyên có dấu 16 bit. Nội dung của biến P được cho trong bộ nhớ như sau: 9D(16) Địa chỉ 80 tăng dần (16) H~y x|c định gi| trị(Lit tlcủae-end biếnian) P dưới dạng thập ph}n. 104
- Bài tập 4 . Giả sử có một biến số thực X được biểu diễn bằng số dấu chấm động theo chuẩn IEEE 754 dạng 32 bit, nó chiếm 4 byte trong bộ nhớ với nội dung được chỉ ra ở hình vẽ sau. 00(16) 80(16) Địa chỉ tăng dần D9(16) C3(16) Biết rằng bộ nhớ tổ chức theo kiểu đầu nhỏ (little-endian), hãy x|c định gi| trị thập ph}n của số thực đó. 105
- Bài tập 5 . Giả sử có biến X thuộc kiểu số dấu chấm động theo chuẩn IEEE 754 dạng 32 bit. Nó được g|n gi| trị dưới dạng thập ph}n bằng -124.125 v{ lưu trữ v{o bộ nhớ bắt đầu từ byte nhớ có địa chỉ l{ 200. H~y cho biết nội dung của c|c byte nhớ chứa biến đó dưới dạng Hexa, biết rằng bộ nhớ lưu trữ theo kiểu đầu nhỏ (little- endian). 106