提交 ca51ad2a 创建 作者: 李川's avatar 李川 提交者: 李川

修改跳转微指令

上级 aa7b47b9
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
没有这种文件类型的预览
差异被折叠。
......@@ -85,15 +85,9 @@ const char* alu_not_keyword = "alu_not";
const char* sp_inc_keyword = "sp_inc";
const char* sp_dec_keyword = "sp_dec";
const char* int_number_keyword = "int_number"; // 中断号
const char* int_ia_keyword = "int_ia";
const char* int_pc_keyword = "[int_pc]";
// 访问主存或外设的操作数
const char* pc_main_memory_keyword = "[pc]";
const char* pc_inc_main_memory_keyword = "[pc+]"; // 读出PC指向内存单元的值,同时允许PC加1
const char* mar_main_memory_keyword = "[mar]";
const char* mar_extern_memory_keyword = "<mar>";
const char* delimit_char = "\n\t\r "; // 需要忽略的空白字符
......@@ -148,15 +142,19 @@ struct PATH_INSTRUCTION_OPERAND_ENTRY path_operand_table[] =
{
{ NULL, NULL, 0x0 } // 未用
,{ &pc_main_memory_keyword, &ir_register_keyword, 0xfff93fef } // path [pc], ir ff e3 ff ff
// 注意:在本文档中,所有微指令编码都是从低字节到高字节的顺序编码的。
// 以取指微指令path [pc], ir为例,它的32位编码,从低字节到高字节依次为:[7:0]=ff,[15:8]=f9,[23:16]=3f, [31:24]=ef;
// 而在DM1000中,按照阅读习惯,将高位字节放在前面,低位字节放在后面。
// 因此,在源代码窗口和存储器窗口中显示的是“ef 3f f9 ff”,即微指令编码[31:0]=ef3ff9ff。
,{ &pc_main_memory_keyword, &ir_register_keyword, 0xfff93fef } // path [pc], ir
,{ &alu_add_keyword, &a_register_keyword, 0x99e4ffef } // path alu_add, a ff ff fe 90
,{ &alu_sub_keyword, &a_register_keyword, 0x86e4ffef } // path alu_sub, a ff ff fe 91
,{ &alu_add_keyword, &a_register_keyword, 0x99e4ffef } // path alu_add, a
,{ &alu_sub_keyword, &a_register_keyword, 0x86e4ffef } // path alu_sub, a
,{ &alu_or_keyword, &a_register_keyword, 0xbee4ffef } // path alu_or, a
,{ &alu_and_keyword, &a_register_keyword, 0xbbe4ffef } // path alu_and, a
,{ &alu_adc_keyword, &a_register_keyword, 0x89e4ffef } // path alu_adc, a
,{ &alu_sbb_keyword, &a_register_keyword, 0x96e4ffef } // path alu_sbb, a
,{ &alu_shr_keyword, &a_register_keyword, 0x90d5ffef } // path alu_shr, a ff ff fc b7
,{ &alu_shr_keyword, &a_register_keyword, 0x90d5ffef } // path alu_shr, a
,{ &alu_shl_keyword, &a_register_keyword, 0x90d6ffef } // path alu_shl, a
,{ &alu_rcr_keyword, &a_register_keyword, 0x90e5ffef } // path alu_rcr, a
,{ &alu_rcl_keyword, &a_register_keyword, 0x90e6ffef } // path alu_rcl, a
......@@ -173,22 +171,22 @@ struct PATH_INSTRUCTION_OPERAND_ENTRY path_operand_table[] =
,{ &a_register_keyword, &rx_register_keyword, 0xd0b4ffef } // path a, rx
,{ &a_register_keyword, &mar_main_memory_keyword, 0xd0f4fbed } // path a, [mar] 将a寄存器数据写入地址寄存器指向的内存
,{ &pc_main_memory_keyword, &rx_register_keyword, 0xffb97fef } // path [pc], rx
,{ &mar_extern_memory_keyword, &a_register_keyword, 0xbff97fef } // path <mar>, a 从地址寄存器指定的外部设备读数据到a寄存器
,{ &alu_aout_keyword, &mar_main_memory_keyword, 0xd0f4fbec } // path alu_aout, [mar]
,{ &pc_main_memory_keyword, &pc_register_keyword, 0xfff96fef } // path [pc], pc
,{ &pc_inc_main_memory_keyword, &pc_register_keyword, 0xfff96fff } // path [+pc], pc 读出PC指向主存单元的内容,同时允许PC加1,主要用在jz和jc指令中
,{ &pc_main_memory_keyword, &pc_register_keyword, 0xfff96fff } // path [pc], pc
,{ &pc_register_keyword, &sp_register_keyword, 0xfff3feef } // path pc, sp
,{ &ia_register_keyword, &mar_register_keyword, 0xfff1f7ef } // path ia, mar
,{ &pc_register_keyword, &mar_register_keyword, 0xfff3f7ef } // path pc, mar
,{ &rin_register_keyword, &a_register_keyword, 0xbff0ffef } // path rin, a
,{ &a_register_keyword, &rout_register_keyword, 0xd0f4ffee } // path a, rout
,{ &mar_main_memory_keyword, &pc_register_keyword, 0xfff9ebef } // 从地址寄存器指定的内存单元读数据到程序计数器pc
,{ &pc_main_memory_keyword, &sp_register_keyword, 0xfff97eef } // path [pc], sp 执行后pc应加1指向下一条指令
,{ &mar_main_memory_keyword, &pc_register_keyword, 0xfff9ebef } // path [mar],pc 从地址寄存器指定的内存单元读数据到程序计数器pc
,{ &pc_main_memory_keyword, &sp_register_keyword, 0xfff97eef } // path [pc], sp
,{ &sp_register_keyword, &mar_register_keyword, 0xfff2f7ef } // path sp, mar
,{ &sp_register_keyword, &csp_counter_keyword, 0xff72ffef } // path sp, csp
,{ &pc_main_memory_keyword, &ia_register_keyword, 0xfff97feb } // path [pc], ia 执行后pc应加1指向下一条指令
,{ &pc_main_memory_keyword, &ia_register_keyword, 0xfff97feb } // path [pc], ia
,{ &pc_main_memory_keyword, &asr_register_keyword, 0xfff97def } // path [pc], asr
,{ &csp_counter_keyword, &mar_register_keyword, 0xfff8f7ef } // path csp, mar
......@@ -197,14 +195,10 @@ struct PATH_INSTRUCTION_OPERAND_ENTRY path_operand_table[] =
,{ &sp_inc_keyword, &csp_counter_keyword, 0xffffffe7 } // path sp_inc, csp
,{ &sp_dec_keyword, &csp_counter_keyword, 0xffffffef } // path sp_dec, csp
,{ &pc_register_keyword, &mar_main_memory_keyword, 0xfff3fbed } // path pc, [mar] 将pc值写入mar指向的内存
,{ &pc_register_keyword, &mar_main_memory_keyword, 0xfff3fbed } // path pc, [mar] 将pc值写入mar指向的存储单元
,{ &asr_register_keyword, &pc_register_keyword, 0xfff7efef } // path asr, pc
,{ &sp_register_keyword, &asr_register_keyword, 0xfff2fdef } // path sp, asr
,{ &int_number_keyword, &ia_register_keyword, 0xfffbffeb } // path int_number, ia 将中断号给ia寄存器
,{ &int_ia_keyword, &pc_register_keyword, 0xfff1dfef } // path int_ia, pc
,{ &int_pc_keyword, &pc_register_keyword, 0xfff95fef } // path int_pc, pc
};
......
没有这种文件类型的预览
; 示例程序
.text
mov r0, 16 ;将立即数16存入寄存器r0
mov a, num ;将标号num指定的存储单元内容复制到累加器a中
add a, r0 ;将累加器a与寄存器r0相加,结果写回a中
mov r0,16 ;将立即数16传送到寄存器r0
mov a, num ;将标号num指定的存储单元内容复制到累加器a中
add a, r0 ;将累加器a与寄存器r0相加,结果写回a中
Endless_Loop:
jmp Endless_Loop ;死循环
......
0001 ; 示例程序
0002
0003 .text
0004 00 8C 10 mov r0, 16 ;将立即数16存入寄存器r0
0005 02 78 07 mov a, num ;将标号num指定的存储单元内容复制到累加器a中
0006 04 10 add a, r0 ;将累加器a与寄存器r0相加,结果写回a中
0004 00 8C 10 mov r0,16 ;将立即数16传送到寄存器r0
0005 02 78 07 mov a, num ;将标号num指定的存储单元内容复制到累加器a中
0006 04 10 add a, r0 ;将累加器a与寄存器r0相加,结果写回a中
0007
0008 Endless_Loop:
0009 05 AC 05 jmp Endless_Loop ;死循环
......
......@@ -311,14 +311,14 @@
0311
0312 ; jc symbol
0313 500 FF FF FF FF inc pc
0314 504 EF 6F F9 FF path [pc], pc ;将 PC 指定存储单元的内容作为指令地址加载到 PC 中,实现程序跳转
0314 504 FF 6F F9 FF path [pc], pc ;将 PC 指定存储单元的内容作为指令地址加载到 PC 中,实现程序跳转
0315 508 CF FF FF FF reset upc
0316
0317 50C FF FF FF FF dup 5, null
0318
0319 ; jz symbol
0320 520 FF FF FF FF inc pc
0321 524 EF 6F F9 FF path [pc], pc
0321 524 FF 6F F9 FF path [pc], pc
0322 528 CF FF FF FF reset upc
0323
0324 52C FF FF FF FF dup 5, null
......@@ -328,7 +328,7 @@
0328
0329 ; jmp symbol
0330 560 FF FF FF FF inc pc
0331 564 EF 6F F9 FF path [pc], pc
0331 564 FF 6F F9 FF path [pc], pc
0332 568 CF FF FF FF reset upc
0333
0334 56C FF FF FF FF dup 5, null
......
没有这种文件类型的预览
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论