tmp2
复杂模型机的累加操作
; //*************************************** //
; // 复杂模型机:R0依次累加R1、R2、R3并输出 //
; // 逻辑:R0 = 初始R0 + R1 + R2 + R3 //
; //*************************************** //
; //****** Start Of Main Memory Data ****** //
; 输入初始R0数值
$P 00 20 ; IN R0, 00H ; 从输入设备读入初始R0数值
$P 01 00 ; 双字节指令占位
; 输入R1并累加至R0:R0 = R0 + R1
$P 02 21 ; IN R1, 00H ; 从输入设备读入R1数值
$P 03 00 ; 双字节指令占位
$P 04 04 ; ADD R0, R1 ; R0累加R1(第一次累加)
; 输入R2并累加至R0:R0 = R0 + R2
$P 05 22 ; IN R2, 00H ; 从输入设备读入R2数值
$P 06 00 ; 双字节指令占位
$P 07 08 ; ADD R0, R2 ; R0累加R2(第二次累加)
; 输入R3并累加至R0:R0 = R0 + R3
$P 08 23 ; IN R3, 00H ; 从输入设备读入R3数值
$P 09 00 ; 双字节指令占位
$P 0A 0C ; ADD R0, R3 ; R0累加R3(第三次累加)
; 输出最终累加结果(R0 = 初始R0 + R1 + R2 + R3)
$P 0B 30 ; OUT 40H, R0 ; 将总结果从R0输出到40H端口
$P 0C 40 ; 输出端口地址
$P 0D 50 ; HLT ; 停机
; 数据区(备用,通过IN指令外部输入)
$P 60 00
$P 61 00
$P 62 00
$P 63 00
; //***** End Of Main Memory Data *****//
; //** Start Of MicroController Data //
; 微程序无需修改,支持IN/ADD/OUT/HLT指令
$M 00 000001 ; NOP ; 空操作
$M 01 006D43 ; PC->AR, PC+1 ; 取指令地址,程序计数器自增
$M 03 107070 ; MEM->IR, P<1> ; 从内存取指令到IR,译码
$M 04 002405 ; RS->B ; 源寄存器(R1/R2/R3)送ALU的B端
$M 05 04B201 ; A+B->RD ; ALU执行加法,结果送R0
$M 08 106009 ; MEM->AR ; 内存数据送地址寄存器
$M 09 183001 ; IO->RD ; IN指令:输入设备数据送寄存器(R0/R1/R2/R3)
$M 0A 106010 ; MEM->AR ; 扩展寻址
$M 0B 000001 ; NOP ; 等待周期
$M 0C 103001 ; MEM->RD ; 内存数据送寄存器
$M 0D 200601 ; RD->MEM ; 寄存器数据写内存(备用)
$M 0E 005341 ; A->PC ; 跳转指令用
$M 0F 0000CB ; NOP, P<3> ; 标志位检测
$M 10 280401 ; RS->IO ; OUT指令:R0数据送输出设备
$M 12 06B201 ; A+1->RD ; 自增指令用(备用)
$M 13 002414 ; RS->B ; 减法指令用(备用)
$M 14 05B201 ; A-B->RD ; 减法运算(备用)
$M 15 002416 ; RS->B ; 或运算用(备用)
$M 16 01B201 ; A|B->RD ; 或运算(备用)
$M 17 002418 ; RS->B ; 移位用(备用)
$M 18 02B201 ; A右环移->RD ; 移位运算(备用)
$M 1B 005341 ; A->PC ; 条件跳转用
$M 1C 10101D ; MEM->A ; 内存数据送ALU的A端
$M 1D 10608C ; MEM->AR, P<2> ; 变址寻址用
$M 1E 10601F ; MEM->AR ; 扩展寻址
$M 1F 101020 ; MEM->A ; 二次读数据到A端
$M 20 10608C ; MEM->AR, P<2> ; 扩展寻址+标志位
$M 21 033222 ; 暂存器操作
$M 22 033201 ; 暂存器结果送寄存器
$M 28 101029 ; MEM->A ; 变址准备
$M 29 00282A ; RI->B ; 变址寄存器送B端
$M 2A 04E22B ; A+B->AR ; 变址地址计算
$M 2B 04928C ; A+B->A, P<2> ; 变址结果处理
$M 2C 10102D ; MEM->A ; 跳转地址读
$M 2D 002C21 ; PC->B ; 相对寻址
$M 2E 04E22F ; A+B->AR ; 相对地址计算
$M 2F 04928C ; A+B->A, P<2> ; 相对结果处理
$M 30 001604 ; RD->A ; 寄存器送A端(加法准备)
$M 31 001606 ; RD->A ; 扩展准备
$M 32 006D48 ; PC->AR, PC+1 ; 取指令周期
$M 33 006D4A ; PC->AR, PC+1 ; 扩展取指令
$M 34 003401 ; RS->RD ; 寄存器间传输(备用)
$M 35 000035 ; NOP ; 延长等待
$M 36 006D51 ; PC->AR, PC+1 ; 立即数读取
$M 37 001612 ; RD->A ; 自增准备
$M 38 001613 ; RD->A ; 减法准备
$M 39 001615 ; RD->A ; 或运算准备
$M 3A 001617 ; RD->A ; 移位准备
$M 3B 001621 ; 寄存器送暂存器
$M 3C 006D5C ; PC->AR, PC+1 ; 扩展寻址周期
$M 3D 006D5E ; PC->AR, PC+1 ; 二次扩展
$M 3E 006D68 ; PC->AR, PC+1 ; 输入指令地址
$M 3F 006D6C ; PC->AR, PC+1 ; 输出指令地址
; // End Of MicroController Data **//

浙公网安备 33010602011771号