作业|学习资料

计算机组成实践总线规则习题解答

jxtxzzw · 12月7日 · 2018年 · 1333次已读

请完成如下实验,并总结规律:


设计机器指令 INL DR,实现从Input的低8位输入数据到DR寄存器。并通过设置不同的W,XP,OP值,验证Input到DR的数据通路。

实验开始前,设置Input的值为1234h,完成下表:

首先,明确微指令的组成是,前3位为操作码、第4位固定0或者1,第5~6位为RS,第7~8位是RD。

由题目要求,显然,第5~6位是任意值,第7~8位是RD。

那么,应该是4位散转,第4位取0。

由此,指令格式为0010XXRD。

其中前3位是指令操作码,不妨令INL为001。XX表示任意值,不妨取XX为00。

特别的,RD的取值为R0(00)、R1(01)、R2(10)、R3(11)。

基于以上的分析可得,INL R0为00100000、INL R1为00100001、INL R2为00100010、INL R3为00100011。

显然,这四条指令在指令系统中必须分写四条(因为软件不认识 INL RD这样的写法),但是在微程序中他们一定做的是同一件事,这意味着微地址散转一定是同一个地址。

那么,我们令Ids为1,取4位散转即可。这样的话,对于上面4条指令(20、21、22、23),散转地址都是640。对应的,可以写出指令系统。这些指令的长度都为1。

img

在微程序,应该令源选择IOR,目的选择通用寄存器,然后按要求分别设置不同的W,XP,OP值。

img

在640的地方,选择从I/O到通用寄存器。

编写汇编代码,然后装载运行。

img

然后尝试先令W,XP,OP为0、0、0,可以看到,这是一个奇到奇的传递,且观察到选通的通用寄存器是CX,值为FF12,并没有选通DX。

img

尝试先令W,XP,OP为0、0、1,可以看到,这是一个奇到偶的传递,且观察到选通的通用寄存器是CX,值为FF12,并没有选通DX。

img

img

类似地,修改W、XP、OP的值,可以得到INL R0剩下的几组记录。

特别需要注意的是,W、XP、OP取值为1、0、1的时候,CX是1212。W、XP、OP取值为1、1、0的时候,总线规则没有信息显示。

之后修改汇编代码的R0为R1,重复上面的步骤,记录INL R1的结果。

与之前的结果比较,可以看到,这次奇字节和偶字节的传递比较符合预期,不像之前那个一样只有传到最低位。

特别需要注意的是,W、XP、OP取值为1、0、1的时候,CX还是1212。W、XP、OP取值为1、1、0的时候,似乎是寄存器是CL就接受INL、寄存器是CH就接受INH。

下面尝试DX,即R2和R3。

img

只需要修改汇编代码的R1为R2,其他都不需要修改,重复上面的步骤。

观察到成功选择了DX。

img

但是当W、XP、OP取值为0、0、1的时候,却又选回了CX。

这是因为,如果要选通DX,那么OP的值必须为0,当且仅当OP的值为0的时候,设置的RD才会对R2和R3有效。

这也就意味着,后面的尝试中,所有的OP取值为1的,都可以不用尝试了,那些选的都是CX。

类似地,执行INL R3的时候,发现奇->奇、奇->偶都比较正常。

最后的结果如下表。

W|XP|OP取值总线规则INL R0INL R1INL R2INL R3
000奇->奇CX=FF12 DX=FFFFCX=12FF DX=FFFFCX=FFFF DX=FF12CX=FFFF DX=12FF
001奇->偶CX=FF12 DX=FFFFCX=FF12 DX=FFFFCX=FF12 DX=FFFFCX=FF12 DX=FFFF
010偶->奇CX=FF34 DX=FFFFCX=34FF DX=FFFFCX=FFFF DX=FF34CX=FFFF DX=34FF
011偶->偶CX=FF34 DX=FFFFCX=FF34 DX=FFFFCX=FF34 DX=FFFFCX=FF34 DX=FFFF
100奇->奇CX=FF12 DX=FFFFCX=12FF DX=FFFFCX=FFFF DX=FF12CX=FFFF DX=12FF
101奇->偶CX=1212 DX=FFFFCX=1212 DX=FFFFCX=1212 DX=FFFFCX=1212 DX=FFFF
110CX=FF34 DX=FFFFCX=12FF DX=FFFFCX=FFFF DX=FF34CX=FFFF DX=12FF
111字传递CX=1234 DX=FFFFCX=1234 DX=FFFFCX=1234 DX=FFFFCX=1234 DX=FFFF

结论:

1、 指令系统最后2位决定的是R0~R3中的哪一个。他们的指令码不一样、散转地址一样,程序会在执行的时候自动选择是哪一个通用寄存器。

2、 当选择的是寄存器的低位时,源的奇偶字节正常工作,但是目的寄存器的奇偶字节无论怎么选择都只会存入低字节。当选择的是寄存器的高位时,源和目的的奇偶字节正常工作。

