KIẾN TRÚC MÁY TÍNH - CHƯƠNG 4 - NÂNG CAO
Số bù hai và bộ cộng 8 bit
Bộ đếm 8 bit đang ở +127 và cộng thêm 1. Bài này giải thích vì sao kết quả là −128
MỤC TIÊU
Cuối buổi sinh viên làm được những việc này
1
Đọc một dãy 8 bit theo hai cách
Không dấu: 0 đến 255. Bù hai: −128 đến +127. Bit cao nhất có trọng số +128 hoặc −128.
2
Tìm số đối bằng bù hai
Đảo từng bit rồi cộng 1. Bù hai của 0010 0101 là 1101 1011, bằng −37.
3
Cộng, trừ trên bộ cộng 8 bit và phân biệt Cout với tràn
Cout báo sai với số không dấu. Tràn báo sai với số có dấu. Hai cờ độc lập nhau.
4
Mở rộng số 8 bit lên 16 bit
Số không dấu thêm bit 0. Số có dấu thêm bit dấu, giá trị giữ nguyên.
ĐIỂM DANH
Quét mã để vào nhóm
CÂU HỎI THẢO LUẬN: Điện thoại báo em ở nhóm mấy?
ĐOÁN TRƯỚC
Máy 8 bit có dấu đang giữ +127, bộ cộng cộng thêm 1. Máy hiện số nào?
A+1280
B00
C−1280
D−1270
THỬ 1
Bộ đếm 8 bit cộng 1 liên tiếp, kim chạy trên vòng số
THỬ 2
Cùng một dãy bit, hai cách đọc
GỌI TÊN 1
Hai cách đọc cùng một dãy bit
Không dấu
Giá trị A và dải biểu diễn?
A = tổng a_i nhân 2 mũ i. Dải [0, 2^n − 1]; 8 bit là 0 đến 255.
Có dấu, bù hai
Giá trị A và dải biểu diễn?
A = −a_(n−1) nhân 2^(n−1) cộng tổng a_i nhân 2^i với i đến n−2. Dải [−2^(n−1), 2^(n−1) − 1]; 8 bit là −128 đến +127.
Số 0 và số −128
Có gì đặc biệt?
Chỉ có một số 0. Có −128 mà không có +128: dải lệch một đơn vị về phía âm.
Bit cao nhất
Chỉ là dấu cộng trừ?
Không. Nó là một chữ số có trọng số −128, nên 1000 0000 là −128 chứ không phải −0.
THỬ 3
Đảo bit rồi cộng 1 cho ra số đối
GỌI TÊN 2
Bù một, bù hai và phép đảo dấu
Bù một
Tính thế nào?
(2^n − 1) − A, tức là đảo giá trị từng bit của A.
Bù hai
Tính thế nào?
2^n − A, tức là bù một cộng 1. Cộng thẳng 2^n − A thì khó, đảo bit rồi cộng 1 thì dễ.
Vì sao bù hai là −A
Kiểm tra bằng phép cộng
A cộng bù hai của A bằng 2^n, bỏ bit nhớ ra ngoài còn 0, nên bù hai của A cộng với A cho 0.
Đảo dấu trong máy
Làm bằng gì?
Lấy bù hai. +37 thành −37 và −37 thành +37; bộ cộng làm được cả phép trừ.
THỬ 4
Trục số học máy tính là một vòng
GỌI TÊN 3
Trục số học của máy là một vòng khép kín
Không dấu 8 bit
Vòng số?
0 đến 255; 255 + 1 = 0 vì vượt ra khỏi dải, bit nhớ ra ngoài mất đi.
Có dấu 8 bit
Vòng số?
−128 đến +127; +127 + 1 = −128 và (−128) + (−1) = +127.
Cùng một vòng
Hai cách đọc khác nhau ở đâu?
Cùng 256 vị trí. Không dấu đặt ranh giới ở 255 | 0, có dấu đặt ở +127 | −128.
Kết quả sai
Khi nào?
Khi tổng thật nằm ngoài dải biểu diễn của cách đọc đang dùng.
QUIZ GIỮA GIỜ 1
Máy 8 bit có dấu cộng (−128) với (−1). Máy hiện số nào?
A+1270
B−1290
C00
D−1270
THỬ 5
Bộ cộng 8 bit nối tiếp, nhớ lan từ bit 0 đến bit 7
GỌI TÊN 4
Cout và tràn là hai cờ khác nhau
Cộng không dấu
Khi nào kết quả sai?
Cout = 1: tổng lớn hơn 2^n − 1. Ví dụ 209 + 73 = 282 cho 0001 1010 = 26, sai. 57 + 34 = 91 đúng.
Cộng có dấu, khác dấu
Kết quả?
Luôn đúng, kể cả khi Cout = 1. Ví dụ +97 + (−52) = +45; −74 + (−30) = −104.
Cộng có dấu, cùng dấu
Khi nào tràn?
Kết quả mang dấu ngược lại. +75 + 82 cho −99; −104 + (−43) cho +109. Tổng nằm ngoài [−128, +127].
Phép trừ
Làm thế nào?
X − Y = X + (−Y): lấy bù hai của Y rồi đưa vào bộ cộng.
QUIZ GIỮA GIỜ 2
Cộng +97 với −52 trên máy 8 bit có dấu cho Cout = 1. Kết quả +45 đúng hay sai?
ASai, vì Cout = 10
BĐúng, vì hai số khác dấu0
CSai, vì tràn0
DKhông xác định được0
THỬ 6
Mở rộng số 8 bit lên 16 bit
LÀM VIỆC NHÓM
Mỗi nhóm tìm hai cặp số 8 bit có dấu, một cặp đúng dù Cout bằng 1 và một cặp tràn dù Cout bằng 0
6:00
Hết giờ thì nộp kết quả nhóm trên điện thoại
SO LẠI DỰ ĐOÁN
Máy 8 bit có dấu đang giữ +127, bộ cộng cộng thêm 1. Máy hiện số nào?
A+1280
B00
C−1280
D−1270
VÌ SAO: −128. Dãy 0111 1111 cộng 1 thành 1000 0000; bit cao nhất có trọng số −128 nên giá trị rơi sang đầu âm của dải, vì +128 nằm ngoài [−128, +127].
TỔNG KẾT
Bấm thẻ nào em nhớ trước thì nói trước
Hai cách đọc
n bit
Không dấu [0, 2^n − 1]; bù hai [−2^(n−1), 2^(n−1) − 1]. Bit cao nhất có trọng số −2^(n−1).
Bù hai
Cách tính
Đảo bit rồi cộng 1. Dùng cho phép đảo dấu và phép trừ.
Trục số học
Hình dạng
Một vòng 2^n vị trí. Ranh giới có dấu ở +127 | −128, không dấu ở 255 | 0.
Cout
Ý nghĩa
Báo sai khi cộng số không dấu, tổng lớn hơn 2^n − 1.
Tràn
Ý nghĩa
Báo sai khi cộng hai số cùng dấu mà kết quả khác dấu.
Mở rộng bit
Quy tắc
Không dấu thêm 0; có dấu thêm bit dấu để giữ giá trị.
PHIẾU THOÁT
Cuối tiết, em thấy mình ở đâu?
AEm hiểu và tự làm được0
BEm còn mơ hồ ở một chỗ0
CEm cần hỏi thêm0
NGUỒN
Bài giảng Kiến trúc máy tính và bài GRASP Lecture đi kèm
- Bài giảng Kiến trúc máy tính, Chương 4 Số học máy tính, mục 4.1 và 4.2: Nguyễn Kim Khánh, Đại học Bách khoa Hà Nội.
- Bài giảng Kiến trúc máy tính: Hoàng Xuân Dậu, Học viện Công nghệ Bưu chính Viễn thông.
- Bài GRASP Lecture "Số bù hai và bộ cộng 8 bit" (3D tương tác) để sinh viên tự thao tác sau buổi học.