
_________________________________________________________________Chương 6
Mạch làm toán VI - 1
_______________________________________________________________
CHƯƠNG 6: MẠCH LÀM TOÁN
SỐ BÙ
PHÉP TRỪ SỐ NHỊ PHÂN DÙNG SỐ BÙ 1
PHÉP TRỪ SỐ NHỊ PHÂN DÙNG SỐ BÙ 2
PHÉP TOÁN VỚI SỐ CÓ DẤU
MẠCH CỘNG
Bán phần
Toàn phần
Cộng hai số nhiều bít
MẠCH TRỪ
Bán phần
Toàn phần
Trừ hai số nhiều bit
Cộng & trừ hai số nhiều bit trong một mạch
MẠCH NHÂN
Mạch nhân cơ bản
Mạch nhân nối tiếp - song song đơn giản
MẠCH CHIA
Mạch chia phục hồi số bị chia
Mạch chia không phục hồi số bị chia
___________________________________________________________________________
____
6.1 Số bù
Cho số dương N, n bit, các số bù của N được định nghĩa:
Số bù 2: (N)2 = 2n - N (số 2n gồm bit 1 và n bit 0 theo sau)
Số bù 1: (N)1 = (N)2 -1 = 2n - N - 1
Thí dụ 1: N = 1010
Số bù 2 của N là (N)2 = là 10000 - 1010 = 0110
Và số bù 1 của N là (N)1 = 0110 - 1 = 0101
Thí dụ 2: N = 110010101100 ⇒ (N)2 = 001101010100 và (N)1 = 001101010011
Nhận xét:
- Để có số bù 2 của một số, bắt đầu từ bit LSB (tận cùng bên phải) đi ngược về bên
trái, các bit sẽ giữ nguyên cho đến lúc gặp bit 1 đầu tiên, sau đó đảo tất cả các bit còn lại.
- Để có số bù 1 của một số, ta đảo tất cả các bit của số đó.
Từ các nhận xét trên ta có thể thực hiện một mạch tạo số bù 1 và 2 sau đây:
(H 6.1)
- Khi C=1, B là số bù 1 của b (B1 và b1 là bit LSB)
Nguyễn Trung Lập KỸ THUẬT SỐ