3、 如果要选择DX,OP必须为0。这也意味着很多操作在选择DX时是无法完成的,必须通过其他手段(例如分步)完成。

4、 特别注意W、XP、OP为1、1、0这组情况,是自动。即目的寄存器选的是低位,那么就自动把源的低位存放进去;目的寄存器选的是高位,那么就自动把源的高位存放进去。


在微程序中设计相关微指令(不一定要设计机器指令对应的微程序),验证RS的数据进入AX时,W, XP和OP的作用。实验开始前,设置CX=1234h,DX=5678h。完成下表:

与上一题类似,尝试W、XP、OP的不同取值。

首先明确微指令,还是和上面一样,指令码不妨就定001、第4位取0、第5~6位是源寄存器,即R0~R3(00、01、10、11),第7~8位任意,不妨取00。

由此,0010RS00。

img

根据上面的分析,指令码分别为20、24、28、2C。

在微程序中,源编码选择通用寄存器RRD,目的编码选择AX。

img

观察得到结果。

img

这里为了方便操作,对微程序做如下修改:

img

img

img

第一步还是按照要求执行RS->AX,但是在执行以后,马上执行IOR->AX,这样,只要令I/O为0000,之后每次运行后执行的IOR->AX都相当于是对AX进行了复位,可以正常执行下面的指令而不用担心上一次的结果残留影响观察。

这样,在执行完指令以后,一次记录一行中的4个结果,然后修改W、XP、OP的值,继续。

结果如下:

W|XP|OP取值总线规则R0->AXR1->AXR2->AXR3->AX
000奇->奇3400340034003400
001奇->偶0034003400340034
010偶->奇3400120078005600
011偶->偶0034001200780056
100奇->奇3400340034003400
101奇->偶3434343434343434
1101200120056005600
111字传递1234121256785656

结论:

1、 指令系统第5~6位决定的是R0~R3中的哪一个。他们的指令码不一样、散转地址一样,程序会在执行的时候自动选择是哪一个通用寄存器。

2、 当DX作为源寄存器的时候,XP值必须为1,否则只能选择CX。

3、 在RS->AD操作中,奇偶字节与高低字节,在源和目的寄存器上是相反的。

4、 自动的总线规则,由于AX默认选择高位,所以就自动只传递高位。

5、 字传递的总线规则当选择高位时能够复制整个字、否则会复读某两位。


设计机器指令MOV RS, RD,实现将源寄存器RS的内容复制到目标寄存器RD。并通过设置不同的W, XP和 OP值验证数据通路。

实验开始前,设置CX=1234h,DX=5678h。完成下表:

指令叫MYCOPY,格式为0010RSRD。

那么,如果是MYCOPY R0,R0,就是00100000,就是20。类似地,MYCOPY R0,R1,就是00100001,就是21。

img

微程序也非常简单,就是源寄存器到目的寄存器。

img

观察到,CX和DX的值都没有发生变化。

继续修改W、XP、OP取值,重复。

之后修改指令系统,改源为R1、R2、R3,重复。

img

img

RS->RDW|XP|OP取值
000001010011100101110111
R0->R0CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=3434 DX=5678CX=1234 DX=5678CX=1234 DX=5678
R0->R1CX=1234 DX=5678CX=1212 DX=5678DX=3434 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1212 DX=5678CX=1234 DX=5678CX=1234 DX=5678
R0->R2CX=1234 DX=5678CX=1278 DX=5678CX=1234 DX=5634CX=1234 DX=5678CX=1234 DX=5678CX=7878 DX=5678CX=1234 DX=5634CX=1234 DX=5678
R0->R3CX=1234 DX=5678CX=1256 DX=5678CX=1234 DX=3478CX=1234 DX=5678CX=1234 DX=5678CX=5656 DX=5678CX=1234 DX=1278CX=1234 DX=5678
R1->R0CX=1234 DX=5678CX=3434 DX=5678CX=1212 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=3434 DX=5678CX=1212 DX=5678CX=1234 DX=5678
R1->R1CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678
R1->R2CX=1234 DX=5678CX=7834 DX=5678CX=1234 DX=5612CX=1234 DX=5678CX=1234 DX=5678CX=7834 DX=5678CX=1234 DX=5612CX=1234 DX=5678
R1->R3CX=1234 DX=5678CX=5634 DX=5678CX=1234 DX=1278CX=1234 DX=5678CX=1234 DX=5678CX=5634 DX=5678CX=1234 DX=1278CX=1234 DX=5678
R2->R0CX=1234 DX=5678CX=1234 DX=5634CX=1278 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=3434CX=1278 DX=5678CX=1234 DX=5678
R2->R1CX=1234 DX=5678CX=1234 DX=5612CX=7834 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=1212CX=5634 DX=5678CX=1234 DX=5678
R2->R2CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=7878CX=1234 DX=5678CX=1234 DX=5678
R2->R3CX=1234 DX=5678CX=1234 DX=5656CX=1234 DX=7878CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5656CX=1234 DX=5678CX=1234 DX=5678
R3->R0CX=1234 DX=5678CX=1234 DX=3478CX=1256 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=3478CX=1256 DX=5678CX=1234 DX=5678
R3->R1CX=1234 DX=5678CX=1234 DX=1278CX=5634 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=1278CX=5634 DX=5678CX=1234 DX=5678
R3->R2CX=1234 DX=5678CX=1234 DX=7878CX=1234 DX=5656CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=7878CX=1234 DX=5656CX=1234 DX=5678
R3->R3CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678CX=1234 DX=5678

