• 计算机组成原理课程设计(1)


    指令设计

    计算机组成原理课程设计

    1、完成以下9条指令的设计:

    • LDI Rd,#data
    • LDA Rd,adr
    • STA @adr,Rs
    • LDR Rd,@Rs
    • ADD Rd,Rs
    • XOR Rd,Rs
    • JMP adr
    • JZ adr
    • HALT

    2.指令设计

    序号

    指令助记符

    功能介绍

    实现的功能

    操作码

    指令举例

    二进制机器代码

    地址

    微指令

    地址

    1

    LDI Rd,#data

    立即数寻址(双字节指令16位)

    立即数传输

    Rdß#data

    0001

    LDI R0 ,48H

    0001 00 00

    0100 1000

    00

    01

    00B22000

    01H

    2

    LDA Rd,adr

    直接寻址(取数)

    R1 <-[adr]

    0010

    LDA R1 ,[01H]

    0010 01 00

    0000 0001

    02

    03

    00B02020

    00122000

    02H

    20H

    3

    STA @adr,Rs

    间接寻址(存数,将Rs中的内容给[adr]地址)

    R0-> [adr]

    0011

    STA [0FH] ,R0

    0011 00 00

    0000 1111

    04

    05

    00B02021

    1F102022

    1F011000

    03H

    21H

    22H

    4

    LDR Rd,@Rs

    寄存器间接寻址(将RS地址中的数据存到Rs中)

    Rd <-[Rs]

    0100

    LDR R1,[R0]

    0100 01 00

    06

    1A001023

    00122000

    04H

    23H

    5

    ADD Rd,Rs

    寄存器寻址(计算RD和RS的值结果放到Rd中)

    Rd <-Rd+Rs

    0101

    ADD R1<-R1+R0

    0101 01 00

    07

    89021000

    05H

    6

    XOR Rd,Rs

    寄存器间接寻址(异或指令)

    Rd<-Rd异或Rs

    0110

    XOR R0<-R0+R1

    0110 00 01

    08

    16021000

    06H

    7

    JMP adr

    无条件跳转

    PC<-adr

    0111

    JMP PC<-adr

    0111 0000

    0000 1101

    09

    10

    00F02000

    07H

    8

    HALT

    停机

    1111

    11110000

    11

    00040000

    0FH

    9

    HALT

    停机

    1111

    11110000

    12

    00040000

    0FH

    10

    LDI Rd,#data

    立即数寻址(双字节指令16位)

    立即数传输

    Rdß#data

    0001

    LDI R1 ,

    0001 01 00

    11100010

    13

    14

    00B22000

    01H

    11

    ADD Rd,Rs

    寄存器寻址(计算RD和RS的值结果放到Rd中)

    Rd <-Rd+Rs

    0101

    ADD R1<-R1+R0

    0101 01 00

    15

    89021000

    05H

    12

    JZ adr

    条件转移指令(结果为0的转移)

    If ZF=1,PC<-adr

    1000

     为0跳转到停机的位置

    1000 0000

    00010011

    16

    17

    00902224

    00E02000

    00200000

    08H

    25H

    24H

    13

    ADD Rd,Rs

    寄存器寻址(计算RD和RS的值结果放到Rd中)

    Rd <-Rd+Rs

    0101

    ADD R1<-R1+R0

    0101 01 00

    18

    89021000

    05H

    14

    HALT

    停机

    1111

    11110000

    19

    00040000

    0FH

    3.每条指令的微指令和仿真图

    1. LDI Rd,#data

    序号

    指令助记符

    功能

    实现的功能

    操作码

    指令举例

    二进制机器代码

    地址

    微指令

    微指令地址

    1

    LDI Rd,#data

    立即数寻址(双字节指令16位)

    立即数传输

    Rdß#data

    0001

    LDI R0 ,48H

    0001 00 00

    0100 1000

    00

    01

    取指令:00B82080

    执行指令:00B22000

    立即数送R0

    00H

    01H

    通过测试的将48H放到R0寄存器。

    2. LDA Rd,adr

    序号

    指令助记符

    功能

    实现的功能

    操作码

    指令举例

    二进制机器代码

    地址

    微指令

    微指令地址

    2

    LDA Rd,adr

    直接寻址(取数)

    R1 <-[adr]

    0010

    LDA R1 ,[01H]

    0010 01 00

    0000 0001

    02

    03

    取指令:00B82080

    取adr送bus:00B02020

    取adr中的内容给R1:00122000

    00H

    02H

    20H

    直接寻址,将adr地址对应的内容送到R1寄存器中。通过测试的将[01H]= 48H放到R1寄存器。

    3.立即数寻址

    序号

    指令助记符

    功能

    实现的功能

    操作码

    指令举例

    二进制机器代码

    地址

    微指令

    微指令地址

    3

    STA @adr,Rs

    间接寻址(存数,将Rs中的内容给[adr]地址)

    R0-> [adr]

    0011

    STA [0FH] ,R0

    0011 00 00

    0000 1111

    04

    05

    取指令:00B82080

    取[adr]:00B02021

    取R0的值:1F102022

    将R0的值写到[adr]:1F011000

    00H

    03H

    21H

    22H

    间接寻址,将adr地址内的内容做有效地址。将R0中的内容存到[adr]对应的地址中。

    需要更正一下:是将adr取出来送BUS,然后才是adrAR,取R0BUS,最后把R0的值存到adr

    更正的截图

    4. LDR Rd,@Rs

    序号

    指令助记符

    功能

    实现的功能

    操作码

    指令举例

    二进制机器代码

    地址

    微指令

    微指令地址

    3

    LDR Rd,@Rs

    寄存器间接寻址(将RS地址中的数据存到Rs中)

    Rd <-[Rs]

    0100

    LDR R1,[R0]

    0100 01 00

    06

    取指令:00B82080

    R0中的内容到bus:1A001023

    将[R0]地址内的内容取出来存到R1中:00122000

    00H

    04H

    23H

    寄存器间接寻址,将Rs中的内容作为地址,从[Rs]地址中取数,将取出来的数存到Rd中。

    测试的是将@R0中的内容给了R1。且[48H]=0E。

    5. ADD Rd,Rs

    序号

    指令助记符

    功能

    实现的功能

    操作码

    指令举例

    二进制机器代码

    地址

    微指令

    微指令地址

    3

    ADD Rd,Rs

    寄存器寻址(计算RD和RS的值结果放到Rd中)

    Rd <-Rd+Rs

    0101

    ADD R1<-R1+R0

    0101 01 00

    07

    取指令:00B82080

    相加结果送R1:89021000

    00H

    05H

    将Rd和Rs相加的结果送Rd中。测试的是R0+R1结果送R1,实际上加的两个数是48H+0E=56H。

    6. XOR Rd,Rs

    序号

    指令助记符

    功能

    实现的功能

    操作码

    指令举例

    二进制机器代码

    地址

    微指令

    微指令地址

    3

    XOR Rd,Rs

    寄存器间接寻址(异或指令)

    Rd<-Rd异或Rs

    0110

    XOR R0<-R0异或R1

    0110 00 01

    08

    取指令:00B82080

    异或结果送R1:16021000

    00H

    06H

    将Rd和Rs异或的结果送Rd中。测试的是R0异或R1结果送R0,实际上加的两个数是48H异或56H=1E。

    7. JMP adr

    序号

    指令助记符

    功能

    实现的功能

    操作码

    指令举例

    二进制机器代码

    地址

    微指令

    微指令地址

    7

    JMP adr

    无条件跳转

    PC<-adr

    0111

    JMP PC<-adr

    0111 0000

    0000 1101

    09

    10

    取指令:00B82080

    取出Adr给Pc:00F02000

    00H

    07H

    8

    HALT

    停机

    1111

    11110000

    11

    取指令:00B82080

    停机:00040000

    00H

    0F

    9

    HALT

    停机

    1111

    11110000

    12

    取指令:00B82080

    停机:00040000

    00H

    0F

    10

    LDI Rd,#data

    立即数寻址(双字节指令16位)

    立即数传输

    Rdß#data

    0001

    LDI R1 ,E2

    0001 01 00

    11100010

    13

    14

    取指令:00B82080

    执行指令:00B22000

    立即数送R1

    00H

    01H

    通过一个JUMP指令跳转到指定的位置,按照正常的执行顺序的话下一个指令的地址应该就是11H,执行到11H就会停机,而现在通过跳转直接跳转到0000 1101=13H地址处去执行LDI指令。

    下图是JMP的执行过程:

    执行JMP后的LDI过程:为下面的JZ做铺垫的!

    8. JZ adr

    序号

    指令助记符

    功能

    实现的功能

    操作码

    指令举例

    二进制机器代码

    地址

    微指令

    微指令地址

    11

    JZ adr

    条件转移指令(结果为0的转移)

    If ZF=1,PC<-adr

    1000

     为0跳转到停机的位置

     

    1000 0000

    00010011

    16

    17

    取指令:00B82080

    取出Adr给Pc:00902224

    adr->PC:00E02000
    PC+1->PC:00200000

    00H

    08H

    25H

    24H

    12

    ADD Rd,Rs

    寄存器寻址(计算RD和RS的值结果放到Rd中)

    Rd <-Rd+Rs

    0101

    ADD R1<-R1+R0

    0101 01 00

    18

    取指令:00B82080

    相加结果送R1:89021000

    00H

    05H

    13

    HALT

    停机

    1111

    11110000

    19

    取指令:00B82080

    停机:00040000

    00H

    0F

    当ZF=1的时候就是结果为0的标志,测试JZ adr的时候用的是ADD R1,R0的结果,上面算出来为0。当不是0的时候就正常的PC+1,否则就是跳转到指定的位置。比如我写的这个ZF=1的时候直接跳转到停机的位置(第一张图),不是0的时候就正常往下执行(第2张图)。

    第1张图:ZF=1。

    第二张图:我通过修改第序号等于10的那一步R1的值[对应的地址是0EH,由E2H改为E3H]。从而使得ZF=0。

    9. HALT

    序号

    指令助记符

    功能

    实现的功能

    操作码

    指令举例

    二进制机器代码

    地址

    微指令

    微指令地址

    13

    HALT

    停机

    1111

    11110000

    19

    取指令:00B82080

    执行指令:00B22000

    立即数送R1

    00H

    01H

    当执行HALT指令时机器就会停止运行。

    10.完整的仿真图

  • 相关阅读:
    SAS 数值存储方式和精度问题
    构建智慧银行:现代化系统架构的探索与实践
    操作系统图片一览
    SQL数据类型
    读书会成员招募 | 一起来读《被讨厌的勇气》和《幸福的勇气》吧
    CPU以及与CPU配合的存储体系
    开发者福利:免费好用的API推荐
    Win11升级包下载后如何删除
    第七届中美创新链接峰会-区块链与绿色发展
    Java21虚拟线程完整用法
  • 原文地址:https://blog.csdn.net/weixin_41957626/article/details/128084834