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

修改跳转微指令

上级 aa7b47b9
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
没有这种文件类型的预览
差异被折叠。
...@@ -85,15 +85,9 @@ const char* alu_not_keyword = "alu_not"; ...@@ -85,15 +85,9 @@ const char* alu_not_keyword = "alu_not";
const char* sp_inc_keyword = "sp_inc"; const char* sp_inc_keyword = "sp_inc";
const char* sp_dec_keyword = "sp_dec"; 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_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_main_memory_keyword = "[mar]";
const char* mar_extern_memory_keyword = "<mar>";
const char* delimit_char = "\n\t\r "; // 需要忽略的空白字符 const char* delimit_char = "\n\t\r "; // 需要忽略的空白字符
...@@ -148,15 +142,19 @@ struct PATH_INSTRUCTION_OPERAND_ENTRY path_operand_table[] = ...@@ -148,15 +142,19 @@ struct PATH_INSTRUCTION_OPERAND_ENTRY path_operand_table[] =
{ {
{ NULL, NULL, 0x0 } // 未用 { 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_add_keyword, &a_register_keyword, 0x99e4ffef } // path alu_add, a
,{ &alu_sub_keyword, &a_register_keyword, 0x86e4ffef } // path alu_sub, a ff ff fe 91 ,{ &alu_sub_keyword, &a_register_keyword, 0x86e4ffef } // path alu_sub, a
,{ &alu_or_keyword, &a_register_keyword, 0xbee4ffef } // path alu_or, a ,{ &alu_or_keyword, &a_register_keyword, 0xbee4ffef } // path alu_or, a
,{ &alu_and_keyword, &a_register_keyword, 0xbbe4ffef } // path alu_and, a ,{ &alu_and_keyword, &a_register_keyword, 0xbbe4ffef } // path alu_and, a
,{ &alu_adc_keyword, &a_register_keyword, 0x89e4ffef } // path alu_adc, a ,{ &alu_adc_keyword, &a_register_keyword, 0x89e4ffef } // path alu_adc, a
,{ &alu_sbb_keyword, &a_register_keyword, 0x96e4ffef } // path alu_sbb, 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_shl_keyword, &a_register_keyword, 0x90d6ffef } // path alu_shl, a
,{ &alu_rcr_keyword, &a_register_keyword, 0x90e5ffef } // path alu_rcr, a ,{ &alu_rcr_keyword, &a_register_keyword, 0x90e5ffef } // path alu_rcr, a
,{ &alu_rcl_keyword, &a_register_keyword, 0x90e6ffef } // path alu_rcl, a ,{ &alu_rcl_keyword, &a_register_keyword, 0x90e6ffef } // path alu_rcl, a
...@@ -173,22 +171,22 @@ struct PATH_INSTRUCTION_OPERAND_ENTRY path_operand_table[] = ...@@ -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, &rx_register_keyword, 0xd0b4ffef } // path a, rx
,{ &a_register_keyword, &mar_main_memory_keyword, 0xd0f4fbed } // path a, [mar] 将a寄存器数据写入地址寄存器指向的内存 ,{ &a_register_keyword, &mar_main_memory_keyword, 0xd0f4fbed } // path a, [mar] 将a寄存器数据写入地址寄存器指向的内存
,{ &pc_main_memory_keyword, &rx_register_keyword, 0xffb97fef } // path [pc], rx ,{ &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] ,{ &alu_aout_keyword, &mar_main_memory_keyword, 0xd0f4fbec } // path alu_aout, [mar]
,{ &pc_main_memory_keyword, &pc_register_keyword, 0xfff96fef } // path [pc], pc ,{ &pc_main_memory_keyword, &pc_register_keyword, 0xfff96fff } // path [pc], pc
,{ &pc_inc_main_memory_keyword, &pc_register_keyword, 0xfff96fff } // path [+pc], pc 读出PC指向主存单元的内容,同时允许PC加1,主要用在jz和jc指令中
,{ &pc_register_keyword, &sp_register_keyword, 0xfff3feef } // path pc, sp ,{ &pc_register_keyword, &sp_register_keyword, 0xfff3feef } // path pc, sp
,{ &ia_register_keyword, &mar_register_keyword, 0xfff1f7ef } // path ia, mar ,{ &ia_register_keyword, &mar_register_keyword, 0xfff1f7ef } // path ia, mar
,{ &pc_register_keyword, &mar_register_keyword, 0xfff3f7ef } // path pc, mar ,{ &pc_register_keyword, &mar_register_keyword, 0xfff3f7ef } // path pc, mar
,{ &rin_register_keyword, &a_register_keyword, 0xbff0ffef } // path rin, a ,{ &rin_register_keyword, &a_register_keyword, 0xbff0ffef } // path rin, a
,{ &a_register_keyword, &rout_register_keyword, 0xd0f4ffee } // path a, rout ,{ &a_register_keyword, &rout_register_keyword, 0xd0f4ffee } // path a, rout
,{ &mar_main_memory_keyword, &pc_register_keyword, 0xfff9ebef } // 从地址寄存器指定的内存单元读数据到程序计数器pc ,{ &mar_main_memory_keyword, &pc_register_keyword, 0xfff9ebef } // path [mar],pc 从地址寄存器指定的内存单元读数据到程序计数器pc
,{ &pc_main_memory_keyword, &sp_register_keyword, 0xfff97eef } // path [pc], sp 执行后pc应加1指向下一条指令 ,{ &pc_main_memory_keyword, &sp_register_keyword, 0xfff97eef } // path [pc], sp
,{ &sp_register_keyword, &mar_register_keyword, 0xfff2f7ef } // path sp, mar ,{ &sp_register_keyword, &mar_register_keyword, 0xfff2f7ef } // path sp, mar
,{ &sp_register_keyword, &csp_counter_keyword, 0xff72ffef } // path sp, csp ,{ &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 ,{ &pc_main_memory_keyword, &asr_register_keyword, 0xfff97def } // path [pc], asr
,{ &csp_counter_keyword, &mar_register_keyword, 0xfff8f7ef } // path csp, mar ,{ &csp_counter_keyword, &mar_register_keyword, 0xfff8f7ef } // path csp, mar
...@@ -197,14 +195,10 @@ struct PATH_INSTRUCTION_OPERAND_ENTRY path_operand_table[] = ...@@ -197,14 +195,10 @@ struct PATH_INSTRUCTION_OPERAND_ENTRY path_operand_table[] =
,{ &sp_inc_keyword, &csp_counter_keyword, 0xffffffe7 } // path sp_inc, csp ,{ &sp_inc_keyword, &csp_counter_keyword, 0xffffffe7 } // path sp_inc, csp
,{ &sp_dec_keyword, &csp_counter_keyword, 0xffffffef } // path sp_dec, 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 ,{ &asr_register_keyword, &pc_register_keyword, 0xfff7efef } // path asr, pc
,{ &sp_register_keyword, &asr_register_keyword, 0xfff2fdef } // path sp, asr ,{ &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 .text
mov r0, 16 ;将立即数16存入寄存器r0 mov r0,16 ;将立即数16传送到寄存器r0
mov a, num ;将标号num指定的存储单元内容复制到累加器a中 mov a, num ;将标号num指定的存储单元内容复制到累加器a中
add a, r0 ;将累加器a与寄存器r0相加,结果写回a中 add a, r0 ;将累加器a与寄存器r0相加,结果写回a中
......
0001 ; 示例程序 0001 ; 示例程序
0002 0002
0003 .text 0003 .text
0004 00 8C 10 mov r0, 16 ;将立即数16存入寄存器r0 0004 00 8C 10 mov r0,16 ;将立即数16传送到寄存器r0
0005 02 78 07 mov a, num ;将标号num指定的存储单元内容复制到累加器a中 0005 02 78 07 mov a, num ;将标号num指定的存储单元内容复制到累加器a中
0006 04 10 add a, r0 ;将累加器a与寄存器r0相加,结果写回a中 0006 04 10 add a, r0 ;将累加器a与寄存器r0相加,结果写回a中
0007 0007
......
...@@ -311,14 +311,14 @@ ...@@ -311,14 +311,14 @@
0311 0311
0312 ; jc symbol 0312 ; jc symbol
0313 500 FF FF FF FF inc pc 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 0315 508 CF FF FF FF reset upc
0316 0316
0317 50C FF FF FF FF dup 5, null 0317 50C FF FF FF FF dup 5, null
0318 0318
0319 ; jz symbol 0319 ; jz symbol
0320 520 FF FF FF FF inc pc 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 0322 528 CF FF FF FF reset upc
0323 0323
0324 52C FF FF FF FF dup 5, null 0324 52C FF FF FF FF dup 5, null
...@@ -328,7 +328,7 @@ ...@@ -328,7 +328,7 @@
0328 0328
0329 ; jmp symbol 0329 ; jmp symbol
0330 560 FF FF FF FF inc pc 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 0332 568 CF FF FF FF reset upc
0333 0333
0334 56C FF FF FF FF dup 5, null 0334 56C FF FF FF FF dup 5, null
......
没有这种文件类型的预览
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论