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

Merge branch 'update' into 'master'

没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
...@@ -94,6 +94,7 @@ const char* alu_not_keyword = "alu_not"; ...@@ -94,6 +94,7 @@ const char* alu_not_keyword = "alu_not";
const char* al_flag_keyword = "al_flag"; const char* al_flag_keyword = "al_flag";
const char* shift_flag_keyword = "shift_flag"; const char* shift_flag_keyword = "shift_flag";
// 访问主存或外设的操作数 // 访问主存或外设的操作数
const char* pc_main_memory_keyword = "[pc]"; const char* pc_main_memory_keyword = "[pc]";
const char* jz_mar_keyword = "jz[mar]"; const char* jz_mar_keyword = "jz[mar]";
...@@ -319,6 +320,7 @@ struct KEYWORD_FUNCTION_ENTRY ...@@ -319,6 +320,7 @@ struct KEYWORD_FUNCTION_ENTRY
// 指令名称 // 指令名称
const char* fetch_instruction_keyword = "fetch"; const char* fetch_instruction_keyword = "fetch";
const char* check_instruction_keyword = "check"; const char* check_instruction_keyword = "check";
const char* hold_instruction_keyword = "hold";
const char* cli_instruction_keyword = "cli"; const char* cli_instruction_keyword = "cli";
const char* sti_instruction_keyword = "sti"; const char* sti_instruction_keyword = "sti";
const char* inta_instruction_keyword = "inta"; const char* inta_instruction_keyword = "inta";
...@@ -398,7 +400,7 @@ void parse_fetch(int line_num) ...@@ -398,7 +400,7 @@ void parse_fetch(int line_num)
} }
// check // check irq
void parse_check(int line_num) void parse_check(int line_num)
{ {
unsigned long ul = 0xffffffcb; unsigned long ul = 0xffffffcb;
...@@ -406,6 +408,14 @@ void parse_check(int line_num) ...@@ -406,6 +408,14 @@ void parse_check(int line_num)
machine_code_address += 4; machine_code_address += 4;
} }
// hold DMA
void parse_hold(int line_num)
{
unsigned long ul = 0xffffd5db;
memcpy(&machine_code[machine_code_address], &ul, 4);
machine_code_address += 4;
}
// cli // cli
void parse_cli(int line_num) void parse_cli(int line_num)
{ {
...@@ -534,6 +544,7 @@ struct KEYWORD_FUNCTION_ENTRY keyword_function_table[] = ...@@ -534,6 +544,7 @@ struct KEYWORD_FUNCTION_ENTRY keyword_function_table[] =
,{ &fetch_instruction_keyword, parse_fetch } ,{ &fetch_instruction_keyword, parse_fetch }
,{ &check_instruction_keyword, parse_check } ,{ &check_instruction_keyword, parse_check }
,{ &hold_instruction_keyword, parse_hold }
,{ &dup_instruction_keyword, parse_dup } ,{ &dup_instruction_keyword, parse_dup }
,{ &cli_instruction_keyword, parse_cli } ,{ &cli_instruction_keyword, parse_cli }
,{ &sti_instruction_keyword, parse_sti } ,{ &sti_instruction_keyword, parse_sti }
......
没有这种文件类型的预览
没有这种文件类型的预览
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
0014 28 FD FF FF FF inc pc 0014 28 FD FF FF FF inc pc
0015 2C FF 47 E9 FF path [pc], rd 0015 2C FF 47 E9 FF path [pc], rd
0016 30 FD FF FF FF inc pc 0016 30 FD FF FF FF inc pc
0017 34 CB FF FF FF check irq 0017 34 CB FF FF FF check irq ;查询硬中断
0018 38 C3 FF FF FF reset upc 0018 38 C3 FF FF FF reset upc
0019 0019
0020 3C FF FF FF FF dup 1, null 0020 3C FF FF FF FF dup 1, null
...@@ -542,438 +542,438 @@ ...@@ -542,438 +542,438 @@
0542 8F8 FF CB EB FF path al_flag, flag 0542 8F8 FF CB EB FF path al_flag, flag
0543 8FC FD FF FF FF inc pc 0543 8FC FD FF FF FF inc pc
0544 900 CB FF FF FF check irq 0544 900 CB FF FF FF check irq
0545 904 C3 FF FF FF reset upc 0545 904 DB D5 FF FF hold DMA ;查询DMA请求
0546 0546 908 C3 FF FF FF reset upc
0547 908 FF FF FF FF dup 6, null 0547
0548 0548 90C FF FF FF FF dup 5, null
0549 ;73. cmp reg, reg 0549
0550 920 FD FF FF FF inc pc 0550 ;73. cmp reg, reg
0551 924 FF 47 EF FF path [pc], ir 0551 920 FD FF FF FF inc pc
0552 928 BF C1 E1 FF path rd, a 0552 924 FF 47 EF FF path [pc], ir
0553 92C FF C1 E3 FF path rs, w 0553 928 BF C1 E1 FF path rd, a
0554 930 FF D1 E1 D6 path alu_sub, a 0554 92C FF C1 E3 FF path rs, w
0555 934 FF CB EB FF path al_flag, flag 0555 930 FF D1 E1 D6 path alu_sub, a
0556 938 FD FF FF FF inc pc 0556 934 FF CB EB FF path al_flag, flag
0557 93C CB FF FF FF check irq 0557 938 FD FF FF FF inc pc
0558 940 C3 FF FF FF reset upc 0558 93C CB FF FF FF check irq
0559 0559 940 C3 FF FF FF reset upc
0560 944 FF FF FF FF dup 7, null 0560
0561 0561 944 FF FF FF FF dup 7, null
0562 ;75. in al, imm 0562
0563 960 FD FF FF FF inc pc 0563 ;75. in al, imm
0564 964 FF 47 EF FF path [pc], ir 0564 960 FD FF FF FF inc pc
0565 968 FD FF FF FF inc pc 0565 964 FF 47 EF FF path [pc], ir
0566 96C FF 47 E5 FF path [pc], mar 0566 968 FD FF FF FF inc pc
0567 970 FE 87 E9 FF path <mar>, rd 0567 96C FF 47 E5 FF path [pc], mar
0568 974 FD FF FF FF inc pc 0568 970 FE 87 E9 FF path <mar>, rd
0569 978 C3 FF FF FF reset upc 0569 974 FD FF FF FF inc pc
0570 0570 978 C3 FF FF FF reset upc
0571 97C FF FF FF FF dup 1, null 0571
0572 0572 97C FF FF FF FF dup 1, null
0573 ;76. in al, dl 0573
0574 980 FD FF FF FF inc pc 0574 ;76. in al, dl
0575 984 FF 47 EF FF path [pc], ir 0575 980 FD FF FF FF inc pc
0576 988 FF C1 E5 FF path rs, mar 0576 984 FF 47 EF FF path [pc], ir
0577 98C FE 87 E9 FF path <mar>, rd 0577 988 FF C1 E5 FF path rs, mar
0578 990 FD FF FF FF inc pc 0578 98C FE 87 E9 FF path <mar>, rd
0579 994 C3 FF FF FF reset upc 0579 990 FD FF FF FF inc pc
0580 0580 994 C3 FF FF FF reset upc
0581 998 FF FF FF FF dup 2, null 0581
0582 0582 998 FF FF FF FF dup 2, null
0583 ;77. out dl, al 0583
0584 9A0 FD FF FF FF inc pc 0584 ;77. out dl, al
0585 9A4 FF 47 EF FF path [pc], ir 0585 9A0 FD FF FF FF inc pc
0586 9A8 BF C1 E5 FF path rd, mar 0586 9A4 FF 47 EF FF path [pc], ir
0587 9AC FE 81 E7 FF path rs, <mar> 0587 9A8 BF C1 E5 FF path rd, mar
0588 9B0 FD FF FF FF inc pc 0588 9AC FE 81 E7 FF path rs, <mar>
0589 9B4 C3 FF FF FF reset upc 0589 9B0 FD FF FF FF inc pc
0590 0590 9B4 C3 FF FF FF reset upc
0591 9B8 FF FF FF FF dup 2, null 0591
0592 0592 9B8 FF FF FF FF dup 2, null
0593 ;78. out imm, al 0593
0594 9C0 FD FF FF FF inc pc 0594 ;78. out imm, al
0595 9C4 FF 47 EF FF path [pc], ir 0595 9C0 FD FF FF FF inc pc
0596 9C8 FD FF FF FF inc pc 0596 9C4 FF 47 EF FF path [pc], ir
0597 9CC FF 47 E5 FF path [pc], mar 0597 9C8 FD FF FF FF inc pc
0598 9D0 FE 81 E7 FF path rs, <mar> 0598 9CC FF 47 E5 FF path [pc], mar
0599 9D4 FD FF FF FF inc pc 0599 9D0 FE 81 E7 FF path rs, <mar>
0600 9D8 C3 FF FF FF reset upc 0600 9D4 FD FF FF FF inc pc
0601 0601 9D8 C3 FF FF FF reset upc
0602 9DC FF FF FF FF dup 1, null 0602
0603 0603 9DC FF FF FF FF dup 1, null
0604 ;79. lea reg, symbol 0604
0605 9E0 FD FF FF FF inc pc 0605 ;79. lea reg, symbol
0606 9E4 FF 47 EF FF path [pc], ir 0606 9E0 FD FF FF FF inc pc
0607 9E8 FD FF FF FF inc pc 0607 9E4 FF 47 EF FF path [pc], ir
0608 9EC FF 47 E9 FF path [pc], rd 0608 9E8 FD FF FF FF inc pc
0609 9F0 FD FF FF FF inc pc 0609 9EC FF 47 E9 FF path [pc], rd
0610 9F4 CB FF FF FF check irq 0610 9F0 FD FF FF FF inc pc
0611 9F8 C3 FF FF FF reset upc 0611 9F4 CB FF FF FF check irq
0612 0612 9F8 C3 FF FF FF reset upc
0613 9FC FF FF FF FF dup 1, null 0613
0614 0614 9FC FF FF FF FF dup 1, null
0615 ;===================================================================== 0615
0616 ;80. ja symbol 0616 ;=====================================================================
0617 A00 CB FF FF FF check irq 0617 ;80. ja symbol
0618 A04 FD FF FF FF inc pc 0618 A00 CB FF FF FF check irq
0619 A08 FF C5 E5 FF path pc, mar ;将PC值传送到地址寄存器mar中 0619 A04 FD FF FF FF inc pc
0620 0620 A08 FF C5 E5 FF path pc, mar ;将PC值传送到地址寄存器mar中
0621 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中 0621
0622 ;若转移条件不成立,则PC加1,指向下一条指令 0622 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
0623 A0C FD 86 7F FF path ja[mar], pc 0623 ;若转移条件不成立,则PC加1,指向下一条指令
0624 A10 C3 FF FF FF reset upc 0624 A0C FD 86 7F FF path ja[mar], pc
0625 0625 A10 C3 FF FF FF reset upc
0626 A14 FF FF FF FF dup 3, null 0626
0627 0627 A14 FF FF FF FF dup 3, null
0628 ;===================================================================== 0628
0629 ;81. jb symbol 0629 ;=====================================================================
0630 A20 CB FF FF FF check irq 0630 ;81. jb symbol
0631 A24 FD FF FF FF inc pc 0631 A20 CB FF FF FF check irq
0632 A28 FF C5 E5 FF path pc, mar 0632 A24 FD FF FF FF inc pc
0633 0633 A28 FF C5 E5 FF path pc, mar
0634 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中 0634
0635 ;若转移条件不成立,则PC加1,指向下一条指令 0635 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
0636 A2C FD 86 9F FF path jb[mar], pc 0636 ;若转移条件不成立,则PC加1,指向下一条指令
0637 A30 C3 FF FF FF reset upc 0637 A2C FD 86 9F FF path jb[mar], pc
0638 0638 A30 C3 FF FF FF reset upc
0639 A34 FF FF FF FF dup 3, null 0639
0640 0640 A34 FF FF FF FF dup 3, null
0641 ;===================================================================== 0641
0642 ;82. jg symbol 0642 ;=====================================================================
0643 A40 CB FF FF FF check irq 0643 ;82. jg symbol
0644 A44 FD FF FF FF inc pc 0644 A40 CB FF FF FF check irq
0645 A48 FF C5 E5 FF path pc, mar 0645 A44 FD FF FF FF inc pc
0646 0646 A48 FF C5 E5 FF path pc, mar
0647 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中 0647
0648 ;若转移条件不成立,则PC加1,指向下一条指令 0648 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
0649 A4C FD 86 BF FF path jg[mar], pc 0649 ;若转移条件不成立,则PC加1,指向下一条指令
0650 A50 C3 FF FF FF reset upc 0650 A4C FD 86 BF FF path jg[mar], pc
0651 0651 A50 C3 FF FF FF reset upc
0652 A54 FF FF FF FF dup 3, null 0652
0653 0653 A54 FF FF FF FF dup 3, null
0654 ;===================================================================== 0654
0655 ;83. jl symbol 0655 ;=====================================================================
0656 A60 CB FF FF FF check irq 0656 ;83. jl symbol
0657 A64 FD FF FF FF inc pc 0657 A60 CB FF FF FF check irq
0658 A68 FF C5 E5 FF path pc, mar 0658 A64 FD FF FF FF inc pc
0659 0659 A68 FF C5 E5 FF path pc, mar
0660 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中 0660
0661 ;若转移条件不成立,则PC加1,指向下一条指令 0661 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
0662 A6C FD 86 DF FF path jl[mar], pc 0662 ;若转移条件不成立,则PC加1,指向下一条指令
0663 A70 C3 FF FF FF reset upc 0663 A6C FD 86 DF FF path jl[mar], pc
0664 0664 A70 C3 FF FF FF reset upc
0665 A74 FF FF FF FF dup 3, null 0665
0666 0666 A74 FF FF FF FF dup 3, null
0667 ;===================================================================== 0667
0668 ;84. je symbol 0668 ;=====================================================================
0669 A80 CB FF FF FF check irq 0669 ;84. je symbol
0670 A84 FD FF FF FF inc pc 0670 A80 CB FF FF FF check irq
0671 A88 FF C5 E5 FF path pc, mar 0671 A84 FD FF FF FF inc pc
0672 0672 A88 FF C5 E5 FF path pc, mar
0673 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中 0673
0674 ;若转移条件不成立,则PC加1,指向下一条指令 0674 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
0675 A8C FD 86 1F FF path jz[mar], pc 0675 ;若转移条件不成立,则PC加1,指向下一条指令
0676 A90 C3 FF FF FF reset upc 0676 A8C FD 86 1F FF path jz[mar], pc
0677 0677 A90 C3 FF FF FF reset upc
0678 A94 FF FF FF FF dup 3, null 0678
0679 0679 A94 FF FF FF FF dup 3, null
0680 ;===================================================================== 0680
0681 ;85. jne symbol 0681 ;=====================================================================
0682 AA0 CB FF FF FF check irq 0682 ;85. jne symbol
0683 AA4 FD FF FF FF inc pc 0683 AA0 CB FF FF FF check irq
0684 AA8 FF C5 E5 FF path pc, mar 0684 AA4 FD FF FF FF inc pc
0685 0685 AA8 FF C5 E5 FF path pc, mar
0686 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中 0686
0687 ;若转移条件不成立,则PC加1,指向下一条指令 0687 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
0688 AAC FD 86 3F FF path jnz[mar], pc 0688 ;若转移条件不成立,则PC加1,指向下一条指令
0689 AB0 C3 FF FF FF reset upc 0689 AAC FD 86 3F FF path jnz[mar], pc
0690 0690 AB0 C3 FF FF FF reset upc
0691 AB4 FF FF FF FF dup 3, null 0691
0692 0692 AB4 FF FF FF FF dup 3, null
0693 ;===================================================================== 0693
0694 ;86. jc symbol 0694 ;=====================================================================
0695 AC0 CB FF FF FF check irq 0695 ;86. jc symbol
0696 AC4 FD FF FF FF inc pc 0696 AC0 CB FF FF FF check irq
0697 AC8 FF C5 E5 FF path pc, mar 0697 AC4 FD FF FF FF inc pc
0698 0698 AC8 FF C5 E5 FF path pc, mar
0699 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中 0699
0700 ;若转移条件不成立,则PC加1,指向下一条指令 0700 ;若转移条件成立,则将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中
0701 ACC FD 86 5F FF path jc[mar], pc 0701 ;若转移条件不成立,则PC加1,指向下一条指令
0702 AD0 C3 FF FF FF reset upc 0702 ACC FD 86 5F FF path jc[mar], pc
0703 0703 AD0 C3 FF FF FF reset upc
0704 AD4 FF FF FF FF dup 3, null 0704
0705 0705 AD4 FF FF FF FF dup 3, null
0706 ;===================================================================== 0706
0707 ;87. jmp symbol 0707 ;=====================================================================
0708 AE0 CB FF FF FF check irq 0708 ;87. jmp symbol
0709 AE4 FD FF FF FF inc pc 0709 AE0 CB FF FF FF check irq
0710 AE8 FF C5 E5 FF path pc, mar 0710 AE4 FD FF FF FF inc pc
0711 0711 AE8 FF C5 E5 FF path pc, mar
0712 ;将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中,无条件跳转 0712
0713 AEC FD 86 FF FF path jmp[mar], pc 0713 ;将地址寄存器mar指定存储单元的值作为跳转地址加载到pc中,无条件跳转
0714 AF0 C3 FF FF FF reset upc 0714 AEC FD 86 FF FF path jmp[mar], pc
0715 0715 AF0 C3 FF FF FF reset upc
0716 AF4 FF FF FF FF dup 3, null 0716
0717 0717 AF4 FF FF FF FF dup 3, null
0718 ;===================================================================== 0718
0719 ;88. loop symbol 将cl作为目的操作数减1,改变零标志,若zf = 1,则跳转 0719 ;=====================================================================
0720 B00 FD FF FF FF inc pc 0720 ;88. loop symbol 将cl作为目的操作数减1,改变零标志,若zf = 1,则跳转
0721 B04 FF 47 EF FF path [pc], ir 0721 B00 FD FF FF FF inc pc
0722 B08 BF C1 E1 FF path rd, a 0722 B04 FF 47 EF FF path [pc], ir
0723 B0C FF D1 E9 DF path alu_dec, rd 0723 B08 BF C1 E1 FF path rd, a
0724 B10 FF CB EB FF path al_flag, flag 0724 B0C FF D1 E9 DF path alu_dec, rd
0725 B14 FD FF FF FF inc pc 0725 B10 FF CB EB FF path al_flag, flag
0726 B18 FF C5 E5 FF path pc, mar 0726 B14 FD FF FF FF inc pc
0727 B1C FD 86 FF FF path jmp[mar], pc 0727 B18 FF C5 E5 FF path pc, mar
0728 B20 CB FF FF FF check irq 0728 B1C FD 86 FF FF path jmp[mar], pc
0729 B24 C3 FF FF FF reset upc 0729 B20 CB FF FF FF check irq
0730 0730 B24 C3 FF FF FF reset upc
0731 B28 FF FF FF FF dup 6, null 0731
0732 0732 B28 FF FF FF FF dup 6, null
0733 ;==================================================================================================== 0733
0734 0734 ;====================================================================================================
0735 ; 软中断,首先将标志寄存器入栈,清除中断标志IF,并将当前程序断点的地址入栈保护,从 0735
0736 ; 中断向量表中获取中断入口地址,CPU转向中断入口地址去执行相应的中断服务程序。 0736 ; 软中断,首先将标志寄存器入栈,清除中断标志IF,并将当前程序断点的地址入栈保护,从
0737 ; 中断向量表段地址保存在ES寄存器中 0737 ; 中断向量表中获取中断入口地址,CPU转向中断入口地址去执行相应的中断服务程序。
0738 ;90. int immediate 0738 ; 中断向量表段地址保存在ES寄存器中
0739 ; 将标志寄存器入栈 0739 ;90. int immediate
0740 B40 FD FF FF FF inc pc 0740 ; 将标志寄存器入栈
0741 B44 FF 47 EF FF path [pc], ir 0741 B40 FD FF FF FF inc pc
0742 B48 BF C1 E1 FF path sp, a 0742 B44 FF 47 EF FF path [pc], ir
0743 B4C BF C1 E3 FF path sp, w 0743 B48 BF C1 E1 FF path sp, a
0744 B50 FF D1 E9 DF path alu_dec, sp 0744 B4C BF C1 E3 FF path sp, w
0745 B54 BF C1 E5 FF path sp, mar 0745 B50 FF D1 E9 DF path alu_dec, sp
0746 B58 FF 83 E7 FF path flag, [mar] 0746 B54 BF C1 E5 FF path sp, mar
0747 ; 关中断 0747 B58 FF 83 E7 FF path flag, [mar]
0748 B5C D3 FF FF FF cli 0748 ; 关中断
0749 0749 B5C D3 FF FF FF cli
0750 ; 更新栈顶 0750
0751 B60 BF C1 E1 FF path sp, a 0751 ; 更新栈顶
0752 B64 BF C1 E3 FF path sp, w 0752 B60 BF C1 E1 FF path sp, a
0753 B68 FF D1 E9 DF path alu_dec, sp 0753 B64 BF C1 E3 FF path sp, w
0754 0754 B68 FF D1 E9 DF path alu_dec, sp
0755 ; 计算中断服务程序入口地址 0755
0756 B6C FD FF FF FF inc pc 0756 ; 计算中断服务程序入口地址
0757 B70 FF 47 E5 FF path [pc], mar 0757 B6C FD FF FF FF inc pc
0758 0758 B70 FF 47 E5 FF path [pc], mar
0759 B74 FD FF FF FF inc pc ;下一条指令地址(中断返回地址)暂存到a 0759
0760 B78 FF C5 E1 FF path pc, a 0760 B74 FD FF FF FF inc pc ;下一条指令地址(中断返回地址)暂存到a
0761 0761 B78 FF C5 E1 FF path pc, a
0762 ; 将中断服务程序入口地址置入pc,准备执行服务程序 0762
0763 B7C FF 86 FF FF path [mar], pc 0763 ; 将中断服务程序入口地址置入pc,准备执行服务程序
0764 0764 B7C FF 86 FF FF path [mar], pc
0765 ; 将a中的返回地址入栈 0765
0766 B80 BF C1 E5 FF path sp, mar 0766 ; 将a中的返回地址入栈
0767 B84 FF 91 E7 FF path a, [mar] 0767 B80 BF C1 E5 FF path sp, mar
0768 B88 C3 FF FF FF reset upc 0768 B84 FF 91 E7 FF path a, [mar]
0769 0769 B88 C3 FF FF FF reset upc
0770 B8C FF FF FF FF dup 5, null 0770
0771 0771 B8C FF FF FF FF dup 5, null
0772 ;==================================================================================================== 0772
0773 0773 ;====================================================================================================
0774 ;93. iret 0774
0775 ; 先恢复标志寄存器内容 0775 ;93. iret
0776 BA0 FD FF FF FF inc pc 0776 ; 先恢复标志寄存器内容
0777 BA4 FF 47 EF FF path [pc], ir 0777 BA0 FD FF FF FF inc pc
0778 BA8 BF C1 E1 FF path sp, a 0778 BA4 FF 47 EF FF path [pc], ir
0779 BAC FF D1 E5 D0 path alu_inc, mar 0779 BA8 BF C1 E1 FF path sp, a
0780 BB0 FF 87 EB FF path [mar], flag 0780 BAC FF D1 E5 D0 path alu_inc, mar
0781 0781 BB0 FF 87 EB FF path [mar], flag
0782 ; 恢复中断返回地址 0782
0783 BB4 BF C1 E5 FF path sp, mar 0783 ; 恢复中断返回地址
0784 BB8 FF 86 FF FF path [mar], pc 0784 BB4 BF C1 E5 FF path sp, mar
0785 0785 BB8 FF 86 FF FF path [mar], pc
0786 ; 计算新的栈顶 0786
0787 BBC BF C1 E1 FF path sp, a 0787 ; 计算新的栈顶
0788 BC0 FF D1 E1 D0 path alu_inc, a 0788 BBC BF C1 E1 FF path sp, a
0789 BC4 FF D1 E9 D0 path alu_inc, sp 0789 BC0 FF D1 E1 D0 path alu_inc, a
0790 BC8 C3 FF FF FF reset upc 0790 BC4 FF D1 E9 D0 path alu_inc, sp
0791 0791 BC8 C3 FF FF FF reset upc
0792 BCC FF FF FF FF dup 5, null 0792
0793 0793 BCC FF FF FF FF dup 5, null
0794 ;==================================================================================================== 0794
0795 0795 ;====================================================================================================
0796 ;95. sal reg, reg 0796
0797 BE0 FD FF FF FF inc pc 0797 ;95. sal reg, reg
0798 BE4 FF 47 EF FF path [pc], ir 0798 BE0 FD FF FF FF inc pc
0799 BE8 FF C1 E3 FF path rs, w 0799 BE4 FF 47 EF FF path [pc], ir
0800 BEC BF C1 E1 FF path rd, a 0800 BE8 FF C1 E3 FF path rs, w
0801 BF0 FF C9 E8 7F path alu_sal, rd 0801 BEC BF C1 E1 FF path rd, a
0802 BF4 FF D3 EB FF path shift_flag, flag 0802 BF0 FF C9 E8 7F path alu_sal, rd
0803 BF8 FD FF FF FF inc pc 0803 BF4 FF D3 EB FF path shift_flag, flag
0804 BFC CB FF FF FF check irq 0804 BF8 FD FF FF FF inc pc
0805 C00 C3 FF FF FF reset upc 0805 BFC CB FF FF FF check irq
0806 0806 C00 C3 FF FF FF reset upc
0807 C04 FF FF FF FF dup 7, null 0807
0808 0808 C04 FF FF FF FF dup 7, null
0809 ;97. sar reg, reg 0809
0810 C20 FD FF FF FF inc pc 0810 ;97. sar reg, reg
0811 C24 FF 47 EF FF path [pc], ir 0811 C20 FD FF FF FF inc pc
0812 C28 FF C1 E3 FF path rs, w 0812 C24 FF 47 EF FF path [pc], ir
0813 C2C BF C1 E1 FF path rd, a 0813 C28 FF C1 E3 FF path rs, w
0814 C30 FF C9 E9 7F path alu_sar, rd 0814 C2C BF C1 E1 FF path rd, a
0815 C34 FF D3 EB FF path shift_flag, flag 0815 C30 FF C9 E9 7F path alu_sar, rd
0816 C38 FD FF FF FF inc pc 0816 C34 FF D3 EB FF path shift_flag, flag
0817 C3C CB FF FF FF check irq 0817 C38 FD FF FF FF inc pc
0818 C40 C3 FF FF FF reset upc 0818 C3C CB FF FF FF check irq
0819 0819 C40 C3 FF FF FF reset upc
0820 C44 FF FF FF FF dup 7, null 0820
0821 0821 C44 FF FF FF FF dup 7, null
0822 ;99. shl reg, reg 0822
0823 C60 FD FF FF FF inc pc 0823 ;99. shl reg, reg
0824 C64 FF 47 EF FF path [pc], ir 0824 C60 FD FF FF FF inc pc
0825 C68 FF C1 E3 FF path rs, w 0825 C64 FF 47 EF FF path [pc], ir
0826 C6C BF C1 E1 FF path rd, a 0826 C68 FF C1 E3 FF path rs, w
0827 C70 FF C9 E8 3F path alu_shl, rd 0827 C6C BF C1 E1 FF path rd, a
0828 C74 FF D3 EB FF path shift_flag, flag 0828 C70 FF C9 E8 3F path alu_shl, rd
0829 C78 FD FF FF FF inc pc 0829 C74 FF D3 EB FF path shift_flag, flag
0830 C7C CB FF FF FF check irq 0830 C78 FD FF FF FF inc pc
0831 C80 C3 FF FF FF reset upc 0831 C7C CB FF FF FF check irq
0832 0832 C80 C3 FF FF FF reset upc
0833 C84 FF FF FF FF dup 7, null 0833
0834 0834 C84 FF FF FF FF dup 7, null
0835 ;101. shr reg, reg 0835
0836 CA0 FD FF FF FF inc pc 0836 ;101. shr reg, reg
0837 CA4 FF 47 EF FF path [pc], ir 0837 CA0 FD FF FF FF inc pc
0838 CA8 FF C1 E3 FF path rs, w 0838 CA4 FF 47 EF FF path [pc], ir
0839 CAC BF C1 E1 FF path rd, a 0839 CA8 FF C1 E3 FF path rs, w
0840 CB0 FF C9 E9 3F path alu_shr, rd 0840 CAC BF C1 E1 FF path rd, a
0841 CB4 FF D3 EB FF path shift_flag, flag 0841 CB0 FF C9 E9 3F path alu_shr, rd
0842 CB8 FD FF FF FF inc pc 0842 CB4 FF D3 EB FF path shift_flag, flag
0843 CBC CB FF FF FF check irq 0843 CB8 FD FF FF FF inc pc
0844 CC0 C3 FF FF FF reset upc 0844 CBC CB FF FF FF check irq
0845 0845 CC0 C3 FF FF FF reset upc
0846 CC4 FF FF FF FF dup 7, null 0846
0847 0847 CC4 FF FF FF FF dup 7, null
0848 ;103. rol reg, reg 0848
0849 CE0 FD FF FF FF inc pc 0849 ;103. rol reg, reg
0850 CE4 FF 47 EF FF path [pc], ir 0850 CE0 FD FF FF FF inc pc
0851 CE8 FF C1 E3 FF path rs, w 0851 CE4 FF 47 EF FF path [pc], ir
0852 CEC BF C1 E1 FF path rd, a 0852 CE8 FF C1 E3 FF path rs, w
0853 CF0 FF C9 E8 BF path alu_rol, rd 0853 CEC BF C1 E1 FF path rd, a
0854 CF4 FF D3 EB FF path shift_flag, flag 0854 CF0 FF C9 E8 BF path alu_rol, rd
0855 CF8 FD FF FF FF inc pc 0855 CF4 FF D3 EB FF path shift_flag, flag
0856 CFC CB FF FF FF check irq 0856 CF8 FD FF FF FF inc pc
0857 D00 C3 FF FF FF reset upc 0857 CFC CB FF FF FF check irq
0858 0858 D00 C3 FF FF FF reset upc
0859 D04 FF FF FF FF dup 7, null 0859
0860 0860 D04 FF FF FF FF dup 7, null
0861 ;105. ror reg, reg 0861
0862 D20 FD FF FF FF inc pc 0862 ;105. ror reg, reg
0863 D24 FF 47 EF FF path [pc], ir 0863 D20 FD FF FF FF inc pc
0864 D28 FF C1 E3 FF path rs, w 0864 D24 FF 47 EF FF path [pc], ir
0865 D2C BF C1 E1 FF path rd, a 0865 D28 FF C1 E3 FF path rs, w
0866 D30 FF C9 E9 BF path alu_ror, rd 0866 D2C BF C1 E1 FF path rd, a
0867 D34 FF D3 EB FF path shift_flag, flag 0867 D30 FF C9 E9 BF path alu_ror, rd
0868 D38 FD FF FF FF inc pc 0868 D34 FF D3 EB FF path shift_flag, flag
0869 D3C CB FF FF FF check irq 0869 D38 FD FF FF FF inc pc
0870 D40 C3 FF FF FF reset upc 0870 D3C CB FF FF FF check irq
0871 0871 D40 C3 FF FF FF reset upc
0872 D44 FF FF FF FF dup 7, null 0872
0873 0873 D44 FF FF FF FF dup 7, null
0874 ;107. rcl reg, reg 0874
0875 D60 FD FF FF FF inc pc 0875 ;107. rcl reg, reg
0876 D64 FF 47 EF FF path [pc], ir 0876 D60 FD FF FF FF inc pc
0877 D68 FF C1 E3 FF path rs, w 0877 D64 FF 47 EF FF path [pc], ir
0878 D6C BF C1 E1 FF path rd, a 0878 D68 FF C1 E3 FF path rs, w
0879 D70 FF C9 E8 FF path alu_rcl, rd 0879 D6C BF C1 E1 FF path rd, a
0880 D74 FF D3 EB FF path shift_flag, flag 0880 D70 FF C9 E8 FF path alu_rcl, rd
0881 D78 FD FF FF FF inc pc 0881 D74 FF D3 EB FF path shift_flag, flag
0882 D7C CB FF FF FF check irq 0882 D78 FD FF FF FF inc pc
0883 D80 C3 FF FF FF reset upc 0883 D7C CB FF FF FF check irq
0884 0884 D80 C3 FF FF FF reset upc
0885 D84 FF FF FF FF dup 7, null 0885
0886 0886 D84 FF FF FF FF dup 7, null
0887 ;109. rcr reg, reg 0887
0888 DA0 FD FF FF FF inc pc 0888 ;109. rcr reg, reg
0889 DA4 FF 47 EF FF path [pc], ir 0889 DA0 FD FF FF FF inc pc
0890 DA8 FF C1 E3 FF path rs, w 0890 DA4 FF 47 EF FF path [pc], ir
0891 DAC BF C1 E1 FF path rd, a 0891 DA8 FF C1 E3 FF path rs, w
0892 DB0 FF C9 E9 FF path alu_rcr, rd 0892 DAC BF C1 E1 FF path rd, a
0893 DB4 FF D3 EB FF path shift_flag, flag 0893 DB0 FF C9 E9 FF path alu_rcr, rd
0894 DB8 FD FF FF FF inc pc 0894 DB4 FF D3 EB FF path shift_flag, flag
0895 DBC CB FF FF FF check irq 0895 DB8 FD FF FF FF inc pc
0896 DC0 C3 FF FF FF reset upc 0896 DBC CB FF FF FF check irq
0897 0897 DC0 C3 FF FF FF reset upc
0898 DC4 FF FF FF FF dup 7, null 0898
0899 0899 DC4 FF FF FF FF dup 7, null
0900 ;111. nop 0900
0901 DE0 FD FF FF FF inc pc 0901 ;111. nop
0902 DE4 C3 FF FF FF reset upc 0902 DE0 FD FF FF FF inc pc
0903 0903 DE4 C3 FF FF FF reset upc
0904 DE8 FF FF FF FF dup 6, null 0904
0905 0905 DE8 FF FF FF FF dup 6, null
0906 ;112. hlt 0906
0907 E00 C3 FF FF FF reset upc 0907 ;112. hlt
0908 E04 FF FF FF FF dup 7, null 0908 E00 C3 FF FF FF reset upc
0909 0909 E04 FF FF FF FF dup 7, null
0910 ;113. call symbol 0910
0911 ; 计算新的栈顶 0911 ;113. call symbol
0912 E20 BF C1 E1 FF path sp, a 0912 ; 计算新的栈顶
0913 E24 BF C1 E3 FF path sp, w 0913 E20 BF C1 E1 FF path sp, a
0914 E28 FF D1 E9 DF path alu_dec, sp 0914 E24 BF C1 E3 FF path sp, w
0915 E2C BF C1 E5 FF path sp, mar 0915 E28 FF D1 E9 DF path alu_dec, sp
0916 0916 E2C BF C1 E5 FF path sp, mar
0917 ; 读出标号指定的跳转地址并暂存到寄存器a中 0917
0918 E30 FD FF FF FF inc pc 0918 ; 读出标号指定的跳转地址并暂存到寄存器a中
0919 E34 FF 47 E1 FF path [pc], a 0919 E30 FD FF FF FF inc pc
0920 0920 E34 FF 47 E1 FF path [pc], a
0921 ; 将下一条指令地址(中断返回地址)入栈 0921
0922 E38 FD FF FF FF inc pc 0922 ; 将下一条指令地址(中断返回地址)入栈
0923 E3C FF 85 E7 FF path pc, [mar] 0923 E38 FD FF FF FF inc pc
0924 0924 E3C FF 85 E7 FF path pc, [mar]
0925 ; 将a中暂存的跳转地址置入pc,实现调用 0925
0926 E40 FF D0 FF FF path a, pc 0926 ; 将a中暂存的跳转地址置入pc,实现调用
0927 E44 CB FF FF FF check irq 0927 E40 FF D0 FF FF path a, pc
0928 E48 C3 FF FF FF reset upc 0928 E44 CB FF FF FF check irq
0929 0929 E48 C3 FF FF FF reset upc
0930 E4C FF FF FF FF dup 5, null 0930
0931 0931 E4C FF FF FF FF dup 5, null
0932 ;115. ret 0932
0933 E60 BF C1 E5 FF path sp, mar 0933 ;115. ret
0934 E64 FF 86 FF FF path [mar], pc 0934 E60 BF C1 E5 FF path sp, mar
0935 E68 BF C1 E1 FF path sp, a 0935 E64 FF 86 FF FF path [mar], pc
0936 E6C FF D1 E9 D0 path alu_inc, sp 0936 E68 BF C1 E1 FF path sp, a
0937 E70 C3 FF FF FF reset upc 0937 E6C FF D1 E9 D0 path alu_inc, sp
0938 0938 E70 C3 FF FF FF reset upc
0939 E74 FF FF FF FF dup 3, null 0939
0940 0940 E74 FF FF FF FF dup 3, null
0941 ;116. cli 0941
0942 E80 D3 FF FF FF cli 0942 ;116. cli
0943 E84 FD FF FF FF inc pc 0943 E80 D3 FF FF FF cli
0944 E88 C3 FF FF FF reset upc 0944 E84 FD FF FF FF inc pc
0945 0945 E88 C3 FF FF FF reset upc
0946 E8C FF FF FF FF dup 5, null 0946
0947 0947 E8C FF FF FF FF dup 5, null
0948 ;117. sti 0948
0949 EA0 D7 FF FF FF sti 0949 ;117. sti
0950 EA4 FD FF FF FF inc pc 0950 EA0 D7 FF FF FF sti
0951 EA8 C3 FF FF FF reset upc 0951 EA4 FD FF FF FF inc pc
0952 0952 EA8 C3 FF FF FF reset upc
0953 EAC FF FF FF FF dup 5, null 0953
0954 0954 EAC FF FF FF FF dup 5, null
0955 ;118. 硬中断处理微指令程序 0955
0956 ; 标志寄存器和断点地址入栈 0956 ;118. 硬中断处理微指令程序
0957 EC0 BF C1 E1 FF path sp, a 0957 ; 标志寄存器和断点地址入栈
0958 EC4 BF C1 E3 FF path sp, w 0958 EC0 BF C1 E1 FF path sp, a
0959 EC8 FF D1 E9 DF path alu_dec, sp 0959 EC4 BF C1 E3 FF path sp, w
0960 ECC BF C1 E5 FF path sp, mar 0960 EC8 FF D1 E9 DF path alu_dec, sp
0961 ED0 FF 83 E7 FF path flag, [mar] 0961 ECC BF C1 E5 FF path sp, mar
0962 ED4 BF C1 E1 FF path sp, a 0962 ED0 FF 83 E7 FF path flag, [mar]
0963 ED8 FF D1 E9 DF path alu_dec, sp 0963 ED4 BF C1 E1 FF path sp, a
0964 EDC BF C1 E5 FF path sp, mar 0964 ED8 FF D1 E9 DF path alu_dec, sp
0965 EE0 FF 85 E7 FF path pc, [mar] 0965 EDC BF C1 E5 FF path sp, mar
0966 ; IF标志置位,开中断,允许中断嵌套 0966 EE0 FF 85 E7 FF path pc, [mar]
0967 EE4 D7 FF FF FF sti 0967
0968 ; 获取中断号中断服务程序入口地址 0968 ; 获取中断号中断服务程序入口地址
0969 EE8 CF FF FF FF inta 0969 EE4 CF FF FF FF inta
0970 EEC FF FF FF FF dup 1, null ;插入空闲周期 0970 EE8 FF FF FF FF dup 1, null ;插入空闲周期
0971 EF0 CE C7 E5 FF path inta, mar ;读取中断号并送入地址寄存器中 0971 EEC CE C7 E5 FF path inta, mar ;读取中断号并送入地址寄存器中
0972 ; 转移到中断服务程序执行 0972 ; 转移到中断服务程序执行
0973 EF4 FF 86 FF FF path [mar], pc 0973 EF0 FF 86 FF FF path [mar], pc
0974 EF8 C3 FF FF FF reset upc 0974 EF4 C3 FF FF FF reset upc
0975 0975
0976 EFC FF FF FF FF dup 1, null 0976 EF8 FF FF FF FF dup 2, null
0977 0977
0978 ;120. inc reg 0978 ;120. inc reg
0979 F00 FD FF FF FF inc pc 0979 F00 FD FF FF FF inc pc
......
...@@ -14,7 +14,7 @@ path [pc], ir ...@@ -14,7 +14,7 @@ path [pc], ir
inc pc inc pc
path [pc], rd path [pc], rd
inc pc inc pc
check irq check irq ;查询硬中断
reset upc reset upc
dup 1, null dup 1, null
...@@ -542,9 +542,10 @@ path alu_sub, a ...@@ -542,9 +542,10 @@ path alu_sub, a
path al_flag, flag path al_flag, flag
inc pc inc pc
check irq check irq
hold DMA ;查询DMA请求
reset upc reset upc
dup 6, null dup 5, null
;73. cmp reg, reg ;73. cmp reg, reg
inc pc inc pc
...@@ -963,8 +964,7 @@ path sp, a ...@@ -963,8 +964,7 @@ path sp, a
path alu_dec, sp path alu_dec, sp
path sp, mar path sp, mar
path pc, [mar] path pc, [mar]
; IF标志置位,开中断,允许中断嵌套
sti
; 获取中断号中断服务程序入口地址 ; 获取中断号中断服务程序入口地址
inta inta
dup 1, null ;插入空闲周期 dup 1, null ;插入空闲周期
...@@ -973,7 +973,7 @@ path inta, mar ;读取中断号并送入地址寄存器中 ...@@ -973,7 +973,7 @@ path inta, mar ;读取中断号并送入地址寄存器中
path [mar], pc path [mar], pc
reset upc reset upc
dup 1, null dup 2, null
;120. inc reg ;120. inc reg
inc pc inc pc
......
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG߿GGGGGGGGGGGGGG?_GG߿GGGGG?G?GGGG߿G߿߿GG GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG߿GGGGGGGGGGGGGG?_GG߿GGGGG?G?GGGG߿G߿߿GG
\ No newline at end of file \ No newline at end of file
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论