作业|学习资料|样卷

计算机组成实践2018年秋期末模拟题题解

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

你可以在这里下载到模拟题题面:

你可以在这里下载到我的指令系统和汇编代码:


INL RD,从 IO 单元的低 8 位获得数据,并存入通用寄存器 RD。

显然,这是一个 8 位的指令:

  • 第 1~3 位是我定义的指令码,不妨取 001
  • 第 4 位是 0
  • 第 5~6 位是 RS, 在这里取任意值,不妨取00
  • 第 7~8 位是 RD

0010XXRD

在设计指令的时候,0010 的散转地址是 640,因此,可以令INL RD这句指令的指令码是 20。

需要注意的是,INL R0INL R1INL R2INL R3的微指令必须不同,但是他们产生的微地址必须相同,这意味着,前 4 位必须是 0010,即 16 进制下的 2,而后 4 位必须不同,同时需要保证,最后 2 位用 00 表示 R0、01 表示 R1、10 表示 R2、11 表示 R3。

那么,指令就可以写成:

INL R0 20 1
INL R1 21 1
INL R2 22 1
INL R3 23 1

在微程序的设计中,源地址选择 IOR,目的地址选择 RWR。

这是单条微指令,所以执行后 PC 递增,且结尾变址。

关键是总线规则。

为了使得 DX 和 CX 都能作为目标寄存器,那 OP 必须为 0,同时,IO 单元是需要取出低字节,所以总线规则应该是偶字节送出,由于目标寄存器是由 RD 指定的,所以目标寄存器可以看作只有 8 位,所以送到高字节就好了。因此,总线规则是 010。

1543722136459

测试,结果正确,不管 RD 取值为何,都能得到正确的结果。

INH RD,从 IO 单元的高 8 位获得数据,并存入通用寄存器 RD。

类似的,区别只是需要注意总线规则是奇送奇。

0100RSXX

INH R0 40 1
INH R1 41 1
INH R2 42 1
INH R3 43 1

1543722312250

OUTL RS,将通过寄存器 RS 的数据送出到 IO 单元的低 8 位。

0110RSXX

类似,需要注意 RS 的取值,即后 4 位为 0000、0100、1000、1100。

OUTL R0 60 1
OUTL R1 64 1
OUTL R2 68 1
OUTL R3 6C 1

1543725621381

SWITCH RD,将 RD 中高 4 位和低 4 位的值交换,并存回 RD。

例如,原来的数值为 0xA3,则交换后为 0x3A。

如果是高 8 位和低 8 位交换,那就相对简单,只要 R0->TMP、R1->R0、TMP->R1 即可。

现在是 4 位,最先想到的是位运算,但是位运算显然不合要求,首先就没有办法把需要进行位运算的掩码值存进去。

可以用循环位移。

例如原来是 1234,希望变成 1243,那么可以首先将 RD 的低 8 位复制到 AX 的低 8 位、将 RD 的低 8 位复制到 AX 的高 8 位,此时 AX 为 3434,只要通过循环左移得到 4343 即可。

于是,循环左移 4 次。

得到 ALU 的运算结果以后,将 ALU 的低 8 位赋值给 RD 的低 8 位即可。

总线规则取偶送奇。

1543726256204

JMPL RS,跳转到寄存器 RS 中值所指向的地址执行机器指令。

只考虑实现这个指令,是非常简单的,甚至比之前的JMP *更简单,因为只要令 RS 寄存器的值覆盖掉 PC 的值即可。

但是并不是简单地令源地址为 RRD、目的地址为 PC。需要注意的是只能把 REG 的低字节赋值给 PC 的低字节,且需要将 PC 的高字节置为 00。

1543726503185

如图便是错误的示例。

可以考虑先把 REG 的低字节丢到 BX 中,然后 B->PC。

1543726689418

1543726701510

现在的问题是怎么实现汇编程序。

data    segment         ;将程序装载到数据存储器
        assume ds:data

        org   0
start:
        INH R3
        INL R0
        INH R1
        SWITCH R0
        OUTL R0
        JMPL R3
data    ends
        end   start

由于题目说,不能预先给内存区域赋值,但是不包括寄存器,所以可以令 R3 的值为 JMPL 到的地址,显然,循环的部分是从 SWITCH 到 JMPL,所以可以令 R3 的初值为 03。

注意到,IN 的操作已经不影响整个循环的流程,所以可以令 R3 的初值为 01。

特别的,如果 INH 的高位为 00,那么,R3 就可以不用设置,每次 JMP 到 RS 的高位即可。

INL R0 20 1
INL R1 21 1
INL R2 22 1
INL R3 23 1
INH R0 40 1
INH R1 41 1
INH R2 42 1
INH R3 43 1
OUTL R0 60 1
OUTL R1 64 1
OUTL R2 68 1
OUTL R3 6C 1
SWITCH R0 80 1
SWITCH R1 85 1
SWITCH R2 8A 1
SWITCH R3 8F 1
JMPL R0 A0 1
JMPL R1 A4 1
JMPL R2 A8 1
JMPL R3 AC 1

流程图如下:

1543851131785

共 162 条评论
说点什么

avatar

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

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

  订阅评论动态  
