第三周运算电路基础

第三周运算电路基础PDF文档

第1讲 数字逻辑电路基础

1. 布尔代数和基本逻辑电路(16分钟)

最基本的逻辑运算有与、或、非运算,异或运算表示所有变量中有奇数个1,则结果为1。

视频后面介绍的是多路复用器。

2. 无符号数加法器(15分钟)

全加器(Fully adder)实现一位加运算。

只要两个输入A、B和低位进位Cin中有两个以上为1,本位向高位的进位Cout就为1。

只有当两个输入A、B和低位进位Cin中有奇数个1,本位和F才为1。

n位加法器实现的是n位无符号数的加运算。

n位加法器的输入包括一位低位进位Cin和两个n位的加数A、B。

n位加法器的输出包括一个n位的和数F和一位高位进位Cout。

所有算术运算部件都是基于n位加法器构建的。

以下关于n位带标志加法器的叙述中,错误的是( D )。

A.n位带标志加法器和n位加法器一样,都可用于实现两个n位无符号数的加运算。

B.n位带标志加法器的输入与n位加法器的输入完全一样,包含两个n位加数和一位低位进位。

C.n位带标志加法器的输出比n位加法器的输出多了几个标志信息。

D.通常的标志信息包括溢出标志OF、符号标志ZF、零标志SF和进位/借位标志CF。

正确说法:通常的标志信息包括溢出标志OF、符号标志SF、零标志ZF和进位/借位标志CF。

3. 整数加/减运算器和ALU(12分钟)

以下关于整数加/减运算器的叙述中,错误的是(B )。

A.整数加/减运算器可以实现两个补码的加/减运算。

B.整数加/减运算器不可以实现两个无符号数的加/减运算。

C.整数加/减运算器的输入为两个运算的操作数和一位控制信号sub。

D.整数加/减运算器通过输出的标志信息确定运算结果是否正确。

ALU可以实现与、或、非等逻辑运算。

控制端ALUop可以控制ALU实现哪种运算。

ALU是CPU中的主要运算部件之一。

第2讲 从C表达式到逻辑电路

从C表达式到逻辑电路(10分钟)

以下对运算类指令的叙述中,错误的是(D )。

A.指令系统中有专门的带符号整数乘和带符号整数除运算指令。

B.指令系统中有专门的无符号整数乘和无符号整数除运算指令。

C.指令系统中有专门的无符号整数移位和带符号整数移位运算指令。

D.指令系统中有专门的浮点数左移和右移运算指令。

第3讲 C语言中的各类运算

C语言中的各类运算(25分钟)

8位无符号整数1001 0101右移一位后的结果为(  0100 1010  )。

若8位带符号整数的补码表示为1001 0101,则右移一位后的结果为( 1100 1010 )。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int x = -65535;
    //(3)x的最低有效字节全变为0,其余各位取反。
    printf("%d",((x^~0xFF)>>8)<<8);
    //写成(~x)>>8<<8也可

}
print(bin(-65535))  
print(bin(65280))
-0b1111111111111111
0b1111111100000000

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i = 32768;
    short si = (short)i;
    int j = si;
    printf("%hd\n",si);
    printf("%d\n",j);
}
-32768
-32768

-128的补码 详解

一、前提: (1)本博客所有内容均指在8位机器下的整数转换及表示; (2)-128的绝对值在无符号整型下的表示:128D = 1000 0000B; (3)溢出丢弃进位法则:在用有符号整型表示二进制数时,当后面的非符号位发生溢出时,符号位不变,直接丢弃溢出的进位。

二、开始转换:

  1. -128原码 = 1000 0000 说明:最高位1表示符号位,后7位发生了溢出,进位丢弃,符号位不变。

  2. -128反码 = 1111 1111 说明:除符号位外,其余各位对原码取反。

  3. -128补码 = 1000 0000 说明:在反码的末位加1,从而使后7位再次发生溢出,进位丢弃,符号位不变。

同理,-32768的补码是1000 0000 0000 0000。

第4讲 整数加减运算

1. 加减运算生成的标志信息(16分钟)

假定整数加/减运算器的两个输入端分别是A和B,以下关于整数加/减运算器的叙述中,错误的是( C)。

A.当控制端Sub为1时,执行的是A加B的反码加1,因此进行的是减运算。

B.当需要比较两个整数的大小时,编译器生成定点数减法指令,因此在整数加/减运算器中执行减运算。

C.不管是带符号整数还是无符号整数,做减运算时,只要借位标志CF=1,就说明有借位,即A小于B。

D.整数加/减运算器生成的所有标志信息通常会记录在一个专门用于记录机器状态信息的寄存器中。

以下关于n位带标志加法器的叙述中,错误的是( C )。

A.在整数加/减运算器中的加法器是n位带标志加法器。

B.符号标志SF与和的符号位Fn-1相同。

C.进位标志CF等于加法器的进位输出Cout。