结论:

1、000、011、100、111是假的。

2、由实验1和实验2可知,DX作为源寄存器的时候要求XP为1、DX作为目标寄存器的时候要求OP为0,因此,当且仅当W、XP、OP为0、1、0或者1、1、0的时候,才有可能实现任意通用寄存器到通用寄存器的赋值,其余情况都不可能完成。

3、对于010来说,是完全符合预期的结果,用给定的高低位覆盖了目标的高低位。对于110来说,部分指令的执行结果符合预期,但是也有部分指令(例如R2->R1)的结果是不正确的。


设计机器指令OUTL RD,实现将寄存器RD的值输出到OUT低8位。并验证RD如何作为源寄存器。参考上例,请自己设计表格,并得出结论。

CX和DX都有可能作为源寄存器,然而当且仅当XP为1的时候,源寄存器才会选择DX,否则无论RS是什么都只能选CX。对于本题来说,显然RD应该为CX或DX之一,因此,W、XP、OP的结果只剩下4种选择(010、011、110、111)。

因此,下面只需要对这4种可能做验证。

实验开始前,令寄存器CX=1234,令DX=5678。

img

img

img

W|XP|OP取值总线规则R0->OUTR1-> OUTR2-> OUTR3-> OUT
010偶->奇34FF12FF78FF56FF
011偶->偶FF34FF12FF78FF56
11012FF12FF56FF56FF
111字传递1234121256785656

观察上表结果,只有W、XP、OP取值为0、1、1时符合预期。

因此,微指令应该为,源编码选择RRD,目的编码选择IOW,总线规则为011。


设计微程序(确切地说,只需要个别微指令),验证AX+BX运算时,W, XP 和 OP的作用。

实验开始前,设置AX=1234h,BX=5678h,观察在W, XP, OP取不同值时的结果。请自己设计表格,并得出结论。

这里与DX无关,所以需要对8种可能做尝试。

首先定义MYADD指令,执行AX+BX。

源编码选择ALU,目的编码暂时不需要,因为不需要输出,只是为了观察结果。

img

例如,W、XP、OP取值为0、0、0的时候,AX+BX的结果为AC00。

img

W|XP|OP取值总线规则AX+BX
000奇->奇AC00
001奇->偶AC00
010偶->奇00AC
011偶->偶00AC
100奇->奇AC00
101奇->偶AC00
11068AC
111字传递68AC

结论:

1、 总线规则的源的奇偶决定了结果存放在ALU寄存器的高字节还是低字节。

2、 当总线规则为字节的时候,无论W、XP、OP值为多少,都是AX的低字节与BX的低字节相加。

3、 当总线规则为110或者111的时候,是整个AX与整个BX相加。


验证微指令RAM->IR时的散转下址0600是否可变。模型机中RAM->IR微指令的下址设置的都是0600,取指周期散转时,系统根据0600和IR的值经运算得到微程序入口地址。如果微指令RAM->IR的下址不是0600,那么微程序入口地址还是通过IR的值和0600运算得到吗?请设计实验和相关表格,并得出结论。

不能。

实验中,只要勾选IR,则自动变为取指变址。

此时无论如何设置微地址都不再有效。基址还是600H,所以最后微程序入口地址还是保持600H+IR的值。

共 2 条评论
说点什么

avatar

您可以根据需要插入表情、图片、音频、视频或者其他附件,也可以 @ 你需要提及的用户

  
不开心么么什么再见加油发火可以可怜可爱吐吐血吓呵呵哈哈哦哭哼喜欢嗯嘿嘿困圣诞坏笑圣诞调皮坏笑女汉子奸笑好的委屈宝宝害羞小清新心塞快哭了恭喜发财惆怅我最美抓狂抠鼻放空无奈晕汗泪奔温柔女生狗年生气笑笑泪衰调皮调皮女生鄙视酷静静额鼓掌
上传图片
 
 
 
上传视频和音频
 
 
 
上传其他类型文件
 
 
 
2 评论主题数
0 评论回复数
0 评论跟进人数
 
最近回复的评论
最热烈的讨论
2 评论人数
1IllusionBot 最近评论者

  订阅评论动态  
最新 最旧 得票最多
提醒
    1
    15 月 之前 [2019-12-26 · 19:36]
    Firefox 71.0 Windows 10

    111

    IllusionBot
    IllusionBot1 年 之前 [2018-12-7 · 12:59]
    Chrome 70.0.3538.110 Mac OS X 10_14_1

    感谢