计算机组成原理练习题
考点: 数进制转换
- 原码/反码/补码
\((100)_{10}=(01100100)_{2}=(64)_{16}=(144)_{8}\)
\((2/32)_{10}=(0.0001000)_{2}\)
\((-1)=(10000001)_{原码}=(11111110)_{反码}=(11111111)_{补码}\)
\((11100101)_{补码}=(-27)_{真值}\)
- \(x+y\)/ \(x-y\)
如果用补码计算下面算式?写出计算过程.(数值用8位二进制)
\((00000100)_{补}\)
+\((11110110)_{补}\)
-------------------
\((11111010)_{补}=(-6)_{真值}\)
-
判断溢出
\(S_{f1}S_{f2}=00\) 结果为正数, 无溢出
\(01\) 结果正溢
\(10\) 结果负溢
\(11\) 结果位负数, 无溢出\(x=+0.1100\), \(y=+0.1000\) , 求\(x+y\).
\([x]_{补}=00.1100\)
\([y]_{补}=00.1000\)
\([x]_{补}\) \(00.1100\)
+\([y]_{补}\) \(00.1000\)
--------------------
\(01.0100\)
符号位: "\(01\)", 表示已溢出, 正溢, 结果大于\(+1\)
\(x=-0.1100\), \(y=-0.1000\), 求\(x+y\)
\([x]_{补}=11.0100\)
\([y]_{补}=11.1100\)
\([x]_{补}\) \(11.0100\)
+\([y]_{补}\) \(11.1100\)
--------------------
\(10.1100\)
符号位: "\(10\)", 表示已溢出, 负溢, 结果大于\(-1\)
采用变形补码进行定点加减运算,已知\(x=0.10101\), \(y=1.10001\)求\(x+y=?\), 并判定是否产生了运算溢出.
\(x=0.10101\), \(y=1.10001\), 求\(x+y\)
\([x]_{补}=00.10101\)
\([y]_{补}=11.10001\)
\([x]_{补}\) \(00.10101\)
+\([y]_{补}\) \(11.10001\)
--------------------
\(100.00110\)
符号位: "\(00\)", 表示无溢出
考点: 硬件描述语言
硬件描述语言是电子系统硬件行为描述
/结构描述
/数据流描述
的语言
根据真值表,用HDL语言编写程序,设计出电路芯片,芯片名Xinpian.
a | b | outc |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 0 |
1 | 1 | 1 |
化简: \(\overline{a}b+ab\)
CHIP Xinpian
{
IN a, b;
OUT outc;
PARTS:
Not(in=a, out=Nota);
And(a=Nota, b=b, out=p1);
And(a=a, b=b, out=p2);
Or(a=p1, b=p2, out=outc);
}
根据真值表,用HDL语言编写程序,设计出电路芯片,芯片名Circuit。(提示:输入端:x,y ,输出端:z)
a | b | z |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
化简: \(\overline{ab}+ab\)
CHIP Circuit
{
IN a, b;
OUT z;
PARTS:
Not(in=a, out=Nota);
Not(in=b, out=Notb);
And(a=Nota, b=Notb, out=p1);
And(a=a, b=b, out=p2);
Or(a=p1, b=p2, out=z);
}
请根据原理图,写出HDL程序,说出功能
CHIP Abs
{
IN in, sel;
OUT A, B;
PARTS
Not(in=sel, out=Nots);
And(a=in, b=Nots, out=A);
And(a=in, b=Nots, out=B);
}
根据组成部件说出芯片名称
CHIP And
{
IN a, b;
OUT out;
PARTS:
Nand(a = a, b = b, out = x);
Not(in = x, out = out);
}
请根据门电路,实现或门
CHIP Or {
IN a, b;
OUT out;
PARTS:
Not(in = a, out = x);
Not(in = b, out = y);
Nand(a = x, b = y, out = out);
\(x=1\), \(y=2\)当\(x+y\)后,ALU的输出端\(zr\)的值为 \(3\)
\(x=1\), \(y=2\)时, ALU的六个控制端分别为:\(zx=0\), \(nx=0\), \(zy=0\), \(ny=0\), \(f=0\), \(no=0\)时输出端out的值为 \(x \& y\)后的值
\(x=+1\), \(y=+2\)时,当\(x+y\)后,ALU的输出端ng的值为 \(0\)
考点: 时序芯片
我们现在手上有512×16位的RAM512芯片,要求利用已有芯片RAM512、多路输出器和数据选择器构造出一个2K×16位的RAM2K的存储器芯片。
CHIP RAM2K
{
IN in[16], load, address[11];
OUT out[16];
PARTS:
DMux4Way(in=load, sel=address[9..10], a=a0, b=a1, c=a2, d=a3);
RAM512(in=in, load=a0, address=address[0..8], out=out0);
RAM512(in=in, load=a1, address=address[0..8], out=out1);
RAM512(in=in, load=a2, address=address[0..8], out=out2);
RAM512(in=in, load=a3, address=address[0..8], out=out3);
Mux4Way16(a=out0, b=out1, c=out2, d=out3, sel=address[9..10], out=out);
}
我们现在手上有2k×16位的RAM512芯片,要求利用已有芯片RAM2K、多路输出器和数据选择器构造出一个8K×16位的RAM8K的存储器芯片。
(1)计算出搭建出RAM8K存储器的地址线有多少根?
(2)搭建时需要用RAM2K这种芯片用多少片?
(3)用HDL语言构造出RAM8K的存储器芯片.
(4)写出每片存储器芯片的地址范围.
解答:
(1)RAM8K有13根地址线
(2)搭建RAM8K需要4片RAM2K芯片
(3)代码如下
CHIP RAM8K
{
IN in[16], load, address[13];
OUT out[16];
PARTS:
DMux4Way(in=in, load=load, address=address[11..12], a=a0, b=a1, c=a2, d=a3);
RAM2K(in=in, load=a0, address=address[0..10], out=out0);
RAM2K(in=in, load=a1, address=address[0..10], out=out1);
RAM2K(in=in, load=a2, address=address[0..10], out=out2);
RAM2K(in=in, load=a3, address=address[0..10], out=out3);
Mux4Way16(a=out0, b=out1, c=out2, d=out3, address=address[11..12], out=out);
}
\(2K=2^{11}\), 因为从0开始, 所以要减一.
\(0800H-1\)
\(1000H-1\)
\(1800H-1\)
\(2000H-1\)
(4)第一片: \(0000H-07FFH\), 第二片: \(0800H-0FFFH\), 第三片: \(1000H-17FFH\), 第四片: \(1800H-1FFFH\)
考点: 总线
总线(Bus)是计算机各种功能部件
之间传送信息
的公共通信干线
考点: 寻址
设R0为变址寄存器, R0=1000, PC为程序计数器, PC=2000H, D为形式地址, D=100; 存储器的有关数据如下表
地址 | 0080H | 0100H | 0165H | 0181H | 1000H | 1100H | 2100H |
---|---|---|---|---|---|---|---|
数据 | 0040H | 0080H | 0066H | 0100H | 0256H | 0181H | 0165H |
根据上述数据和寻址方式写出其有效地址和操作数
寻址方式 | 有效地址 | 操作数 | 寻址方式 | 有效地址 | 操作数 |
---|---|---|---|---|---|
直接 | 0100H | 0080H | 变址 | 1100H | 0181H |
寄存器 | 1000H | 1000H | 相对间接 | 0165H | 0066H |
变址间接 | 0181H | 0100H | 相对 | 2100H | 0165H |
寄存器间接 | 1000H | 0256H | 间接 | 0080H | 0040H |
一个64KB的存储器,地址线和数据线的总和是 16
一个RAM64K*16的存储器,地址线和数据线的总和是 32
考点: Hack机器语言
- 数据存储器: RAM, 以下用
M
表示 - 程序存储器: ROM, 指令在其中
- 程序计数器: PC
- 寄存器: D/A
- 指令集: 只包含两条指令
- A指令
- C指令
RAM和ROM的区别?
RAM是随机存取存储器,在程序执行过程中既可以读出又可以写入。
ROM是只读存储器,在程序的执行过程中只能读出信息,不能写入信息
指令 \(@52\)经过汇编后的二进制形式是什么?
0000 | 0000 | 0011 | 0100 |
---|
A指令是0开头, C指令是1开头
机器语言
机器语言是机器能直接识别的程序语言或指令代码
考点: 冯诺依曼体系结构
冯诺依曼体系结构是什么?
CPU 由哪些部分组成,有什么功能?
运算器的主要功能是完成算数运算和逻辑运算;
控制器的主要功能是对指令译码,并产生相应的控制信号。
指令集
CPU中用来计算和控制计算机系统的一套指令的集合
根据以下程序过程,请计算出 y 对应内存单元的值为多少?(提示:@后面写的数据为十进制数)
@60
D=A
@30
D=D&A
@5
D=D+A
@y
M=D
\(y=60 \& 30+5=00111100 \& 00011110+00000101=00011100+00000101=00100001\)
请简述下列程序功能
@x
D=M
@5
D=D-A
@xiao
D;JLT
@a
M=M+1
@END
0;JMP
(xiao)
@4
D=A
@y
M=M+D
(END)
@END
0;JMP
当\(x<5\)时, \(y=y+4\)
否则 \(a=a+1\)
判断\(x\), \(y\) 存储单元的值, 两个中的大的存储单元的值加100。\((X>Y -----X+100 或 Y>X-------Y+100)\)
@x
D=M
@y
D=M-D
@da
D;JGT
@100
D=A
@x
M=M+D
@END
0;JMP
(da)
@100
D=A
@y
M=M+D
(END)
@END
0;JMP
计算出1+2+...+100
@i
M=1
@sum
M=0
(LOOP)
@i
D=M
@100
D=D-A
@END
D;JGT
@i
D=M
@sum
M=D+M
@i
M=M+1
@LOOP
0;JMP
(END)
@END
0;JMP
写\(x=x+y\)
@y
D=M
@x
M=M+D
写\(x=x+5\)
@5
D=A
@x
M=M+D
用Hack程序语言来写出以下代码:当b<c 时,c=1 ,否则 c=c-1。(提示:b,c 都是存储单元编号)
@b
D=M
@c
D=M-D
@da
D;JGT
@c
M=M-1
@END
0;JMP
(da)
@c
M=1
(END)
@END
0;JMP
用Hack程序语言来写出以下代码:当x>=y 时,z=z+1 ,否则 z=1。(提示:x,y, z 都是存储单元编号)
@y
D=M
@x
D=M-D
@da
D;JGE
@z
M=1
@END
0;JMP
(da)
@z
M=M+1
(END)
@END
0;JMP
考点: CPU(中央处理器)
CPU结构如图所示其中包括寄存器,各部分之间的连线表示数据通路箭头表示信息传送方向.
数据缓冲寄存器或MDR 指令寄存器 或IR
主存地址寄存器或MAR 程序计数器 或PC
标签:load,END,..,芯片,Computer,address,Test,Organization,out From: https://www.cnblogs.com/Ahtelek/p/Computer-Organization-Test.html