提交 7138533a 创建 作者: 赵鹏翀's avatar 赵鹏翀

Merge branch 'update_reset' into 'master'

修改PC原理图的复位控制以及微指令 See merge request engintime/Dream-Logic/Intel-classic-chips/8086!7
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
......@@ -96,15 +96,15 @@ const char* shift_flag_keyword = "shift_flag";
// 访问主存或外设的操作数
const char* pc_main_memory_keyword = "[pc]";
const char* jzpc_main_memory_keyword = "jz[pc]";
const char* jnzpc_main_memory_keyword = "jnz[pc]";
const char* jcpc_main_memory_keyword = "jc[pc]";
const char* japc_main_memory_keyword = "ja[pc]";
const char* jbpc_main_memory_keyword = "jb[pc]";
const char* jgpc_main_memory_keyword = "jg[pc]";
const char* jlpc_main_memory_keyword = "jl[pc]";
const char* jmppc_main_memory_keyword = "jmp[pc]";
const char* jz_mar_keyword = "jz[mar]";
const char* jnz_mar_keyword = "jnz[mar]";
const char* jc_mar_keyword = "jc[mar]";
const char* ja_mar_keyword = "ja[mar]";
const char* jb_mar_keyword = "jb[mar]";
const char* jg_mar_keyword = "jg[mar]";
const char* jl_mar_keyword = "jl[mar]";
const char* jmp_mar_keyword = "jmp[mar]";
const char* mar_main_memory_keyword = "[mar]";
const char* mar_extern_IO_keyword = "<mar>";
const char* int_number_keyword = "inta";
......@@ -168,14 +168,14 @@ struct PATH_INSTRUCTION_OPERAND_ENTRY path_operand_table[] =
,{ &pc_main_memory_keyword, &a_register_keyword, 0xffe147ff } // path [pc], a
,{ &pc_main_memory_keyword, &w_register_keyword, 0xffe347ff } // path [pc], w
,{ &jzpc_main_memory_keyword, &pc_register_keyword, 0xff1f46fd } // path jz[pc], pc
,{ &jnzpc_main_memory_keyword, &pc_register_keyword, 0xff3f46fd } // path jnz[pc], pc
,{ &jcpc_main_memory_keyword, &pc_register_keyword, 0xff5f46fd } // path jc[pc], pc
,{ &japc_main_memory_keyword, &pc_register_keyword, 0xff7f46fd } // path ja[pc], pc
,{ &jbpc_main_memory_keyword, &pc_register_keyword, 0xff9f46fd } // path jb[pc], pc
,{ &jgpc_main_memory_keyword, &pc_register_keyword, 0xffbf46fd } // path jg[pc], pc
,{ &jlpc_main_memory_keyword, &pc_register_keyword, 0xffdf46fd } // path jl[pc], pc
,{ &jmppc_main_memory_keyword, &pc_register_keyword, 0xffff46fd } // path jmp[pc], pc
,{ &jz_mar_keyword, &pc_register_keyword, 0xff1f86fd } // path jz[mar], pc
,{ &jnz_mar_keyword, &pc_register_keyword, 0xff3f86fd } // path jnz[mar], pc
,{ &jc_mar_keyword, &pc_register_keyword, 0xff5f86fd } // path jc[mar], pc
,{ &ja_mar_keyword, &pc_register_keyword, 0xff7f86fd } // path ja[mar], pc
,{ &jb_mar_keyword, &pc_register_keyword, 0xff9f86fd } // path jb[mar], pc
,{ &jg_mar_keyword, &pc_register_keyword, 0xffbf86fd } // path jg[mar], pc
,{ &jl_mar_keyword, &pc_register_keyword, 0xffdf86fd } // path jl[mar], pc
,{ &jmp_mar_keyword, &pc_register_keyword, 0xffff86fd } // path jmp[mar], pc
,{ &rs_register_keyword, &rd_register_keyword, 0xffe9c1ff } // path rs, rd
,{ &rs_register_keyword, &w_register_keyword, 0xffe3c1ff } // path rs, w
......@@ -194,6 +194,7 @@ struct PATH_INSTRUCTION_OPERAND_ENTRY path_operand_table[] =
,{ &rd_register_keyword, &a_register_keyword, 0xffe1c1bf } // path rd, a
,{ &rd_register_keyword, &w_register_keyword, 0xffe3c1bf } // path rd, w
,{ &pc_register_keyword, &a_register_keyword, 0xffe1c5ff } // path pc, a
,{ &pc_register_keyword, &mar_register_keyword, 0xffe5c5ff } // path pc, mar
,{ &es_register_keyword, &a_register_keyword, 0xffe1c1ff } // path es, a
,{ &sp_register_keyword, &a_register_keyword, 0xffe1c1bf } // path sp, a
,{ &sp_register_keyword, &w_register_keyword, 0xffe3c1bf } // path sp, w
......
没有这种文件类型的预览
没有这种文件类型的预览
......@@ -612,347 +612,388 @@
0612
0613 9FC FF FF FF FF dup 1, null
0614
0615 ;80. ja symbol
0616 A00 CB FF FF FF check irq
0617 A04 FD FF FF FF inc pc
0618 A08 FD 46 7F FF path ja[pc], pc
0619 A0C C3 FF FF FF reset upc
0615 ;=====================================================================
0616 ;80. ja symbol
0617 A00 CB FF FF FF check irq
0618 A04 FD FF FF FF inc pc
0619 A08 FF C5 E5 FF path pc, mar ;将PC值传送到地址寄存器mar中
0620
0621 A10 FF FF FF FF dup 4, null
0622
0623 ;81. jb symbol
0624 A20 CB FF FF FF check irq
0625 A24 FD FF FF FF inc pc
0626 A28 FD 46 9F FF path jb[pc], pc
0627 A2C C3 FF FF FF reset upc
0628
0629 A30 FF FF FF FF dup 4, null
0630
0631 ;82. jg symbol
0632 A40 CB FF FF FF check irq
0633 A44 FD FF FF FF inc pc
0634 A48 FD 46 BF FF path jg[pc], pc
0635 A4C C3 FF FF FF reset upc
0636
0637 A50 FF FF FF FF dup 4, null
0621 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
0622 ;若转移条件不成立,则PC加1,指向下一条指令
0623 A0C FD 86 7F FF path ja[mar], pc
0624 A10 C3 FF FF FF reset upc
0625
0626 A14 FF FF FF FF dup 3, null
0627
0628 ;=====================================================================
0629 ;81. jb symbol
0630 A20 CB FF FF FF check irq
0631 A24 FD FF FF FF inc pc
0632 A28 FF C5 E5 FF path pc, mar
0633
0634 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
0635 ;若转移条件不成立,则PC加1,指向下一条指令
0636 A2C FD 86 9F FF path jb[mar], pc
0637 A30 C3 FF FF FF reset upc
0638
0639 ;83. jl symbol
0640 A60 CB FF FF FF check irq
0641 A64 FD FF FF FF inc pc
0642 A68 FD 46 DF FF path jl[pc], pc
0643 A6C C3 FF FF FF reset upc
0644
0645 A70 FF FF FF FF dup 4, null
0639 A34 FF FF FF FF dup 3, null
0640
0641 ;=====================================================================
0642 ;82. jg symbol
0643 A40 CB FF FF FF check irq
0644 A44 FD FF FF FF inc pc
0645 A48 FF C5 E5 FF path pc, mar
0646
0647 ;84. je symbol
0648 A80 CB FF FF FF check irq
0649 A84 FD FF FF FF inc pc
0650 A88 FD 46 1F FF path jz[pc], pc
0651 A8C C3 FF FF FF reset upc
0652
0653 A90 FF FF FF FF dup 4, null
0654
0655 ;85. jne symbol
0656 AA0 CB FF FF FF check irq
0657 AA4 FD FF FF FF inc pc
0658 AA8 FD 46 3F FF path jnz[pc], pc
0659 AAC C3 FF FF FF reset upc
0660
0661 AB0 FF FF FF FF dup 4, null
0662
0663 ;86. jc symbol
0664 AC0 CB FF FF FF check irq
0665 AC4 FD FF FF FF inc pc
0666 AC8 FD 46 5F FF path jc[pc], pc
0667 ACC C3 FF FF FF reset upc
0668
0669 AD0 FF FF FF FF dup 4, null
0670
0671 ;87. jmp symbol
0672 AE0 CB FF FF FF check irq
0673 AE4 FD FF FF FF inc pc
0674 AE8 FD 46 FF FF path jmp[pc], pc
0675 AEC C3 FF FF FF reset upc
0676
0677 AF0 FF FF FF FF dup 4, null
0678
0679 ;88. loop symbol 将cl作为目的操作数减1,改变零标志,若zf = 1,则跳转
0680 B00 FD FF FF FF inc pc
0681 B04 FF 47 EF FF path [pc], ir
0682 B08 BF C1 E1 FF path rd, a
0683 B0C FF D1 E9 DF path alu_dec, rd
0684 B10 FF CB EB FF path al_flag, flag
0685 B14 FD FF FF FF inc pc
0686 B18 FD 46 FF FF path jmp[pc], pc
0687 B1C CB FF FF FF check irq
0688 B20 C3 FF FF FF reset upc
0689
0690 B24 FF FF FF FF dup 7, null
0691
0692 ;====================================================================================================
0693
0694 ; 软中断,首先将标志寄存器入栈,清除中断标志IF,并将当前程序断点的地址入栈保护,从
0695 ; 中断向量表中获取中断入口地址,CPU转向中断入口地址去执行相应的中断服务程序。
0696 ; 中断向量表段地址保存在ES寄存器中
0697 ;90. int immediate
0698 ; 将标志寄存器入栈
0699 B40 FD FF FF FF inc pc
0700 B44 FF 47 EF FF path [pc], ir
0701 B48 BF C1 E1 FF path sp, a
0702 B4C BF C1 E3 FF path sp, w
0703 B50 FF D1 E9 DF path alu_dec, sp
0704 B54 BF C1 E5 FF path sp, mar
0705 B58 FF 83 E7 FF path flag, [mar]
0706 ; 关中断
0707 B5C D3 FF FF FF cli
0708
0709 ; 更新栈顶
0710 B60 BF C1 E1 FF path sp, a
0711 B64 BF C1 E3 FF path sp, w
0712 B68 FF D1 E9 DF path alu_dec, sp
0713
0714 ; 计算中断服务程序入口地址
0715 B6C FD FF FF FF inc pc
0716 B70 FF 47 E5 FF path [pc], mar
0647 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
0648 ;若转移条件不成立,则PC加1,指向下一条指令
0649 A4C FD 86 BF FF path jg[mar], pc
0650 A50 C3 FF FF FF reset upc
0651
0652 A54 FF FF FF FF dup 3, null
0653
0654 ;=====================================================================
0655 ;83. jl symbol
0656 A60 CB FF FF FF check irq
0657 A64 FD FF FF FF inc pc
0658 A68 FF C5 E5 FF path pc, mar
0659
0660 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
0661 ;若转移条件不成立,则PC加1,指向下一条指令
0662 A6C FD 86 DF FF path jl[mar], pc
0663 A70 C3 FF FF FF reset upc
0664
0665 A74 FF FF FF FF dup 3, null
0666
0667 ;=====================================================================
0668 ;84. je symbol
0669 A80 CB FF FF FF check irq
0670 A84 FD FF FF FF inc pc
0671 A88 FF C5 E5 FF path pc, mar
0672
0673 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
0674 ;若转移条件不成立,则PC加1,指向下一条指令
0675 A8C FD 86 1F FF path jz[mar], pc
0676 A90 C3 FF FF FF reset upc
0677
0678 A94 FF FF FF FF dup 3, null
0679
0680 ;=====================================================================
0681 ;85. jne symbol
0682 AA0 CB FF FF FF check irq
0683 AA4 FD FF FF FF inc pc
0684 AA8 FF C5 E5 FF path pc, mar
0685
0686 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
0687 ;若转移条件不成立,则PC加1,指向下一条指令
0688 AAC FD 86 3F FF path jnz[mar], pc
0689 AB0 C3 FF FF FF reset upc
0690
0691 AB4 FF FF FF FF dup 3, null
0692
0693 ;=====================================================================
0694 ;86. jc symbol
0695 AC0 CB FF FF FF check irq
0696 AC4 FD FF FF FF inc pc
0697 AC8 FF C5 E5 FF path pc, mar
0698
0699 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
0700 ;若转移条件不成立,则PC加1,指向下一条指令
0701 ACC FD 86 5F FF path jc[mar], pc
0702 AD0 C3 FF FF FF reset upc
0703
0704 AD4 FF FF FF FF dup 3, null
0705
0706 ;=====================================================================
0707 ;87. jmp symbol
0708 AE0 CB FF FF FF check irq
0709 AE4 FD FF FF FF inc pc
0710 AE8 FF C5 E5 FF path pc, mar
0711
0712 ;将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中,无条件跳转
0713 AEC FD 86 FF FF path jmp[mar], pc
0714 AF0 C3 FF FF FF reset upc
0715
0716 AF4 FF FF FF FF dup 3, null
0717
0718 B74 FD FF FF FF inc pc ;下一条指令地址(中断返回地址)暂存到a
0719 B78 FF C5 E1 FF path pc, a
0720
0721 ; 将中断服务程序入口地址置入pc,准备执行服务程序
0722 B7C FF 86 FF FF path [mar], pc
0723
0724 ; 将a中的返回地址入栈
0725 B80 BF C1 E5 FF path sp, mar
0726 B84 FF 91 E7 FF path a, [mar]
0727 B88 C3 FF FF FF reset upc
0728
0729 B8C FF FF FF FF dup 5, null
0718 ;=====================================================================
0719 ;88. loop symbol 将cl作为目的操作数减1,改变零标志,若zf = 1,则跳转
0720 B00 FD FF FF FF inc pc
0721 B04 FF 47 EF FF path [pc], ir
0722 B08 BF C1 E1 FF path rd, a
0723 B0C FF D1 E9 DF path alu_dec, rd
0724 B10 FF CB EB FF path al_flag, flag
0725 B14 FD FF FF FF inc pc
0726 B18 FF C5 E5 FF path pc, mar
0727 B1C FD 86 FF FF path jmp[mar], pc
0728 B20 CB FF FF FF check irq
0729 B24 C3 FF FF FF reset upc
0730
0731 ;====================================================================================================
0731 B28 FF FF FF FF dup 6, null
0732
0733 ;93. iret
0734 ; 先恢复标志寄存器内容
0735 BA0 FD FF FF FF inc pc
0736 BA4 FF 47 EF FF path [pc], ir
0737 BA8 BF C1 E1 FF path sp, a
0738 BAC FF D1 E5 D0 path alu_inc, mar
0739 BB0 FF 87 EB FF path [mar], flag
0740
0741 ; 恢复中断返回地址
0742 BB4 BF C1 E5 FF path sp, mar
0743 BB8 FF 86 FF FF path [mar], pc
0744
0745 ; 计算新的栈顶
0746 BBC BF C1 E1 FF path sp, a
0747 BC0 FF D1 E1 D0 path alu_inc, a
0748 BC4 FF D1 E9 D0 path alu_inc, sp
0749 BC8 C3 FF FF FF reset upc
0750
0751 BCC FF FF FF FF dup 5, null
0752
0753 ;====================================================================================================
0733 ;====================================================================================================
0734
0735 ; 软中断,首先将标志寄存器入栈,清除中断标志IF,并将当前程序断点的地址入栈保护,从
0736 ; 中断向量表中获取中断入口地址,CPU转向中断入口地址去执行相应的中断服务程序。
0737 ; 中断向量表段地址保存在ES寄存器中
0738 ;90. int immediate
0739 ; 将标志寄存器入栈
0740 B40 FD FF FF FF inc pc
0741 B44 FF 47 EF FF path [pc], ir
0742 B48 BF C1 E1 FF path sp, a
0743 B4C BF C1 E3 FF path sp, w
0744 B50 FF D1 E9 DF path alu_dec, sp
0745 B54 BF C1 E5 FF path sp, mar
0746 B58 FF 83 E7 FF path flag, [mar]
0747 ; 关中断
0748 B5C D3 FF FF FF cli
0749
0750 ; 更新栈顶
0751 B60 BF C1 E1 FF path sp, a
0752 B64 BF C1 E3 FF path sp, w
0753 B68 FF D1 E9 DF path alu_dec, sp
0754
0755 ;95. sal reg, reg
0756 BE0 FD FF FF FF inc pc
0757 BE4 FF 47 EF FF path [pc], ir
0758 BE8 FF C1 E3 FF path rs, w
0759 BEC BF C1 E1 FF path rd, a
0760 BF0 FF C9 E8 7F path alu_sal, rd
0761 BF4 FF D3 EB FF path shift_flag, flag
0762 BF8 FD FF FF FF inc pc
0763 BFC CB FF FF FF check irq
0764 C00 C3 FF FF FF reset upc
0765
0766 C04 FF FF FF FF dup 7, null
0767
0768 ;97. sar reg, reg
0769 C20 FD FF FF FF inc pc
0770 C24 FF 47 EF FF path [pc], ir
0771 C28 FF C1 E3 FF path rs, w
0772 C2C BF C1 E1 FF path rd, a
0773 C30 FF C9 E9 7F path alu_sar, rd
0774 C34 FF D3 EB FF path shift_flag, flag
0775 C38 FD FF FF FF inc pc
0776 C3C CB FF FF FF check irq
0777 C40 C3 FF FF FF reset upc
0778
0779 C44 FF FF FF FF dup 7, null
0780
0781 ;99. shl reg, reg
0782 C60 FD FF FF FF inc pc
0783 C64 FF 47 EF FF path [pc], ir
0784 C68 FF C1 E3 FF path rs, w
0785 C6C BF C1 E1 FF path rd, a
0786 C70 FF C9 E8 3F path alu_shl, rd
0787 C74 FF D3 EB FF path shift_flag, flag
0788 C78 FD FF FF FF inc pc
0789 C7C CB FF FF FF check irq
0790 C80 C3 FF FF FF reset upc
0755 ; 计算中断服务程序入口地址
0756 B6C FD FF FF FF inc pc
0757 B70 FF 47 E5 FF path [pc], mar
0758
0759 B74 FD FF FF FF inc pc ;下一条指令地址(中断返回地址)暂存到a
0760 B78 FF C5 E1 FF path pc, a
0761
0762 ; 将中断服务程序入口地址置入pc,准备执行服务程序
0763 B7C FF 86 FF FF path [mar], pc
0764
0765 ; 将a中的返回地址入栈
0766 B80 BF C1 E5 FF path sp, mar
0767 B84 FF 91 E7 FF path a, [mar]
0768 B88 C3 FF FF FF reset upc
0769
0770 B8C FF FF FF FF dup 5, null
0771
0772 ;====================================================================================================
0773
0774 ;93. iret
0775 ; 先恢复标志寄存器内容
0776 BA0 FD FF FF FF inc pc
0777 BA4 FF 47 EF FF path [pc], ir
0778 BA8 BF C1 E1 FF path sp, a
0779 BAC FF D1 E5 D0 path alu_inc, mar
0780 BB0 FF 87 EB FF path [mar], flag
0781
0782 ; 恢复中断返回地址
0783 BB4 BF C1 E5 FF path sp, mar
0784 BB8 FF 86 FF FF path [mar], pc
0785
0786 ; 计算新的栈顶
0787 BBC BF C1 E1 FF path sp, a
0788 BC0 FF D1 E1 D0 path alu_inc, a
0789 BC4 FF D1 E9 D0 path alu_inc, sp
0790 BC8 C3 FF FF FF reset upc
0791
0792 C84 FF FF FF FF dup 7, null
0792 BCC FF FF FF FF dup 5, null
0793
0794 ;101. shr reg, reg
0795 CA0 FD FF FF FF inc pc
0796 CA4 FF 47 EF FF path [pc], ir
0797 CA8 FF C1 E3 FF path rs, w
0798 CAC BF C1 E1 FF path rd, a
0799 CB0 FF C9 E9 3F path alu_shr, rd
0800 CB4 FF D3 EB FF path shift_flag, flag
0801 CB8 FD FF FF FF inc pc
0802 CBC CB FF FF FF check irq
0803 CC0 C3 FF FF FF reset upc
0804
0805 CC4 FF FF FF FF dup 7, null
0794 ;====================================================================================================
0795
0796 ;95. sal reg, reg
0797 BE0 FD FF FF FF inc pc
0798 BE4 FF 47 EF FF path [pc], ir
0799 BE8 FF C1 E3 FF path rs, w
0800 BEC BF C1 E1 FF path rd, a
0801 BF0 FF C9 E8 7F path alu_sal, rd
0802 BF4 FF D3 EB FF path shift_flag, flag
0803 BF8 FD FF FF FF inc pc
0804 BFC CB FF FF FF check irq
0805 C00 C3 FF FF FF reset upc
0806
0807 ;103. rol reg, reg
0808 CE0 FD FF FF FF inc pc
0809 CE4 FF 47 EF FF path [pc], ir
0810 CE8 FF C1 E3 FF path rs, w
0811 CEC BF C1 E1 FF path rd, a
0812 CF0 FF C9 E8 BF path alu_rol, rd
0813 CF4 FF D3 EB FF path shift_flag, flag
0814 CF8 FD FF FF FF inc pc
0815 CFC CB FF FF FF check irq
0816 D00 C3 FF FF FF reset upc
0817
0818 D04 FF FF FF FF dup 7, null
0807 C04 FF FF FF FF dup 7, null
0808
0809 ;97. sar reg, reg
0810 C20 FD FF FF FF inc pc
0811 C24 FF 47 EF FF path [pc], ir
0812 C28 FF C1 E3 FF path rs, w
0813 C2C BF C1 E1 FF path rd, a
0814 C30 FF C9 E9 7F path alu_sar, rd
0815 C34 FF D3 EB FF path shift_flag, flag
0816 C38 FD FF FF FF inc pc
0817 C3C CB FF FF FF check irq
0818 C40 C3 FF FF FF reset upc
0819
0820 ;105. ror reg, reg
0821 D20 FD FF FF FF inc pc
0822 D24 FF 47 EF FF path [pc], ir
0823 D28 FF C1 E3 FF path rs, w
0824 D2C BF C1 E1 FF path rd, a
0825 D30 FF C9 E9 BF path alu_ror, rd
0826 D34 FF D3 EB FF path shift_flag, flag
0827 D38 FD FF FF FF inc pc
0828 D3C CB FF FF FF check irq
0829 D40 C3 FF FF FF reset upc
0830
0831 D44 FF FF FF FF dup 7, null
0820 C44 FF FF FF FF dup 7, null
0821
0822 ;99. shl reg, reg
0823 C60 FD FF FF FF inc pc
0824 C64 FF 47 EF FF path [pc], ir
0825 C68 FF C1 E3 FF path rs, w
0826 C6C BF C1 E1 FF path rd, a
0827 C70 FF C9 E8 3F path alu_shl, rd
0828 C74 FF D3 EB FF path shift_flag, flag
0829 C78 FD FF FF FF inc pc
0830 C7C CB FF FF FF check irq
0831 C80 C3 FF FF FF reset upc
0832
0833 ;107. rcl reg, reg
0834 D60 FD FF FF FF inc pc
0835 D64 FF 47 EF FF path [pc], ir
0836 D68 FF C1 E3 FF path rs, w
0837 D6C BF C1 E1 FF path rd, a
0838 D70 FF C9 E8 FF path alu_rcl, rd
0839 D74 FF D3 EB FF path shift_flag, flag
0840 D78 FD FF FF FF inc pc
0841 D7C CB FF FF FF check irq
0842 D80 C3 FF FF FF reset upc
0843
0844 D84 FF FF FF FF dup 7, null
0833 C84 FF FF FF FF dup 7, null
0834
0835 ;101. shr reg, reg
0836 CA0 FD FF FF FF inc pc
0837 CA4 FF 47 EF FF path [pc], ir
0838 CA8 FF C1 E3 FF path rs, w
0839 CAC BF C1 E1 FF path rd, a
0840 CB0 FF C9 E9 3F path alu_shr, rd
0841 CB4 FF D3 EB FF path shift_flag, flag
0842 CB8 FD FF FF FF inc pc
0843 CBC CB FF FF FF check irq
0844 CC0 C3 FF FF FF reset upc
0845
0846 ;109. rcr reg, reg
0847 DA0 FD FF FF FF inc pc
0848 DA4 FF 47 EF FF path [pc], ir
0849 DA8 FF C1 E3 FF path rs, w
0850 DAC BF C1 E1 FF path rd, a
0851 DB0 FF C9 E9 FF path alu_rcr, rd
0852 DB4 FF D3 EB FF path shift_flag, flag
0853 DB8 FD FF FF FF inc pc
0854 DBC CB FF FF FF check irq
0855 DC0 C3 FF FF FF reset upc
0856
0857 DC4 FF FF FF FF dup 7, null
0846 CC4 FF FF FF FF dup 7, null
0847
0848 ;103. rol reg, reg
0849 CE0 FD FF FF FF inc pc
0850 CE4 FF 47 EF FF path [pc], ir
0851 CE8 FF C1 E3 FF path rs, w
0852 CEC BF C1 E1 FF path rd, a
0853 CF0 FF C9 E8 BF path alu_rol, rd
0854 CF4 FF D3 EB FF path shift_flag, flag
0855 CF8 FD FF FF FF inc pc
0856 CFC CB FF FF FF check irq
0857 D00 C3 FF FF FF reset upc
0858
0859 ;111. nop
0860 DE0 FD FF FF FF inc pc
0861 DE4 C3 FF FF FF reset upc
0862
0863 DE8 FF FF FF FF dup 6, null
0864
0865 ;112. hlt
0866 E00 C3 FF FF FF reset upc
0867 E04 FF FF FF FF dup 7, null
0868
0869 ;113. call symbol
0870 ; 计算新的栈顶
0871 E20 BF C1 E1 FF path sp, a
0872 E24 BF C1 E3 FF path sp, w
0873 E28 FF D1 E9 DF path alu_dec, sp
0874 E2C BF C1 E5 FF path sp, mar
0875
0876 ; 读出标号指定的跳转地址并暂存到寄存器a中
0877 E30 FD FF FF FF inc pc
0878 E34 FF 47 E1 FF path [pc], a
0879
0880 ; 将下一条指令地址(中断返回地址)入栈
0881 E38 FD FF FF FF inc pc
0882 E3C FF 85 E7 FF path pc, [mar]
0883
0884 ; 将a中暂存的跳转地址置入pc,实现调用
0885 E40 FF D0 FF FF path a, pc
0886 E44 CB FF FF FF check irq
0887 E48 C3 FF FF FF reset upc
0888
0889 E4C FF FF FF FF dup 5, null
0890
0891 ;115. ret
0892 E60 BF C1 E5 FF path sp, mar
0893 E64 FF 86 FF FF path [mar], pc
0894 E68 BF C1 E1 FF path sp, a
0895 E6C FF D1 E9 D0 path alu_inc, sp
0896 E70 C3 FF FF FF reset upc
0859 D04 FF FF FF FF dup 7, null
0860
0861 ;105. ror reg, reg
0862 D20 FD FF FF FF inc pc
0863 D24 FF 47 EF FF path [pc], ir
0864 D28 FF C1 E3 FF path rs, w
0865 D2C BF C1 E1 FF path rd, a
0866 D30 FF C9 E9 BF path alu_ror, rd
0867 D34 FF D3 EB FF path shift_flag, flag
0868 D38 FD FF FF FF inc pc
0869 D3C CB FF FF FF check irq
0870 D40 C3 FF FF FF reset upc
0871
0872 D44 FF FF FF FF dup 7, null
0873
0874 ;107. rcl reg, reg
0875 D60 FD FF FF FF inc pc
0876 D64 FF 47 EF FF path [pc], ir
0877 D68 FF C1 E3 FF path rs, w
0878 D6C BF C1 E1 FF path rd, a
0879 D70 FF C9 E8 FF path alu_rcl, rd
0880 D74 FF D3 EB FF path shift_flag, flag
0881 D78 FD FF FF FF inc pc
0882 D7C CB FF FF FF check irq
0883 D80 C3 FF FF FF reset upc
0884
0885 D84 FF FF FF FF dup 7, null
0886
0887 ;109. rcr reg, reg
0888 DA0 FD FF FF FF inc pc
0889 DA4 FF 47 EF FF path [pc], ir
0890 DA8 FF C1 E3 FF path rs, w
0891 DAC BF C1 E1 FF path rd, a
0892 DB0 FF C9 E9 FF path alu_rcr, rd
0893 DB4 FF D3 EB FF path shift_flag, flag
0894 DB8 FD FF FF FF inc pc
0895 DBC CB FF FF FF check irq
0896 DC0 C3 FF FF FF reset upc
0897
0898 E74 FF FF FF FF dup 3, null
0898 DC4 FF FF FF FF dup 7, null
0899
0900 ;116. cli
0901 E80 D3 FF FF FF cli
0902 E84 FD FF FF FF inc pc
0903 E88 C3 FF FF FF reset upc
0904
0905 E8C FF FF FF FF dup 5, null
0906
0907 ;117. sti
0908 EA0 D7 FF FF FF sti
0909 EA4 FD FF FF FF inc pc
0910 EA8 C3 FF FF FF reset upc
0911
0912 EAC FF FF FF FF dup 5, null
0913
0914 ;118. 硬中断处理微指令程序
0915 ; 标志寄存器和断点地址入栈
0916 EC0 BF C1 E1 FF path sp, a
0917 EC4 BF C1 E3 FF path sp, w
0918 EC8 FF D1 E9 DF path alu_dec, sp
0919 ECC BF C1 E5 FF path sp, mar
0920 ED0 FF 83 E7 FF path flag, [mar]
0921 ED4 BF C1 E1 FF path sp, a
0922 ED8 FF D1 E9 DF path alu_dec, sp
0923 EDC BF C1 E5 FF path sp, mar
0924 EE0 FF 85 E7 FF path pc, [mar]
0925 ; IF标志置位,开中断,允许中断嵌套
0926 EE4 D7 FF FF FF sti
0927 ; 获取中断号中断服务程序入口地址
0928 EE8 CF FF FF FF inta
0929 EEC FF FF FF FF dup 1, null ;插入空闲周期
0930 EF0 CE C7 E5 FF path inta, mar ;读取中断号并送入地址寄存器中
0931 ; 转移到中断服务程序执行
0932 EF4 FF 86 FF FF path [mar], pc
0933 EF8 C3 FF FF FF reset upc
0934
0935 EFC FF FF FF FF dup 1, null
0936
0937 ;120. inc reg
0938 F00 FD FF FF FF inc pc
0939 F04 FF 47 EF FF path [pc], ir
0940 F08 BF C1 E1 FF path rd, a
0941 F0C FF D1 E9 D0 path alu_inc, rd
0942 F10 FF CB EB FF path al_flag, flag
0943 F14 FD FF FF FF inc pc
0944 F18 CB FF FF FF check irq
0945 F1C C3 FF FF FF reset upc
0946
0947 ;121. dec reg
0948 F20 FD FF FF FF inc pc
0949 F24 FF 47 EF FF path [pc], ir
0950 F28 BF C1 E1 FF path rd, a
0951 F2C BF C1 E3 FF path rd, w
0952 F30 FF D1 E9 DF path alu_dec, rd
0953 F34 FF CB EB FF path al_flag, flag
0954 F38 FD FF FF FF inc pc
0955 F3C CB FF FF FF check irq
0956 F40 C3 FF FF FF reset upc
0957
0958 F44 FF FF FF FF dup 7, null
\ No newline at end of file
0900 ;111. nop
0901 DE0 FD FF FF FF inc pc
0902 DE4 C3 FF FF FF reset upc
0903
0904 DE8 FF FF FF FF dup 6, null
0905
0906 ;112. hlt
0907 E00 C3 FF FF FF reset upc
0908 E04 FF FF FF FF dup 7, null
0909
0910 ;113. call symbol
0911 ; 计算新的栈顶
0912 E20 BF C1 E1 FF path sp, a
0913 E24 BF C1 E3 FF path sp, w
0914 E28 FF D1 E9 DF path alu_dec, sp
0915 E2C BF C1 E5 FF path sp, mar
0916
0917 ; 读出标号指定的跳转地址并暂存到寄存器a中
0918 E30 FD FF FF FF inc pc
0919 E34 FF 47 E1 FF path [pc], a
0920
0921 ; 将下一条指令地址(中断返回地址)入栈
0922 E38 FD FF FF FF inc pc
0923 E3C FF 85 E7 FF path pc, [mar]
0924
0925 ; 将a中暂存的跳转地址置入pc,实现调用
0926 E40 FF D0 FF FF path a, pc
0927 E44 CB FF FF FF check irq
0928 E48 C3 FF FF FF reset upc
0929
0930 E4C FF FF FF FF dup 5, null
0931
0932 ;115. ret
0933 E60 BF C1 E5 FF path sp, mar
0934 E64 FF 86 FF FF path [mar], pc
0935 E68 BF C1 E1 FF path sp, a
0936 E6C FF D1 E9 D0 path alu_inc, sp
0937 E70 C3 FF FF FF reset upc
0938
0939 E74 FF FF FF FF dup 3, null
0940
0941 ;116. cli
0942 E80 D3 FF FF FF cli
0943 E84 FD FF FF FF inc pc
0944 E88 C3 FF FF FF reset upc
0945
0946 E8C FF FF FF FF dup 5, null
0947
0948 ;117. sti
0949 EA0 D7 FF FF FF sti
0950 EA4 FD FF FF FF inc pc
0951 EA8 C3 FF FF FF reset upc
0952
0953 EAC FF FF FF FF dup 5, null
0954
0955 ;118. 硬中断处理微指令程序
0956 ; 标志寄存器和断点地址入栈
0957 EC0 BF C1 E1 FF path sp, a
0958 EC4 BF C1 E3 FF path sp, w
0959 EC8 FF D1 E9 DF path alu_dec, sp
0960 ECC BF C1 E5 FF path sp, mar
0961 ED0 FF 83 E7 FF path flag, [mar]
0962 ED4 BF C1 E1 FF path sp, a
0963 ED8 FF D1 E9 DF path alu_dec, sp
0964 EDC BF C1 E5 FF path sp, mar
0965 EE0 FF 85 E7 FF path pc, [mar]
0966 ; IF标志置位,开中断,允许中断嵌套
0967 EE4 D7 FF FF FF sti
0968 ; 获取中断号中断服务程序入口地址
0969 EE8 CF FF FF FF inta
0970 EEC FF FF FF FF dup 1, null ;插入空闲周期
0971 EF0 CE C7 E5 FF path inta, mar ;读取中断号并送入地址寄存器中
0972 ; 转移到中断服务程序执行
0973 EF4 FF 86 FF FF path [mar], pc
0974 EF8 C3 FF FF FF reset upc
0975
0976 EFC FF FF FF FF dup 1, null
0977
0978 ;120. inc reg
0979 F00 FD FF FF FF inc pc
0980 F04 FF 47 EF FF path [pc], ir
0981 F08 BF C1 E1 FF path rd, a
0982 F0C FF D1 E9 D0 path alu_inc, rd
0983 F10 FF CB EB FF path al_flag, flag
0984 F14 FD FF FF FF inc pc
0985 F18 CB FF FF FF check irq
0986 F1C C3 FF FF FF reset upc
0987
0988 ;121. dec reg
0989 F20 FD FF FF FF inc pc
0990 F24 FF 47 EF FF path [pc], ir
0991 F28 BF C1 E1 FF path rd, a
0992 F2C BF C1 E3 FF path rd, w
0993 F30 FF D1 E9 DF path alu_dec, rd
0994 F34 FF CB EB FF path al_flag, flag
0995 F38 FD FF FF FF inc pc
0996 F3C CB FF FF FF check irq
0997 F40 C3 FF FF FF reset upc
0998
0999 F44 FF FF FF FF dup 7, null
\ No newline at end of file
......@@ -612,70 +612,110 @@ reset upc
dup 1, null
;=====================================================================
;80. ja symbol
check irq
inc pc
path ja[pc], pc
path pc, mar ;将PC值传送到地址寄存器mar中
;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
;若转移条件不成立,则PC加1,指向下一条指令
path ja[mar], pc
reset upc
dup 4, null
dup 3, null
;=====================================================================
;81. jb symbol
check irq
inc pc
path jb[pc], pc
path pc, mar
;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
;若转移条件不成立,则PC加1,指向下一条指令
path jb[mar], pc
reset upc
dup 4, null
dup 3, null
;=====================================================================
;82. jg symbol
check irq
inc pc
path jg[pc], pc
path pc, mar
;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
;若转移条件不成立,则PC加1,指向下一条指令
path jg[mar], pc
reset upc
dup 4, null
dup 3, null
;=====================================================================
;83. jl symbol
check irq
inc pc
path jl[pc], pc
path pc, mar
;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
;若转移条件不成立,则PC加1,指向下一条指令
path jl[mar], pc
reset upc
dup 4, null
dup 3, null
;=====================================================================
;84. je symbol
check irq
inc pc
path jz[pc], pc
path pc, mar
;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
;若转移条件不成立,则PC加1,指向下一条指令
path jz[mar], pc
reset upc
dup 4, null
dup 3, null
;=====================================================================
;85. jne symbol
check irq
inc pc
path jnz[pc], pc
path pc, mar
;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
;若转移条件不成立,则PC加1,指向下一条指令
path jnz[mar], pc
reset upc
dup 4, null
dup 3, null
;=====================================================================
;86. jc symbol
check irq
inc pc
path jc[pc], pc
path pc, mar
;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
;若转移条件不成立,则PC加1,指向下一条指令
path jc[mar], pc
reset upc
dup 4, null
dup 3, null
;=====================================================================
;87. jmp symbol
check irq
inc pc
path jmp[pc], pc
path pc, mar
;将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中,无条件跳转
path jmp[mar], pc
reset upc
dup 4, null
dup 3, null
;=====================================================================
;88. loop symbol 将cl作为目的操作数减1,改变零标志,若zf = 1,则跳转
inc pc
path [pc], ir
......@@ -683,11 +723,12 @@ path rd, a
path alu_dec, rd
path al_flag, flag
inc pc
path jmp[pc], pc
path pc, mar
path jmp[mar], pc
check irq
reset upc
dup 7, null
dup 6, null
;====================================================================================================
......
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG߿GGGGGGGGGGGGGGFFFFFF?F_FGFG߿GGGGG?G?GGGG߿G߿߿GG
\ No newline at end of file
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG߿GGGGGGGGGGGGGG?_GG߿GGGGG?G?GGGG߿G߿߿GG
\ No newline at end of file
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论