暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

12. 指令

幼麟实验室 2020-06-25
210

想知道算术、逻辑、加载、存储、跳转......这些指令怎么实现的吗?话说有点儿长呢~




01


指令寄存器




指令寄存器IR有8位,我们要用前4位来编码指令类型,后4位用来指定与操作相关的寄存器。11:ALU 指令0:其它指令其它指令类型000 - Load001 - Store010 - Data011 - Jump Register100 - Jump101 - Jump If110 - Clear Flag111 -Reg A00 - Register 001 - Register 110 - Register 211 - Register 3Reg B00 - Register 001 - Register 110 - Register 211 - Register 3Instruction Register


R0R1R2R3sIR12345670clk sReg B2x4000110112x400011011Reg BReg Aclk e2x400011011R0R1R2R3IR后4位选择指令操作的寄存器IRReg Bclk s打开时R3的输入打开0111Reg Aclk e打开R1的输出打开Reg Bclk e打开R3的输出打开




02


ALU指令




算术与逻辑运算指令对应着之前我们组装的运算器,用于执行选中的运算操作。


11:ALU 指令ALU操作000 - ADD001 - SHL010 - SHR011 - NOT100 - AND101 - OR110 - XOR111 - CMPReg A00 - Register 001 - Register 110 - Register 211 - Register 3Reg B00 - Register 001 - Register 110 - Register 211 - Register 3Instruction Register


操作指令含义
ADD RA,RB将RA与RB相加,结果存入RB
SHR RA,RB将RA右移一位,结果存入RB
SHL RA,RB将RA左移一位,结果存入RB
NOT RA,RB将RA取反,结果存入RB
AND RA,RBRA和RB进行与运算,结果存入RB
OR  RA,RBRA和RB进行或运算,结果存入RB
XOR RA,RBRA和RB进行异或运算,结果存入RB
CMP RA,RB比较RA和RB



IR12345670ALUReg BReg AACCTMPACCReg BStepper456启用位设置位1号与门输出打开,将Reg B移动到TMP1234步:ALU操作类型被选中,2号与门输出打开,将Reg A输出到总线,ALU获得两个输入:总线TMP,运算结果随即被移动到ACC5步:IR1,2,3位选中的不是CMP(111)时,3号与门输出打开,将ACC移动到Reg B6步:ADD R0 R11 000 00 01




03


Load和Store指令




寄存器RA用于存储内存地址,RB用于存储数据。加载指令会将指定内存地址处的内容加载到RB中;而存储指令会将RB中的数据存储到指定内存地址处。


RARBRAM5123456789101112内存地址数据加载加载指令RARBRAM5123456789101112内存地址数据存储存储指令


000Load/Store Instruction0 - Load1 - StoreReg A00 - Register 001 - Register 110 - Register 211 - Register 3Reg B00 - Register 001 - Register 110 - Register 211 - Register 3Instruction Register


操作指令含义
LD RA,RB将RA指定的RAM地址内容加载到RB
St RA,RB将RB存储到RA指定的RAM地址



   IR12345670Reg ARAMReg AMARReg BMARStepper456EnablesSetsReg BRAM3x8000001010011100101110111Load/Store指令布线1号与门输出打开,将Reg A移动到MAR,选定内存地址4步:2号与门输出打开,将RAM移动到Reg B5步:1324Load3号与门输出打开,将Reg A移动到MAR,定内存地址4步:4号与门输出打开,将Reg B移动到RAM5步:Store




04


Data指令




数据指令用于将指定数据存储到RB选择的寄存器。


数据指令XXXXXXXXRB数据数据


001000Reg B00 - Register 001 - Register 110 - Register 211 - Register 3Instruction RegisterNext byte in RAMData Instruction要存储到Reg B的数据


操作指令含义
DATA RB,xxxx xxxx将这8比特存储到RB



23IR12345670IARRAMMARReg BStepper456EnablesSetsACCIAR3x80000010100111001011101111号与门输出打开,将IAR输出到MAR,同时Bus 1打开,ALUIAR加一后输出到ACC4步:2号与门输出打开,将RAM选中的数据移动到Reg B5步:Data3号与门输出打开,将ACC移动到IAR6步:1Data指令布线ACCBus 123




05


Jump Register 指令




RB选择的寄存器用于存储一个内存地址,这一地址处的内容是可被执行的计算机指令。跳转寄存器指令用于将RB存储的指令地址存储到指令地址寄存器(IAR)中。也就是说接下来就要跳转到那里去执行指令了。


跳转寄存器指令RBJMPR RB指令2,3指令地址指令4


001100Reg B00 - Register 001 - Register 110 - Register 211 - Register 3Instruction RegisterJump Register Instruction


操作指令含义
JMPR RB跳转到RB存储的地址处



IR12345670Stepper456EnablesSetsReg BIAR3x8000001010011100101110111JMPR指令布线1号与门输出打开,将Reg B移动到IAR4步:JMPR1




06


Jump指令




在跳转指令所在内存地址的下一字节处存储一个指令地址,跳转指令用于将这一指令地址存储到指令地址寄存器(IAR),然后就会从那一地址处的指令开始执行了。


跳转指令JMP xxxxxxxx指令......指令xxxxxxxx


01000000Instruction RegisterJump InstructionNext byte in RAM跳转到这个地址


操作指令含义
JMP Addr跳转到下一字节存储的地址处



3x8IR12345670Stepper456EnablesSetsRAMIAR000001010011100101110111IARMARJMP指令布线1号与门输出打开,将IAR移动到MAR4步:JMP2号与门输出打开,将RAM移动到IAR5步:12




07


参考资料


《But How Do It Know?》 J.Clark Scott






文章转载自幼麟实验室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论