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

Chưa có link

CÂU HỎI THẢO LUẬN: Điện thoại báo em ở nhóm mấy?

Bạn ở nhóm mấy?

Bạn ở 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