NKK-HUT Kiến trúc máy tính Chương SỐ HỌC MÁY TÍNH Nguyễn Kim Khánh Trường Đại học Bách khoa Hà Nội 26 May 2012 IT3030 NKK-HUT Nội dung học phần 26May May2012 2012 26 Chương Giới thiệu chung Chương Cơ logic số Chương Hệ thống máy tính Chương Kiến trúc tập lệnh Chương Số học máy tính Chương Bộ xử lý Chương Bộ nhớ Chương Vào-ra Chương Kiến trúc máy tính tiên tiến IT3030 NKK-HUT Nội dung chương 5.1 Biểu diễn số nguyên 5.2 Phép cộng phép trừ số nguyên 5.3 Phép nhân 5.4 Phép chia 5.5 Số dấu phẩy động 26 May 2012 IT3030 NKK-HUT 5.1 Biểu diễn số nguyên 26 May 2012 Số nguyên không dấu (Unsigned Integer) Số nguyên có dấu (Signed Integer) IT3030 NKK-HUT Biểu diễn số nguyên không dấu Nguyên tắc tổng quát: Dùng n bit biểu diễn số nguyên không dấu A: a n a n a a a Giá trị A tính sau: n 1 A i i0 Dải biểu diễn A: từ đến 2n – 26 May 2012 IT3030 NKK-HUT Các ví dụ Ví dụ Biểu diễn số nguyên không dấu sau 8-bit: A = 41 ; B = 150 Giải: A = 41 = 32 + + = 25 + 23 + 20 41 = 0010 1001 B = 150 = 128 + 16 + + = 27 + 24 + 22 + 21 150 = 1001 0110 26 May 2012 IT3030 NKK-HUT Các ví dụ (tiếp) Ví dụ Cho số nguyên không dấu M, N biểu diễn 8-bit sau: M = 0001 0010 N = 1011 1001 Xác định giá trị chúng ? Giải: M = 0001 0010 = 24 + 21 = 16 +2 = 18 N = 1011 1001 = 27 + 25 + 24 + 23 + 20 = 128 + 32 + 16 + + = 185 26 May 2012 IT3030 NKK-HUT Với n = bit Biểu diễn giá trị từ đến 255 0000 0000 0000 0001 0000 0010 0000 0011 1111 1111 26 May 2012 = = = = Chú ý: 1111 1111 + 0000 0001 0000 0000 Vậy: 255 + = ? tràn nhớ = 255 IT3030 NKK-HUT Trục số học với n = bit Trục số học: 255 Trục số học máy tính: 254 255 26 May 2012 IT3030 NKK-HUT Với n = 16 bit, 32 bit, 64 bit n= 16 bit: dải biểu diễn từ đến 65535 (216 – 1) 26 May 2012 0000 0000 0000 0000 0000 0000 1111 1111 0000 0001 0000 0000 1111 1111 1111 1111 = = 255 = 256 = 65535 n= 32 bit: dải biểu diễn từ đến 232 - n= 64 bit: dải biểu diễn từ đến 264 - IT3030 10 NKK-HUT Ví dụ Biểu diễn số thực X= 83.75 dạng số dấu phẩy động IEEE754 32-bit Giải: X = 83.75(10) = 1010011.11(2) = 1.01001111 x 26 Ta có: S = số dương E = e-127 = e = 127 + = 133(10) = 1000 0101(2) Vậy: X = 0100 0010 1010 0111 1000 0000 0000 0000 26 May 2012 IT3030 52 NKK-HUT Ví dụ Biểu diễn số thực X= -0,2 dạng số dấu phẩy động IEEE754 32-bit Giải: X = -0,2(10) = - 0.00110011 0011 (2) = = - 1.100110011 0011 x 2-3 Ta có: S = số âm E = e-127 = -3 e = 127 -3 = 124(10) = 0111 1100(2) Vậy: X = 1011 1110 0100 1100 1100 1100 1100 1100 26 May 2012 IT3030 53 NKK-HUT Bài tập Biểu diễn số thực sau dạng số dấu phẩy động IEEE754 32-bit: X = - 27.0625; 26 May 2012 IT3030 Y = 1/32 54 NKK-HUT Các qui ước đặc biệt Các bit e 0, bit m 0, X = x000 0000 0000 0000 0000 0000 0000 0000 X = Các bit e 1, bit m 0, X = x111 1111 1000 0000 0000 0000 0000 0000 X = Các bit e 1, cịn m có bit 1, khơng biểu diễn cho số (NaN - not a number) 26 May 2012 IT3030 55 NKK-HUT Dải giá trị biểu diễn -2+127 26 May 2012 2-127 đến 2+127 10-38 đến 10+38 -2-127 IT3030 +2-127 +2+127 56 NKK-HUT Dạng 64-bit S bit dấu e (11 bit): mã excess-1023 phần mũ E E = e – 1023 m (52 bit): phần lẻ phần định trị M Giá trị số thực: X = (-1)S*1.m * 2e-1023 26 May 2012 Dải giá trị biểu diễn: 10-308 đến 10+308 IT3030 57 NKK-HUT Dạng 80-bit S bit dấu e (15 bit): mã excess-16383 phần mũ E E = e – 16383 m (64 bit): phần lẻ phần định trị M Giá trị số thực: X = (-1)S*1.m * 2e-16383 26 May 2012 Dải giá trị biểu diễn: 10-4932 đến 10+4932 IT3030 58 NKK-HUT 3.Thực phép toán số dấu phẩy động X1 = M1 * RE1 X2 = M2 * RE2 Ta có 26 May 2012 X1 * X2 = (M1* M2) * RE1+E2 X1 / X2 = (M1 / M2) * RE1-E2 X1 X2 = (M1*RE1-E2 M2) * RE2 , với E2 E1 IT3030 59 NKK-HUT Các khả tràn số 26 May 2012 Tràn số mũ (Exponent Overflow): mũ dương vượt khỏi giá trị cực đại số mũ dương ( ∞) Tràn số mũ (Exponent Underflow): mũ âm vượt khỏi giá trị cực đại số mũ âm ( 0) Tràn phần định trị (Mantissa Overflow): cộng hai phần định trị có dấu, kết bị nhớ bit cao Tràn phần định trị (Mantissa Underflow): Khi hiệu chỉnh phần định trị, số bị bên phải phần định trị IT3030 60 NKK-HUT Phép cộng phép trừ 26 May 2012 Kiểm tra số hạng có hay khơng Hiệu chỉnh phần định trị Cộng trừ phần định trị Chuẩn hoá kết IT3030 61 NKK-HUT Thuật toán cộng/trừ số dấu phẩy động Trõ §ỉi dÊu cđa Y Céng X=0? Y Z Y N Y=0? N PhÇn mị b»ng ? Y ZX Y N Tăng phần mũ nhỏ Trở Dịch phải phần định trị N Y Kết chuẩn hoá? định trị = ? N Dịch phải phần định trị Định trị bị tràn ? Y=0? Y Cất số vào Z Tăng phần mũ IT3030 N Làm tròn kết Trở Giảm phần mũ N Phần mũ bị tràn d-ới ? Y Trở Báo tràn Y N Trở Y Dịch phải phần định trị Trở 26 May 2012 Z0 Cộng có dấu phần định trị Báo tràn d-ới Y Phần mũ bị tràn ? N Trở 62 NKK-HUT Thut tốn nhân số dấu phẩy động Nh©n X=0? Y N Y=0? N Cộng phần mũ Y Trừ cho độ lệch Z0 Trở Tràn phần mũ ? Y Thông báo tràn N Tràn d-ới phần mũ ? N Nhân phần định trị Y Thông báo tràn d-ới Trở Chuẩn hoá Làm tròn 26 May 2012 IT3030 Trở vỊ 63 NKK-HUT Thuật tốn chia số dấu phẩy động Chia X=0? N Y=0? Y Y Z0 Z N Trừ phần mũ Cộng thêm độ lệch Tràn phần mũ ? Trở N Tràn d-ới phần mũ ? N Chia phần định trị Y Thông báo tràn Y Thông báo tràn d-ới Trở Chuẩn hoá Làm trßn 26 May 2012 IT3030 Trë vỊ 64 NKK-HUT Hết chương 26 May 2012 IT3030 65 NKK-HUT Giải tập X = -27.0625(10) = -11011.0001(2) = -1.10110001 x 24 Ta có: S=1 E = e-127 = e = 127 + = 131(10) = 1000 0011(2) Vậy: X = 1100 0001 1101 1000 1000 0000 0000 0000 Y = 1/32(10) = 1.0 x 2-5 Ta có: S=0 E = e-127 = -5 e = 127 -5 = 12210) = 0111 1010(2) Vậy: X = 0011 1101 0000 0000 0000 0000 0000 0000 26 May 2012 IT3030 66