Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh
Ví dụ 2
n Cho các số nguyên không dấu M, N được
biểu diễn bằng 8-bit như sau:
n M = 0001 0010
n N = 1011 1001
Xác định giá trị của chúng ?
Giải:
n M = 0001 0010 = 24 + 21 = 16 +2 = 18
n N = 1011 1001 = 27 + 25 + 24 + 23 + 20
= 128 + 32 + 16 + 8 + 1 = 185
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Kiến trúc máy tính - Chương 4: Số học máy tính - Nguyễn Kim Khánh
0 0000 0000 0000 = 0 n 0000 0000 0000 0001 = +1 n ... n 0111 1111 1111 1111 = +32767 (215 - 1) n 1000 0000 0000 0000 = -32768 (-215) n 1000 0000 0000 0001 = -32767 n ... n 1111 1111 1111 1111 = -1 n Với n = 32bit: biểu diễn từ -231 đến 231-1 n Với n = 64bit: biểu diễn từ -263 đến 263-1 2017 Kiến trúc máy tính 156 NKK-HUST Mở rộng bit cho số nguyên 2017 Kiến trúc máy tính 157 n Mở rộng theo số không dấu (Zero-extended): thêm các bit 0 vào bên trái n Mở rộng theo số có dấu (Sign-extended): n Số dương: +19 = 0001 0011 (8bit) +19 = 0000 0000 0001 0011 (16bit) à thêm các bit 0 vào bên trái n Số âm: - 19 = 1110 1101 (8bit) - 19 = 1111 1111 1110 1101 (16bit) à thêm các bit 1 vào bên trái NKK-HUST Bộ cộng n-bit XY S CinCout n bit n bit n bit 1. Phép cộng số nguyên không dấu Bộ cộng n-bit 4.2. Thực hiện phép cộng/trừ với số nguyên 2017 Kiến trúc máy tính 158 NKK-HUST Nguyên tắc cộng số nguyên không dấu n Khi cộng hai số nguyên không dấu n-bit, kết quả nhận được là n-bit: n Nếu Cout = 0 à nhận được kết quả đúng n Nếu Cout = 1 à nhận được kết quả sai, do có nhớ ra ngoài (Carry Out) n Hiện tượng nhớ ra ngoài xảy ra khi: tổng > (2n - 1) 2017 Kiến trúc máy tính 159 NKK-HUST Ví dụ cộng số nguyên không dấu n 57 = 0011 1001 + 34 = + 0010 0010 91 0101 1011 = 64+16+8+2+1=91 à đúng n 209 = 1101 0001 + 73 = + 0100 1001 282 1 0001 1010 kết quả = 0001 1010 =16+8+2=26 à sai do có nhớ ra ngoài (Cout=1) Để có kết quả đúng, ta thực hiện cộng theo 16-bit: 209 = 0000 0000 1101 0001 + 73 = + 0000 0000 0100 1001 0000 0001 0001 1010 = 256+16+8+2 = 282 2017 Kiến trúc máy tính 160 NKK-HUST 2. Phép đảo dấu n Ta có: + 37 = 0010 0101 bù một = 1101 1010 + 1 bù hai = 1101 1011 = -37 n Lấy bù hai của số âm: - 37 = 1101 1011 bù một = 0010 0100 + 1 bù hai = 0010 0101 = +37 n Kết luận: Phép đảo dấu số nguyên trong máy tính thực chất là lấy bù hai 2017 Kiến trúc máy tính 161 NKK-HUST 3. Cộng số nguyên có dấu n Khi cộng hai số nguyên có dấu n-bit, kết quả nhận được là n-bit và không cần quan tâm đến bit Cout n Khi cộng hai số khác dấu thì kết quả luôn luôn đúng n Khi cộng hai số cùng dấu, nếu dấu kết quả cùng dấu với các số hạng thì kết quả là đúng n Khi cộng hai số cùng dấu, nếu kết quả có dấu ngược lại, khi đó có tràn (Overflow) xảy ra và kết quả bị sai n Hiện tượng tràn xảy ra khi tổng nằm ngoài dải biểu diễn: [ -(2n-1),+(2n-1-1)] 2017 Kiến trúc máy tính 162 NKK-HUST Ví dụ cộng số nguyên có dấu không tràn n ( + 70) = 0100 0110 + ( + 42) = 0010 1010 + 112 0111 0000 = +112 n (+ 97) = 0110 0001 + (- 52) = 1100 1100 (+52=0011 0100) + 45 1 0010 1101 = +45 n ( - 90) = 1010 0110 (+90=0101 1010) + ( +36) = 0010 0100 - 54 1100 1010 = - 54 n ( - 74) = 1011 0110 (+74=0100 1010) +( - 30) = 1110 0010 (+30=0001 1110) -104 1 1001 1000 = -104 2017 Kiến trúc máy tính 163 NKK-HUST Ví dụ cộng số nguyên có dấu bị tràn n ( + 75) = 0100 1011 +( + 82) = 0101 0010 +157 1001 1101 = - 128+16+8+4+1= -99 à sai n ( - 104) = 1001 1000 (+104=0110 1000) + ( - 43) = 1101 0101 (+ 43 =0010 1011) - 147 1 0110 1101 = 64+32+8+4+1= +109 à sai n Cả hai ví dụ đều tràn vì tổng nằm ngoài dải biểu diễn [-128, +127] 2017 Kiến trúc máy tính 164 NKK-HUST 4. Nguyên tắc thực hiện phép trừ n Phép trừ hai số nguyên: X-Y = X+(-Y) n Nguyên tắc: Lấy bù hai của Y để được –Y, rồi cộng với X Bộ cộng n-bit Y X S= X-Y Bù hai n-bit n-bit n-bit 2017 Kiến trúc máy tính 165 NKK-HUST 4.3. Phép nhân và phép chia số nguyên 1011 Số bị nhân (11) x 1101 Số nhân (13) 1011 0000 Các tích riêng phần 1011 1011 10001111 Tích (143) 1. Nhân số nguyên không dấu 2017 Kiến trúc máy tính 166 NKK-HUST Nhân số nguyên không dấu (tiếp) n Các tích riêng phần được xác định như sau: n Nếu bit của số nhân bằng 0 à tích riêng phần bằng 0 n Nếu bit của số nhân bằng 1 à tích riêng phần bằng số bị nhân n Tích riêng phần tiếp theo được dịch trái một bit so với tích riêng phần trước đó n Tích bằng tổng các tích riêng phần n Nhân hai số nguyên n-bit, tích có độ dài 2n bit (không bao giờ tràn) 2017 Kiến trúc máy tính 167 NKK-HUST Bộ nhân số nguyên không dấu Bộ cộng n-bit Bộ logic điều khiển cộng và dịch Điều khiển dịch phải Điều khiển cộng Số nhân Mn-1 Mn-2 M0M1. . . An-1 An-2 A0A1. . . Qn-1 Qn-2 Q0Q1. . .C Số bị nhân 2017 Kiến trúc máy tính 168 NKK-HUST Lưu đồ nhân số nguyên không dấu Bắt đầu C ß 0; A ß 0 M ß Số bị nhân Q ß Số nhân Bộ đếm ß n Bộ đếm = 0 ? Kết thúc YesNo Q0 = 1 ? C,A ß A+M Dịch phải C,A,Q Bộ đếm ßBộ đếm-1 Yes No Tích trong AQ 2017 Kiến trúc máy tính 169 NKK-HUST Ví dụ nhân số nguyên không dấu n Số bị nhân M = 1011 (11) n Số nhân Q = 1101 (13) n Tích = 1000 1111 (143) C A Q n 0 0000 1101 Các giá trị khởi đầu + 1011 0 1011 1101 A ¬ A + M n 0 0101 1110 Dịch phải n 0 0010 1111 Dịch phải + 1011 0 1101 1111 A ¬ A + M n 0 0110 1111 Dịch phải + 1011 1 0001 1111 A ¬ A + M n 0 1000 1111 Dịch phải 2017 Kiến trúc máy tính 170 NKK-HUST 2. Nhân số nguyên có dấu n Sử dụng thuật giải nhân không dấu n Sử dụng thuật giải Booth 2017 Kiến trúc máy tính 171 NKK-HUST Sử dụng thuật giải nhân không dấu n Bước 1. Chuyển đổi số bị nhân và số nhân thành số dương tương ứng n Bước 2. Nhân hai số dương bằng thuật giải nhân số nguyên không dấu, được tích của hai số dương. n Bước 3. Hiệu chỉnh dấu của tích: n Nếu hai thừa số ban đầu cùng dấu thì giữ nguyên kết quả ở bước 2 n Nếu hai thừa số ban đầu là khác dấu thì đảo dấu kết quả của bước 2 (lấy bù hai) 2017 Kiến trúc máy tính 172 NKK-HUST Thuật giải Booth (tham khảo sách COA) 10.3 / INTEGER ARITHMETIC 335 as the twos complement value -7, then each partial product must be a negative twos complement number of 2n (8) bits, as shown in Figure 10.11b. Note that this is accomplished by padding out each partial product to the left with binary 1s. If the multiplier is negative, straightforward multiplication also will not work. The reason is that the bits of the multiplier no longer correspond to the shifts or multiplications that must take place. For example, the 4-bit decimal number -3 is written 1101 in twos complement. If we simply took partial products based on each bit position, we would have the following correspondence: 1101g -(1 * 23 + 1 * 22 + 0 * 21 + 1 * 20) = -(23 + 22 + 20) In fact, what is desired is -(21 + 20). So this multiplier cannot be used directly in the manner we have been describing. There are a number of ways out of this dilemma. One would be to convert both multiplier and multiplicand to positive numbers, perform the multiplication, and then take the twos complement of the result if and only if the sign of the two original numbers differed. Implementers have preferred to use techniques that do not require this final transformation step. One of the most common of these is Booth’s algorithm. This algorithm also has the benefit of speeding up the multipli- cation process, relative to a more straightforward approach. Booth’s algorithm is depicted in Figure 10.12 and can be described as follows. As before, the multiplier and multiplicand are placed in the Q and M registers, START END YesNo ! 10 ! 01 ! 11 ! 00 A 0, Q"1 0 M Multiplicand Q Multiplier Count n Arithmetic shift Right: A, Q, Q"1 Count Count " 1 A A # MA A " M Q0, Q"1 Count ! 0? Figure 10.12 Booth’s Algorithm for Twos Complement Multiplication 2017 Kiến trúc máy tính 173 NKK-HUST 3. Chia số nguyên không dấu Số bị chia 10010011 1011 Số chia - 1011 00001101 Thương 001110 - 1011 001111 - 1011 100 Phần dư 2017 Kiến trúc máy tính 174 NKK-HUST Bộ chia số nguyên không dấu Bộ cộng/trừ n-bit Bộ logic điều khiểncộng/trừ và dịch Điều khiển dịch trái Điều khiển cộng/trừ Số bị chia Q Mn-1 Mn-2 M0M1. . . An-1 An-2 A0A1. . . Qn-1 Qn-2 Q0Q1. . . Số chia M 2017 Kiến trúc máy tính 175 NKK-HUST Lưu đồ chia số nguyên không dấu Bắt đầu A ß 0 M ß Số chia Q ß Số bị chia Bộ đếm ß n Bộ đếm = 0 ? Kết thúc YesNo A < 0 ? Q0 ß 0 A ß A + M Bộ đếmßBộ đếm-1 Yes No Q0 ß1 Dịch trái A,Q A ß A - M Thương ở Q Số dư ở A 2017 Kiến trúc máy tính 176 NKK-HUST 4. Chia số nguyên có dấu n Bước 1. Chuyển đổi số bị chia và số chia về thành số dương tương ứng. n Bước 2. Sử dụng thuật giải chia số nguyên không dấu để chia hai số dương, kết quả nhận được là thương Q và phần dư R đều là dương n Bước 3. Hiệu chỉnh dấu của kết quả như sau: (Lưu ý: phép đảo dấu thực chất là thực hiện phép lấy bù hai) Số bị chia Số chia Thương Số dư dương dương giữ nguyên giữ nguyên dương âm đảo dấu giữ nguyên âm dương đảo dấu đảo dấu âm âm giữ nguyên đảo dấu 2017 Kiến trúc máy tính 177 NKK-HUST 4.4. Số dấu phẩy động 1. Nguyên tắc chung n Floating Point Number à biểu diễn cho số thực n Tổng quát: một số thực X được biểu diễn theo kiểu số dấu phẩy động như sau: X = ± M * RE n M là phần định trị (Mantissa), n R là cơ số (Radix), n E là phần mũ (Exponent). 2017 Kiến trúc máy tính 178 NKK-HUST 2. Chuẩn IEEE754-2008 n Cơ số R = 2 n Các dạng: n Dạng 32-bit n Dạng 64-bit n Dạng 128-bit 346 CHAPTER 10 / COMPUTER ARITHMETIC is implementation dependent, but the standard places certain constraints on the length of the exponent and significand. These formats are arithmetic format types but not interchange format types. The extended formats are to be used for inter- mediate calculations. With their greater precision, the extended formats lessen the Table 10.3 IEEE 754 Format Parameters Parameter Format Binary32 Binary64 Binary128 Storage width (bits) 32 64 128 Exponent width (bits) 8 11 15 Exponent bias 127 1023 16383 Maximum exponent 127 1023 16383 Minimum exponent -126 -1022 -16382 Approx normal number range (base 10) 10-38, 10+38 10-308, 10+308 10-4932, 10+4932 Trailing significand width (bits)* 23 52 112 Number of exponents 254 2046 32766 Number of fractions 223 252 2112 Number of values 1.98 * 231 1.99 * 263 1.99 * 2128 Smallest positive normal number 2-126 2-1022 2-16362 Largest positive normal number 2128 - 2104 21024 - 2971 216384 - 216271 Smallest subnormal magnitude 2-149 2-1074 2-16494 Note: *not including implied bit and not including sign bit Trailing significand field (c) Binary128 format Biased exponent Trailing significand field (b) Binary64 format 8 bits Sign bit Trailing significand field (a) Binary32 format Biased exponent 23 bits 11 bits 52 bits 15 bits 112 bits Sign bit Biased exponent Sign bit Figure 10.21 IEEE 754 Formats 2017 Kiến trúc máy tín 179 NKK-HUST Dạng 32-bit n S là bit dấu: n S = 0 à số dương n S = 1 à số âm n e (8 bit) là giá trị dịch chuyển của phần mũ E: n e = E + 127 à phần mũ E = e - 127 n m (23 bit) là phần lẻ của phần định trị M: n M = 1.m n Công thức xác định giá trị của số thực: X = (-1)S*1.m * 2e-127 2017 Kiến trúc máy tính 180 S me 1 bit 23 bit8 bit NKK-HUST Ví dụ 1 Xác định giá trị của các số thực được biểu diễn bằng 32-bit sau đây: n 1100 0001 0101 0110 0000 0000 0000 0000 n S = 1 à số âm n e = 1000 0010(2) = 130(10) à E = 130 - 127 = 3 Vậy X = -1.10101100(2) * 23 = -1101.011(2) = -13.375(10) n 0011 1111 1000 0000 0000 0000 0000 0000 = ? 2017 Kiến trúc máy tính 181 NKK-HUST Ví dụ 2 Biểu diễn số thực X= 83.75(10) về dạng số dấu phẩy động IEEE754 32-bit Giải: n X = 83.75(10) = 1010011.11(2) = 1.01001111 x 26 n Ta có: n S = 0 vì đây là số dương n E = e - 127 = 6 à e = 127 + 6 = 133(10) = 1000 0101(2) n Vậy: X = 0100 0010 1010 0111 1000 0000 0000 0000 2017 Kiến trúc máy tính 182 NKK-HUST Các qui ước đặc biệt n Các bit của e bằng 0, các bit của m bằng 0, thì X = ± 0 x000 0000 0000 0000 0000 0000 0000 0000 à X = ± 0 n Các bit của e bằng 1, các bit của m bằng 0, thì X = ± ¥ x111 1111 1000 0000 0000 0000 0000 0000 à X =± ¥ n Các bit của e bằng 1, còn m có ít nhất một bit bằng 1, thì nó không biểu diễn cho số nào cả (NaN - not a number) 2017 Kiến trúc máy tính 183 NKK-HUST Dải giá trị biểu diễn n 2-127 đến 2+127 n 10-38 đến 10+38 0-2+127 +2+127+2-127-2-127 2017 Kiến trúc máy tính 184 NKK-HUST Dạng 64-bit n S là bit dấu n e (11 bit) là giá trị dịch chuyển của phần mũ E: n e = E + 1023 à phần mũ E = e - 1023 n m (52 bit): phần lẻ của phần định trị M n Giá trị số thực: X = (-1)S*1.m * 2e-1023 n Dải giá trị biểu diễn: 10-308 đến 10+308 2017 Kiến trúc máy tính 185 NKK-HUST Dạng 128-bit n S là bit dấu n e (15 bit) là giá trị dịch chuyển của phần mũ E: n e = E + 16383 à phần mũ E = e - 16383 n m (112 bit): phần lẻ của phần định trị M n Giá trị số thực: X = (-1)S*1.m * 2e-16383 n Dải giá trị biểu diễn: 10-4932 đến 10+4932 2017 Kiến trúc máy tính 186 NKK-HUST 3. Thực hiện phép toán số dấu phẩy động n X1 = M1 * RE1 n X2 = M2 * RE2 n Ta có n X1 * X2 = (M1* M2) * RE1+E2 n X1 / X2 = (M1 / M2) * RE1-E2 n X1 ± X2 = (M1*RE1-E2 ± M2) * RE2 , với E2 ³ E1 2017 Kiến trúc máy tính 187 NKK-HUST Các khả năng tràn số n 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ể (à ∞) n 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ể (à 0) n 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 n 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ị 2017 Kiến trúc máy tính 188 NKK-HUST Phép cộng và phép trừ n Kiểm tra các số hạng có bằng 0 hay không n Hiệu chỉnh phần định trị n Cộng hoặc trừ phần định trị n Chuẩn hoá kết quả 2017 Kiến trúc máy tính 189 NKK-HUST Thuật toán cộng/trừ số dấu phẩy động TRỪ Dịch phải phần định trị Phần mũ bị tràn? Y NX = 0 ? Cất số kia vào Z Đổi dấu của Y Tăng phần mũ nhỏ hơn Z ß Y CỘNG Y = 0 ? Z ß X TRỞ VỀ Phần mũ bằng nhau? Y N Y = 0 ? TRỞ VỀ Cộng có dấu phần định trị định trị = 0?Z ß 0 TRỞ VỀ N N Y Y định trị bị tràn? N Y Dịch phải phần định trị Tăng phần mũ YBáo tràn TRỞ VỀ N Phần mũ bị tràn dưới? N Kết quả chuẩn hóa? Y Dịch phải phần định trị Giảm phần mũ Y Làm tròn kết quả TRỞ VỀ Báo tràn dưới TRỞ VỀ N Y N 2017 Kiến trúc máy tính 190 NKK-HUST Thuật toán nhân số dấu phẩy động NHÂN Thông báo tràn trên Y NX = 0 ? Làm tròn Trừ cho độ lệch Z ß 0 Y = 0 ? Cộng phần mũ TRỞ VỀ Y N Tràn dưới phần mũ? TRỞ VỀ Thông báo tràn dưới TRỞ VỀ N N Tràn trên phần mũ? Nhân phần định trị Chuẩn hóa Y Y 2017 Kiến trúc máy tính 191 NKK-HUST Thuật toán chia số dấu phẩy động CHIA Thông báo tràn trên Y NX = 0 ? Làm tròn Công thêm độ lệchZ ß 0 Y = 0 ? Trừ phần mũ TRỞ VỀ Y N Tràn dưới phần mũ? TRỞ VỀ Thông báo tràn dưới TRỞ VỀ N N Tràn trên phần mũ? Chia phần định trị Chuẩn hóa Y Y Z ß ∞ 2017 Kiến trúc máy tính 192 NKK-HUST Hết chương 4 2017 Kiến trúc máy tính 193
File đính kèm:
- bai_giang_kien_truc_may_tinh_chuong_4_so_hoc_may_tinh_nguyen.pdf