D.当两个加数的符号相同且不同于和的符号,则溢出标志OF=1。

2. 加减运算溢出公式及举例(17分钟)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned int x = 134;
    unsigned int y = 246;
    int m = x;
    int n = y;

    unsigned int z1 = x-y;
    unsigned int z2 = x+y;
    printf("%u\n",z1);
    printf("%u\n",z2);
    int k1 = m-n;
    int k2 = m+n;
    printf("%d\n",k1);
    printf("%d\n",k2);
}
4294967184
380
-112
380

第三周小测验

1CPU中能进行算术运算和逻辑运算的最基本运算部件是( A )。

A.ALU
B.移位器
C.多路选择器
D.加法器

2ALU有一个操作控制端ALUop,ALU在ALUop的控制下执行相应的运算。以下给出的运算中,( B )运算不能由ALUop直接控制完成。

A.传送(ALU输入直送为输出)
B.乘法和除法
C.加法和减法
D.与、或、非等逻辑运算

解析: B、ALU通常仅用于进行加、减以及各类逻辑运算和传送操作,乘法和除法运算可以利用ALU分步骤进行加/减和移位来完成,因此,在进行乘或除运算时,每个步骤送到ALUop的控制信号可以控制进行加/减和移位操作,但不能用一个控制信息直接使ALU完成乘或除运算。

3假设变量x的位数为n(n>=8),x的最低有效字节不变,其余各位全变为0,则对应C语言表达式为( B )。

A.x | ~ 0xFF
B. x & 0xFF
C.x ^ 0xFF
D.x | 0xFF

4假设变量x的位数为n(n>=8),x的最高有效字节不变,其余各位全变为0,则对应C语言表达式为( C )。

A.((x&0xFF)<<(n-8))>>(n-8)
B.((x&0xFF)>>(n-8))<<(n-8)
C.(x>>(n-8))<<(n-8)
D.(x<<(n-8))>>(n-8)

5考虑以下C语言代码:

short  si = –8196;
int  i = si;

执行上述程序段后,i的机器数表示为( C )。

A.0000 DFFCH
B.FFFF 9FFCH
C.FFFF DFFCH
D.0000 9FFCH

6若在一个8位整数加/减运算器中完成x–y的运算,已知带符号整数x=–69,y=–38,则加法器的两个输入端和输入的低位进位分别为( A )。

A.1011 1011、0010 0101、1
B.1011 1011、1101 1010、1
C.1011 1011、0010 0110、1
D.1011 1011、1101 1010、0

解析: A、–69和–38的机器数分别是1011 1011、1101 1010,因为是做x-y,所以,整数加/减运算器中的控制端sub为1,即低位进位为1,并控制加法器的第二个输入端各位取反,为0010 0101。

7若在一个8位整数加/减运算器中完成x+y的运算,已知无符号整数x=69,y=38,则加法器的两个输入端和输入的低位进位分别为( C )。

A.0100 0101、1101 1010、0
B. 0100 0101、1101 1010、1
C.C.0100 0101、0010 0110、0
D.0100 0101、0010 0110、1

解析: C、69和38的机器数分别是0100 0101、0010 0110,因为是做加法,所以,整数加/减运算器中的控制端sub为0,即低位进位为0。

8若在一个8位整数加/减运算器中完成x+y的运算,已知x=63,y= –31,则x+y的机器数及相应的溢出标志OF分别是( B )。

A.20H、1
B.20H、0
C.1FH、1
D.1FH、0

解析: B、63和–31的机器数分别是0011 1111、1110 0001,因为是做x+y,所以,在加法器中将两个机器数直接相加,得到结果为0010 0000(20H),并生成进位Cout=1,因为两个加数符号位相异,因此,不会发生溢出,即OF=0。

9若在一个8位整数加/减运算器中完成x+y的运算,假定变量x和y的机器数用补码表示为[x]补=F5H,[y]补=7EH,则x+y的值及相应的溢出标志OF分别是( D )。

A.119、0
B.119、1
C.115、1
D.115、0

解析: D、x和y的机器数是用补码表示的,分别是1111 0101、0111 1110,因为是做x+y,所以,sub=0,即1111 0101 + 0111 1110 +0 = 0111 0011,其真值为127-12=115。因为两个加数符号位相异,所以不会发生溢出,即OF=0。

10若在一个8位整数加/减运算器中完成x–y的运算,假定变量x和y的机器数用补码表示为[x]补=F5H,[y]补=7EH,则x–y的值及相应的溢出标志OF分别是( A )。

A.119、1
B.115、1
C. 115、0
D.119、0

解析: A、x和y的机器数是用补码表示的,分别是1111 0101、0111 1110,因为是做x-y,所以,sub=1,y对应的机器数各位取反,即1111 0101 + 1000 0001 +1 = 0111 0111,其真值为127-8=119。因为两个加数符号位为1,而结果符号为0,所以发生了溢出,即OF=1。