24/05/2018, 18:31

MẠCH LÀM TOÁN

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 = 2 n - N (số 2 n gồm bit 1 và n bit 0 theo sau) Số bù 1 : (N) 1 = (N) 2 -1 = 2 n - N - 1 Thí dụ 1: N = ...

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)

- 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à:

- 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:

- Khi C=0

= b2 nếu b1=0 và b2¯ size 12{ {overline {b rSub { size 8{2} } }} } {} nếu b1 = 1

= b3 nếu b1 và b2 đều =0

= b3¯ size 12{ {overline {b rSub { size 8{3} } }} } {} 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¯ size 12{ {overline {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.

0