Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
8
8086
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸大学计算机学院
教师群组
赵鹏翀-zpc
8086
提交
773e5b3c
提交
773e5b3c
12月 04, 2018
创建
作者:
李川
提交者:
李川
12月 04, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改8086芯片
上级
8322ec68
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
455 行增加
和
442 行删除
+455
-442
8086.dlsche
8086.dlsche
+0
-0
8086.dlsche.svg
8086.dlsche.svg
+0
-0
CU.dlsche
CU.dlsche
+0
-0
CU.dlsche.svg
CU.dlsche.svg
+0
-0
README.md
README.md
+4
-2
microasm.c
microasm.c
+12
-1
microasm.exe
microasm.exe
+0
-0
rom.dbg
rom.dbg
+0
-0
rom.lst
rom.lst
+431
-431
rom.masm
rom.masm
+6
-6
rom.rxm
rom.rxm
+2
-2
没有找到文件。
8086.dlsche
浏览文件 @
773e5b3c
没有这种文件类型的预览
8086.dlsche.svg
浏览文件 @
773e5b3c
这个 源代码变更 因为 太大 而不能显示。 你可以
浏览blob
。
CU.dlsche
浏览文件 @
773e5b3c
没有这种文件类型的预览
CU.dlsche.svg
浏览文件 @
773e5b3c
这个 源代码变更 因为 太大 而不能显示。 你可以
浏览blob
。
README.md
浏览文件 @
773e5b3c
# 说明
Intel 8086 处理器
# Datasheet
[
8086.pdf
](
8086.pdf
)
# 原理图

\ No newline at end of file

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