Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
8
8086
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸大学计算机学院
教师群组
赵鹏翀-zpc
8086
提交
8322ec68
提交
8322ec68
10月 18, 2018
创建
作者:
宋海霞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改PC原理图的复位控制以及微指令
上级
f94c0ceb
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
449 行增加
和
366 行删除
+449
-366
PC.dlsche
PC.dlsche
+0
-0
PC.dlsche.svg
PC.dlsche.svg
+0
-0
microasm.c
microasm.c
+18
-17
microasm.exe
microasm.exe
+0
-0
rom.dbg
rom.dbg
+0
-0
rom.lst
rom.lst
+370
-329
rom.masm
rom.masm
+59
-18
rom.rxm
rom.rxm
+2
-2
没有找到文件。
PC.dlsche
浏览文件 @
8322ec68
没有这种文件类型的预览
PC.dlsche.svg
浏览文件 @
8322ec68
这个 源代码变更 因为 太大 而不能显示。 你可以
浏览blob
。
microasm.c
浏览文件 @
8322ec68
...
...
@@ -96,15 +96,15 @@ const char* shift_flag_keyword = "shift_flag";
// 访问主存或外设的操作数
const
char
*
pc_main_memory_keyword
=
"[pc]"
;
const
char
*
jz
pc_main_memory_keyword
=
"jz[pc
]"
;
const
char
*
jnz
pc_main_memory_keyword
=
"jnz[pc
]"
;
const
char
*
jc
pc_main_memory_keyword
=
"jc[pc
]"
;
const
char
*
ja
pc_main_memory_keyword
=
"ja[pc
]"
;
const
char
*
jb
pc_main_memory_keyword
=
"jb[pc
]"
;
const
char
*
jg
pc_main_memory_keyword
=
"jg[pc
]"
;
const
char
*
jl
pc_main_memory_keyword
=
"jl[pc
]"
;
const
char
*
jmp
pc_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
,{
&
jz
pc_main_memory_keyword
,
&
pc_register_keyword
,
0xff1f46fd
}
// path jz[pc
], pc
,{
&
jnz
pc_main_memory_keyword
,
&
pc_register_keyword
,
0xff3f46fd
}
// path jnz[pc
], pc
,{
&
jc
pc_main_memory_keyword
,
&
pc_register_keyword
,
0xff5f46fd
}
// path jc[pc
], pc
,{
&
ja
pc_main_memory_keyword
,
&
pc_register_keyword
,
0xff7f46fd
}
// path ja[pc
], pc
,{
&
jb
pc_main_memory_keyword
,
&
pc_register_keyword
,
0xff9f46fd
}
// path jb[pc
], pc
,{
&
jg
pc_main_memory_keyword
,
&
pc_register_keyword
,
0xffbf46fd
}
// path jg[pc
], pc
,{
&
jl
pc_main_memory_keyword
,
&
pc_register_keyword
,
0xffdf46fd
}
// path jl[pc
], pc
,{
&
jmp
pc_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
...
...
microasm.exe
浏览文件 @
8322ec68
没有这种文件类型的预览
rom.dbg
浏览文件 @
8322ec68
没有这种文件类型的预览
rom.lst
浏览文件 @
8322ec68
...
...
@@ -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 A0
4 FD FF FF FF inc pc
0618 A0
8 FD 46 7F FF path ja[pc],
pc
0619 A0
C C3 FF FF FF reset upc
0615 ;
=====================================================================
0616
;80. ja symbol
0617 A0
0 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
A10 FF FF FF FF dup 4, null
0622
0623
;81. jb symbol
0624 A
20 CB FF FF FF check irq
0625
A24 FD FF FF FF inc pc
0626 A
28 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, nul
l
0630
0631
;82. jg symbol
0632 A
40 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 A
50 FF FF FF FF dup 4, null
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 A
14 FF FF FF FF dup 3, null
0627
0628
;=====================================================================
0629
;81. jb symbo
l
0630
A20 CB FF FF FF check irq
0631
A24 FD FF FF FF inc pc
0632 A
28 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 upc
0638
0639
;83. jl symbo
l
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 A
6C C3 FF FF FF reset upc
0644
0645 A
70 FF FF FF FF dup 4, null
0639
A34 FF FF FF FF dup 3, nul
l
0640
0641
;=====================================================================
0642
;82. jg symbol
0643 A
40 CB FF FF FF check irq
0644
A44 FD FF FF FF inc pc
0645 A
48 FF C5 E5 FF path pc, mar
0646
0647 ;
84. je symbol
0648
A80 CB FF FF FF check irq
0649 A
84 FD FF FF FF inc
pc
0650 A
88 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 ;8
5. jne
symbol
0656 A
A
0 CB FF FF FF check irq
0657 A
A
4 FD FF FF FF inc pc
0658 A
A8 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 A
C4 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 A
D0 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 A
EC C3 FF FF FF reset u
pc
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 u
pc
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 A
4C 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 ;8
3. jl
symbol
0656 A
6
0 CB FF FF FF check irq
0657 A
6
4 FD FF FF FF inc pc
0658 A
68 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 A
74 FF FF FF FF dup 3, null
0666
0667
;=====================================================================
0668
;84. je symbol
0669 A
80 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 A
8C 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 B
7C FF 86 FF FF path [mar], pc
0723
0724
; 将a中的返回地址入栈
0725 B
80 BF C1 E5 FF path sp, mar
0726 B
84 FF 91 E7 FF path a, [mar]
0727 B
88 C3 FF FF FF reset u
pc
0728
0729 B
8C 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 B
08 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 B
14 FD FF FF FF inc pc
0726 B
18 FF C5 E5 FF path pc, mar
0727 B
1C FD 86 FF FF path jmp[mar],
pc
0728
B20 CB FF FF FF check irq
0729 B
24 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 B
B4 BF C1 E5 FF path sp, mar
0743 B
B8 FF 86 FF FF path [mar], pc
0744
0745
; 计算新的栈顶
0746 B
BC BF C1 E1 FF path sp, a
0747
BC0 FF D1 E1 D0 path alu_inc, a
0748 B
C4 FF D1 E9 D0 path alu_inc, sp
0749
BC8 C3 FF FF FF reset upc
0750
0751 B
CC 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 B
48 BF C1 E1 FF path sp, a
0743 B
4C 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 B
58 FF 83 E7 FF path flag, [mar]
0747
; 关中断
0748 B
5C D3 FF FF FF cli
0749
0750
; 更新栈顶
0751 B
60 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 B
E0
FD FF FF FF inc pc
0757 B
E4 FF 47 EF FF path [pc], i
r
0758
BE8 FF C1 E3 FF path rs, w
0759 B
EC BF C1 E1 FF path rd,
a
0760 B
F0 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 B
FC 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], i
r
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 B
6C
FD FF FF FF inc pc
0757 B
70 FF 47 E5 FF path [pc], ma
r
0758
0759 B
74 FD FF FF FF inc pc ;下一条指令地址(中断返回地址)暂存到
a
0760 B
78 FF C5 E1 FF path pc, a
0761
0762
; 将中断服务程序入口地址置入pc,准备执行服务程序
0763 B
7C 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, ma
r
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 u
pc
0804
0805 C
C4 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 C
00 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 C
E8 FF C1 E3 FF path rs, w
0811 C
EC BF C1 E1 FF path rd, a
0812 C
F0 FF C9 E8 BF path alu_rol, rd
0813 C
F4 FF D3 EB FF path shift_flag, flag
0814 C
F8 FD FF FF FF inc pc
0815 C
FC CB FF FF FF check irq
0816
D00 C3 FF FF FF reset u
pc
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 C
20 FD FF FF FF inc pc
0811 C
24 FF 47 EF FF path [pc], ir
0812 C
28 FF C1 E3 FF path rs, w
0813 C
2C BF C1 E1 FF path rd, a
0814 C
30 FF C9 E9 7F path alu_sar, rd
0815 C
34 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 u
pc
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 u
pc
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 u
pc
0856
0857 D
C4 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 D
00 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 D
E8 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
E3
8 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
E7
0 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 D
24 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
D7
8 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
DC
0 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
rom.masm
浏览文件 @
8322ec68
...
...
@@ -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
;====================================================================================================
...
...
rom.rxm
浏览文件 @
8322ec68
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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论