最新 最旧 得票最多
提醒
    YaK
    YaK
    离线
    3 月 之前 [2019-12-26 · 19:08]
    QQ浏览器 10.5.3751.400 Windows 10

    下载的代码中没有微地址为0741的微指令,我补了一下发现只有在字传递的时候PC的前两位才是0(设CX为1234,则PC为0034,不是字传递时PC为3434),不知道是不是正常现象,感觉用奇偶传递应该也能实现的样子。

    mmm
    mmm
    离线
    1 年 之前 [2018-12-26 · 20:38]
    Chrome 70.0.3538.110 Windows 10

    请问不用在流程图里说明PC+1吗?

    qqq
    qqq
    离线
    11 天 之前 [2020-3-22 · 10:04]
    Firefox 74.0 Windows 10

    666

    ssh
    ssh
    离线
    3 月 之前 [2019-12-27 · 8:30]
    QQ浏览器 10.4.3505.400 Windows 10

    66

    Tom
    Tom
    离线
    3 月 之前 [2019-12-27 · 5:59]
    Chrome 79.0.3945.88 Windows 10

    !?

    12
    12
    离线
    3 月 之前 [2019-12-26 · 23:15]
    Chrome 69.0.3947.100 Windows 10

    感谢

    wenjielcr
    wenjielcr
    离线
    3 月 之前 [2019-12-26 · 22:58]
    Chrome 69.0.3947.100 Windows 10

    666

    2313
    2313
    离线
    3 月 之前 [2019-12-26 · 22:55]
    Chrome 79.0.3945.88 Windows 10

    123

    cn
    cn
    离线
    3 月 之前 [2019-12-26 · 22:53]
    Chrome 79.0.3945.88 Windows 10

    tql

    wanna
    wanna
    离线
    3 月 之前 [2019-12-26 · 22:28]
    搜狗浏览器 2.X Windows 10

    tql

    楼主太强了
    楼主太强了
    离线
    3 月 之前 [2019-12-26 · 22:25]
    Firefox 71.0 Windows 10

    ding!

    1
    1
    离线
    3 月 之前 [2019-12-26 · 22:22]
    Chrome 79.0.3945.88 Windows 10

    1

    大侠
    大侠
    离线
    3 月 之前 [2019-12-26 · 22:16]
    Chrome 78.0.3904.108 Windows 10

    mb
    mb
    离线
    3 月 之前 [2019-12-26 · 22:06]
    QQ浏览器 10.5.3863.400 Windows 10

    Saimi
    Saimi
    离线
    3 月 之前 [2019-12-26 · 21:52]
    Chrome 79.0.3945.88 Windows 10

    nb

    Ward114
    Ward114
    离线
    3 月 之前 [2019-12-26 · 21:36]
    搜狗浏览器 2.X Windows 10

    %%%

    build
    build
    离线
    3 月 之前 [2019-12-26 · 21:25]
    Chrome 79.0.3945.88 Windows 10

    %%%

    666
    666
    离线
    3 月 之前 [2019-12-26 · 21:09]
    Chrome 63.0.3239.132 Windows 10

    666

    msw
    msw
    离线
    3 月 之前 [2019-12-26 · 21:00]
    Chrome 79.0.3945.88 Windows 10

    感谢

    eke
    eke
    离线
    3 月 之前 [2019-12-26 · 20:26]
    Firefox 71.0 Windows 10

    谢谢你!

    ClimaxYu
    ClimaxYu
    离线
    3 月 之前 [2019-12-26 · 19:54]
    Edge 18.18362 Windows 10

    .

    xxxl
    xxxl
    离线
    3 月 之前 [2019-12-26 · 19:18]
    Chrome 79.0.3945.79 Windows 10

    很有用,谢谢

    jacob
    jacob
    离线
    3 月 之前 [2019-12-26 · 19:14]
    Chrome 79.0.3945.88 Windows 10

    tql
    tql
    离线
    3 月 之前 [2019-12-26 · 19:12]
    Chrome 79.0.3945.88 Windows 10

    tql

    qnwzq
    qnwzq
    离线
    3 月 之前 [2019-12-26 · 18:42]
    Firefox 70.0 Windows 10

    qdwzq

    kpp
    kpp
    离线
    3 月 之前 [2019-12-26 · 18:41]
    Chrome 79.0.3945.88 Windows 10

    tpl

    qdwnb
    qdwnb
    离线
    3 月 之前 [2019-12-26 · 17:01]
    Chrome 79.0.3945.88 Windows 10

    6666666

    qq
    qq
    离线
    3 月 之前 [2019-12-26 · 16:35]
    Firefox 69.0 Windows 10

    666

    miss
    miss
    离线
    3 月 之前 [2019-12-26 · 14:49]
    Edge 18.18362 Windows 10

    大佬tql

    YaK
    YaK
    离线
    3 月 之前 [2019-12-26 · 14:47]
    QQ浏览器 10.5.3751.400 Windows 10

    Edgarei
    Edgarei
    离线
    3 月 之前 [2019-12-26 · 14:11]
    Chrome 79.0.3945.88 Windows 10

    大佬tql

    loveBilly
    loveBilly
    离线
    3 月 之前 [2019-12-26 · 14:00]
    Firefox 71.0 Windows 10

    感谢分享