_________________________________________________________________Chương 6
Mạch làm toán VI - 2
_______________________________________________________________
- Khi C=0, B là số bù 2 của b.
Thật vậy, các biểu thức logic của B theo b và C là:
CbB 11 ⊕=
)bCbB 122 +⊕= (
)bbCbB 2133
+
+⊕= (
- Khi C=1 , các ngã ra cổng OR luôn bằng 1, các cổng EX - OR luôn có một ngã vào
bằng 1 nên ngã ra là đảo của ngã vào còn lại, ta được:
111 b1bB =⊕=
22122 b1b)b1bB =⊕=+⊕= (
332133 b1b)bb1bB =⊕=++⊕= (
- Khi C=0
111 b0bB =⊕=
12122 bb)b0bB
⊕
=
+⊕= (
= b2 nếu b1=0 và 2
b nếu b1 = 1
)b(bb)bb(0bB 2132133
+
⊕
=
++⊕=
= b3 nếu b1 và b2 đều =0
= 3
b nếu (b1 và/hoặc b2 = 1)
Như vậy tất cả các bit sau bit 1 thứ nhất tính từ bit LSB đều bị đảo và B chính là số bù
2 của b
Chúng ta cũng có thể thiết kế mạch tạo số bù hai bằng cách dùng FF RS, có ngã vào
R, S tác động mức cao, kết hợp với các cổng logic như (H 6.2). Mạch này dùng khá tiện lợi
khi cần thực hiện bài toán cộng và trừ nhiều bit kiểu nối tiếp.
(H 6.2)
Bắt đầu, Preset mạch để ngã ra Q = 1, cổng G3 đóng, G2 mở, cho số B đi qua mà
không bị đảo cho đến khi có bit 1 đầu tiên đến, cổng G1 mở cho xung đồng hồ đi qua, FF RS
được reset, Q = 0, Q = 1, G2 đóng, G3 mở, số B đi qua cổng G2 và bị đảo. Ở ngã ra được số
bù 2 của B.
6.2 Phép trừ số nhị phân dùng số bù 1:
Cho hai số dương A và B có n bit (nếu số bit khác nhau, ta thêm số 0 vào , mà không
làm thay đổi trị, để cả hai có cùng số bit)
a/ - A≤B
Nguyễn Trung Lập KỸ THUẬT SỐ

_________________________________________________________________Chương 6
Mạch làm toán VI - 3
_______________________________________________________________
Kết quả A-B là số 0 hoặc âm, phép tính được thực hiện như sau:
Tính A - B:
A - B = A-B+2n-1-2n+1
= A+(2n -B -1 ) - 2n+1
= A+(B )1 - 2n+1
= - {2n - [A+(B )1] -1}
= - [A+(B )1]1
Vậy A-B có được bằng cách cộng số bù 1 của B vào A rồi lấy bù 1 của tổng và thêm
dấu trừ . Như vậy để thực hiện phép tính trừ ta chỉ cần dùng phép cộng và phép đảo
Thí dụ 3 : Tính 1001 - 11010 dùng số bù 1
Ta có A = 01001 (thêm số 0 vào để có 5 bit như số B
B = 11010 ⇒ (B)1 = 00101
A-B = - [A+(B )1]1 = - (01001+00101) =- (01110)1
= - (10001)
Trong hệ thập phân, đây là bài toán 910 - 2610 = -1710
Để thấy dấu trừ được nhận ra như thế nào, ta viết lại phép toán:
Không có số tràn (hay số tràn =0) là dấu hiệu của kết quả âm (hoặc =0) và ta phải lấy
bù 1, thêm dấu trừ để đọc kết quả cuối cùng: (01110)1 = - 10001
Thí dụ 4: Tính 10110 - 10110
A = 10110 và B = 10110 ⇒ (B)1 = 01001
Trong phép cộng đầu tiên không có số tràn, kết quả xem như số âm (hoặc =0) lấy bù 1
của kết quả ta được A-B =00000.
b/ - A >B
Kết quả A-B là số dương, phép tính được thực hiện theo qui tắc sau:
Cộng A với (B)1 rồi thêm 1 và không quan tâm tới số nhớ cuối cùng
Thí dụ 5: Tính 110101 - 100110 dùng số bù 1
A = 110101 và B = 100110 ⇒ (B)1 = 011001
Bỏ qua số nhớ cuối cùng, ta được kết quả A-B =001111.
Trong hệ thập phân đó là bài toán 5310 - 3810 = 1510.
Nguyễn Trung Lập KỸ THUẬT SỐ

_________________________________________________________________Chương 6
Mạch làm toán VI - 4
_______________________________________________________________
Trong phép tính có số tràn chứng tỏ kết quả là số dương. Số 1 cộng thêm vào xem như
lấy từ số nhớ đem qua.
Tóm lại, để thực hiện bài toán trừ, A-B, ta cộng A với bù 1 của B. Dựa vào sự có mặt
hay không của số tràn mà có biện pháp xử lý kết quả:
- Nếu số tràn =0, kết quả là số âm (hoặc =0) , ta phải lấy bù 1 của kết quả và thêm dấu
- để đọc.
- Nếu số tràn =1, ta cộng thêm 1 vào để có kết quả cuối cùng (bỏ qua bit tràn) là một
số dương.
6.3 phép trừ số nhị phân dùng số bù 2:
Phép toán dùng số bù 1 có một bất tiện là ta phải thêm bài toán cộng 1 vào, để tránh
việc này ta dùng phép toán với số bù 2
Cho hai số dương A và B có n bit
a/ - A<B
Tính A-B:
A-B = A-B+2n-2n
= A+(2n - B ) - 2n
= A+(B )2 - 2n
= - {2n - [A+(B )2] }
= - [A+(B )2]2
Vậy A-B có được bằng cách cộng số bù 2 của B vào A rồi lấy bù 2 của tổng và thêm
dấu trừ. Như vậy ta đã chuyển phép tính trừ thành phép cộng
Thí dụ 6: Tính 1001 - 11010 dùng số bù 2
Ta có A = 01001 (thêm số 0 vào để có 5 bit như số B)
B = 11010 ⇒ (N2)2 = 00110
A-B = - [A+(B )2]2 = - (01001+00110) =- (01111)2
= - (10001)
Ta được lại kết quả trên
Để thấy dấu trừ được nhận ra như thế nào, ta viết lại phép toán:
Không có số tràn là dấu hiệu của kết quả âm và ta phải lấy bù 2, thêm dấu trừ để đọc
kết quả cuối cùng: (01111)2 = - 10001
b/ - A ≥B
Kết quả A-B là 0 hoặc số dương, phép tính được thực hiện theo qui tắc sau:
Cộng A với (B)2 và không quan tâm tới số nhớ ở vị trí 2n
Thí dụ 7 : Tính 110101 - 100110 dùng số bù 2
A = 110101 và B = 100110 ⇒ (B)2 = 011010
Có số tràn, kết quả là số dương. Bỏ qua số tràn và đọc ngay kết quả mà không phải
biến đổi: 001111 = 1510
Nguyễn Trung Lập KỸ THUẬT SỐ

_________________________________________________________________Chương 6
Mạch làm toán VI - 5
_______________________________________________________________
Thí dụ 8 : Tính 10110 - 10110
A = 10110 và B = 10110 ⇒ (B)2 = 01010
Bỏ qua số tràn ta được A-B =00000.
6.4 Phép toán với số có dấu
Cho tới giờ chúng ta thực hiện các phép toán với số không dấu và đôi khi xuất hiện
dấu trừ trong kết quả. Trong máy tính, điều này có thể khắc phục được bằng cách dùng số có
dấu.
Với qui ước số dương có bit dấu là 0 và số âm có dấu là 1
Thí dụ 9: +1010 = 01010 +1510 = 01111 +2310 = 010111
-1010 = 10110 - 1510 = 10001 - 2310 = 101001
Có thể thấy rằng số âm của một số là số bù 2 của nó kể cả bit dấu.
Với cách biểu diễn số có dấu, phép toán trừ trở thành phép toán cộng:
A-B = A+(-B )
Thí dụ 10: Tính A-B =01110 - 01001; B = 01001 = +910 ⇒ - 910 = 10111
Bit dấu =0 chỉ kết quả dương, bỏ bit tràn C’2.
Vậy A-B = 00101 [(+1410 )-(+910)] = +510
Nếu A hoặc B đều dương hoặc âm , kết quả có thể cần thêm một bit do tràn số. Trong
trường hợp này bit tràn đầu tiên thuộc kết quả và C’2 là bit dấu
Thí dụ 11: Tính A+B với A = 01110 (+1410) và B = 01001 (+910)
Kết quả là 010111 = +2310 với C’2 = 0 là bit dấu
Nguyễn Trung Lập KỸ THUẬT SỐ

