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

layout net

上级 6f4cccaf
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
...@@ -194,8 +194,8 @@ struct PATH_INSTRUCTION_OPERAND_ENTRY path_operand_table[] = ...@@ -194,8 +194,8 @@ struct PATH_INSTRUCTION_OPERAND_ENTRY path_operand_table[] =
,{ &csp_counter_keyword, &mar_register_keyword, 0xfff8f7ef } // path csp, mar ,{ &csp_counter_keyword, &mar_register_keyword, 0xfff8f7ef } // path csp, mar
,{ &csp_counter_keyword, &sp_register_keyword, 0xfff8feef } // path csp, sp ,{ &csp_counter_keyword, &sp_register_keyword, 0xfff8feef } // path csp, sp
,{ &sp_inc_keyword, &csp_counter_keyword, 0xffffffe7 } // path sp_add, csp ,{ &sp_inc_keyword, &csp_counter_keyword, 0xffffffe7 } // path sp_inc, csp
,{ &sp_dec_keyword, &csp_counter_keyword, 0xffffffef } // path sp_minus, csp ,{ &sp_dec_keyword, &csp_counter_keyword, 0xffffffef } // path sp_dec, csp
,{ &pc_register_keyword, &mar_main_memory_keyword, 0xfff3fbed } // path pc, [mar] 将pc值写入mar指向的内存 ,{ &pc_register_keyword, &mar_main_memory_keyword, 0xfff3fbed } // path pc, [mar] 将pc值写入mar指向的内存
,{ &asr_register_keyword, &pc_register_keyword, 0xfff7efef } // path asr, pc ,{ &asr_register_keyword, &pc_register_keyword, 0xfff7efef } // path asr, pc
......
; 示例程序 ; 示例程序
.text .text
mov sp, 0xf8 ;初始化堆栈指针寄存器 mov sp, 0xf8 ;初始化栈指针寄存器
;======================================================= ;=======================================================
;安装中断向量,安装中断的过程是将各个中断服务程序的入口地址(首地址)保存到对应中断向量指向的存储单元中。 ;安装中断向量,安装中断的过程是将各个中断服务程序的入口地址(首地址)保存到对应中断向量指向的存储单元中。
;中断向量本身是一个地址,它指向一个存储单元,该存储单元保存的就是某个中断服务程序的入口地址(起始地址) ;中断向量本身是一个地址,它指向一个存储单元,该存储单元保存的就是某个中断服务程序的入口地址(起始地址)
;设中断向量列表的首地址为0xf8,即第一个中断向量是存储单元0xf8 ;设中断向量列表的首地址为0xf8,即第一个中断向量是存储单元0xf8
;安装0号中断向量0xf8,0xf8中保存0号中断服务程序的入口地址 ;安装0号中断向量0xf8,0xf8中保存0号中断服务程序的入口地址
lea a, int_0 lea a, int_0
mov r0, 0xf8 mov r0, 0xf8
mov [r0], a mov [r0], a
;安装3号中断向量0xfb,0xfb中保存3号中断服务程序的入口地址 ;安装3号中断向量0xfb,0xfb中保存3号中断服务程序的入口地址
lea a, int_3 lea a, int_3
mov r0, 0xfb mov r0, 0xfb
mov [r0], a mov [r0], a
;安装5号中断向量0xfd,0xfd中保存5号中断服务程序的入口地址 ;安装5号中断向量0xfd,0xfd中保存5号中断服务程序的入口地址
lea a, int_5 lea a, int_5
mov r0, 0xfd mov r0, 0xfd
mov [r0], a mov [r0], a
;======================================================= ;=======================================================
;主程序代码 ;主程序代码
mov a, -1 mov a, -1
LOOPC: LOOPC:
mov r0, 1 mov r0, 1
add a, r0 add a, r0
jmp LOOPC jmp LOOPC
;======================================================= ;=======================================================
;中断服务程序 ;中断服务程序
;0号中断的服务程序 ;0号中断的服务程序
int_0: int_0:
mov a, 0x10 mov a, 0x10
adc a, -1 adc a, -1
iret iret
;3号中断的服务程序 ;3号中断的服务程序
int_3: int_3:
mov a, 0x13 mov a, 0x13
or a, [r0] or a, [r0]
sbb a, -1 sbb a, -1
iret iret
;5号中断的服务程序 ;5号中断的服务程序
int_5: int_5:
mov r2, 3 mov r2, 3
mov a, 1 mov a, 1
and a, r2 and a, r2
iret iret
0001 ; 示例程序 0001 ; 示例程序
0002 0002
0003 .text 0003 .text
0004 0004
0005 00 9C F8 mov sp, 0xf8 ;初始化堆栈指针寄存器 0005 00 9C F8 mov sp, 0xf8 ;初始化栈指针寄存器
0006 0006
0007 ;======================================================= 0007 ;=======================================================
0008 ;安装中断向量,安装中断的过程是将各个中断服务程序的入口地址(首地址)保存到对应中断向量指向的存储单元中。 0008 ;安装中断向量,安装中断的过程是将各个中断服务程序的入口地址(首地址)保存到对应中断向量指向的存储单元中。
0009 ;中断向量本身是一个地址,它指向一个存储单元,该存储单元保存的就是某个中断服务程序的入口地址(起始地址) 0009 ;中断向量本身是一个地址,它指向一个存储单元,该存储单元保存的就是某个中断服务程序的入口地址(起始地址)
0010 ;设中断向量列表的首地址为0xf8,即第一个中断向量是存储单元0xf8 0010 ;设中断向量列表的首地址为0xf8,即第一个中断向量是存储单元0xf8
0011 0011
0012 ;安装0号中断向量0xf8,0xf8中保存0号中断服务程序的入口地址 0012 ;安装0号中断向量0xf8,0xf8中保存0号中断服务程序的入口地址
0013 02 98 18 lea a, int_0 0013 02 98 18 lea a, int_0
0014 04 8C F8 mov r0, 0xf8 0014 04 8C F8 mov r0, 0xf8
0015 06 84 mov [r0], a 0015 06 84 mov [r0], a
0016 0016
0017 0017
0018 ;安装3号中断向量0xfb,0xfb中保存3号中断服务程序的入口地址 0018 ;安装3号中断向量0xfb,0xfb中保存3号中断服务程序的入口地址
0019 07 98 1D lea a, int_3 0019 07 98 1D lea a, int_3
0020 09 8C FB mov r0, 0xfb 0020 09 8C FB mov r0, 0xfb
0021 0B 84 mov [r0], a 0021 0B 84 mov [r0], a
0022 0022
0023 0023
0024 ;安装5号中断向量0xfd,0xfd中保存5号中断服务程序的入口地址 0024 ;安装5号中断向量0xfd,0xfd中保存5号中断服务程序的入口地址
0025 0C 98 23 lea a, int_5 0025 0C 98 23 lea a, int_5
0026 0E 8C FD mov r0, 0xfd 0026 0E 8C FD mov r0, 0xfd
0027 10 84 mov [r0], a 0027 10 84 mov [r0], a
0028 0028
0029 0029
0030 ;======================================================= 0030 ;=======================================================
0031 ;主程序代码 0031 ;主程序代码
0032 0032
0033 11 7C FF mov a, -1 0033 11 7C FF mov a, -1
0034 0034
0035 LOOPC: 0035 LOOPC:
0036 13 8C 01 mov r0, 1 0036 13 8C 01 mov r0, 1
0037 15 10 add a, r0 0037 15 10 add a, r0
0038 0038
0039 16 AC 13 jmp LOOPC 0039 16 AC 13 jmp LOOPC
0040 0040
0041 0041
0042 ;======================================================= 0042 ;=======================================================
0043 ;中断服务程序 0043 ;中断服务程序
0044 ;0号中断的服务程序 0044 ;0号中断的服务程序
0045 int_0: 0045 int_0:
0046 18 7C 10 mov a, 0x10 0046 18 7C 10 mov a, 0x10
0047 1A 2C FF adc a, -1 0047 1A 2C FF adc a, -1
0048 1C F8 iret 0048 1C F8 iret
0049 0049
0050 0050
0051 ;3号中断的服务程序 0051 ;3号中断的服务程序
0052 int_3: 0052 int_3:
0053 1D 7C 13 mov a, 0x13 0053 1D 7C 13 mov a, 0x13
0054 1F 64 or a, [r0] 0054 1F 64 or a, [r0]
0055 20 4C FF sbb a, -1 0055 20 4C FF sbb a, -1
0056 22 F8 iret 0056 22 F8 iret
0057 0057
0058 0058
0059 ;5号中断的服务程序 0059 ;5号中断的服务程序
0060 int_5: 0060 int_5:
0061 23 8E 03 mov r2, 3 0061 23 8E 03 mov r2, 3
0062 25 7C 01 mov a, 1 0062 25 7C 01 mov a, 1
0063 27 52 and a, r2 0063 27 52 and a, r2
0064 28 F8 iret 0064 28 F8 iret
0065 0065
没有这种文件类型的预览
0001 ; (C) 2008-2018 北京英真时代科技有限公司。保留所有权利。 0001 ; (C) 2008-2018 北京英真时代科技有限公司。保留所有权利。
0002 0002
0003 ; 所有指令的第一条微指令地址必须是8的倍数 0003 ; 所有指令的第一条微指令地址必须是8的倍数
0004 ; 取指微指令,所有指令的第一步均为取指操作,都要执行该条微指令 0004 ; 取指微指令,所有指令的第一步均为取指操作,都要执行该条微指令
0005 00 EF 3F F9 FF path [pc], ir 0005 00 EF 3F F9 FF path [pc], ir
0006 0006
0007 ; 填充空白指令 01-1f 0007 ; 填充空白指令 01-1f
0008 04 FF FF FF FF dup 31, null 0008 04 FF FF FF FF dup 31, null
0009 0009
0010 ; add a, rx 0010 ; add a, rx
0011 80 EF FF FA 7F path rx, w 0011 80 EF FF FA 7F path rx, w
0012 84 EF FF E4 99 path alu_add, a 0012 84 EF FF E4 99 path alu_add, a
0013 88 FF FF FF FF inc pc 0013 88 FF FF FF FF inc pc
0014 0014
0015 ;查询硬中断请求,将低3位中断号与高5位中断向量基地址组合,得到8位中断向量(8位地址) 0015 ;查询硬中断请求,将低3位中断号与高5位中断向量基地址组合,得到8位中断向量(8位地址)
0016 ;该中断向量指向一个存储单元,该存储单元保存的就是中断服务程序的入口地址 0016 ;该中断向量指向一个存储单元,该存储单元保存的就是中断服务程序的入口地址
0017 ;若允许中断且有中断请求,则微程序跳转到硬中断处理处执行 0017 ;若允许中断且有中断请求,则微程序跳转到硬中断处理处执行
0018 8C AF FF FF FF ask_for_int 0018 8C AF FF FF FF ask_for_int
0019 90 CF FF FF FF reset upc 0019 90 CF FF FF FF reset upc
0020 0020
0021 94 FF FF FF FF dup 3, null 0021 94 FF FF FF FF dup 3, null
0022 0022
0023 ; add a, [rx] 0023 ; add a, [rx]
0024 A0 EF F7 FA FF path rx, mar 0024 A0 EF F7 FA FF path rx, mar
0025 A4 EF FB F9 7F path [mar], w 0025 A4 EF FB F9 7F path [mar], w
0026 A8 EF FF E4 99 path alu_add, a 0026 A8 EF FF E4 99 path alu_add, a
0027 AC FF FF FF FF inc pc 0027 AC FF FF FF FF inc pc
0028 B0 AF FF FF FF ask_for_int 0028 B0 AF FF FF FF ask_for_int
0029 B4 CF FF FF FF reset upc 0029 B4 CF FF FF FF reset upc
0030 0030
0031 B8 FF FF FF FF dup 2, null 0031 B8 FF FF FF FF dup 2, null
0032 0032
0033 ; add a, symbol 0033 ; add a, symbol
0034 C0 FF FF FF FF inc pc 0034 C0 FF FF FF FF inc pc
0035 C4 EF 77 F9 FF path [pc], mar 0035 C4 EF 77 F9 FF path [pc], mar
0036 C8 EF FB F9 7F path [mar], w 0036 C8 EF FB F9 7F path [mar], w
0037 CC EF FF E4 99 path alu_add, a 0037 CC EF FF E4 99 path alu_add, a
0038 D0 FF FF FF FF inc pc 0038 D0 FF FF FF FF inc pc
0039 D4 AF FF FF FF ask_for_int 0039 D4 AF FF FF FF ask_for_int
0040 D8 CF FF FF FF reset upc 0040 D8 CF FF FF FF reset upc
0041 0041
0042 DC FF FF FF FF dup 1, null 0042 DC FF FF FF FF dup 1, null
0043 0043
0044 ; add a, immediate 0044 ; add a, immediate
0045 E0 FF FF FF FF inc pc 0045 E0 FF FF FF FF inc pc
0046 E4 EF 7F F9 7F path [pc], w 0046 E4 EF 7F F9 7F path [pc], w
0047 E8 EF FF E4 99 path alu_add, a 0047 E8 EF FF E4 99 path alu_add, a
0048 EC FF FF FF FF inc pc 0048 EC FF FF FF FF inc pc
0049 F0 AF FF FF FF ask_for_int ;查询硬中断请求,若有请求,则转去执行硬中断预处理微程序 0049 F0 AF FF FF FF ask_for_int ;查询硬中断请求,若有请求,则转去执行硬中断预处理微程序
0050 F4 CF FF FF FF reset upc 0050 F4 CF FF FF FF reset upc
0051 0051
0052 F8 FF FF FF FF dup 2, null 0052 F8 FF FF FF FF dup 2, null
0053 0053
0054 ; adc a, rx 0054 ; adc a, rx
0055 100 EF FF FA 7F path rx, w 0055 100 EF FF FA 7F path rx, w
0056 104 EF FF E4 89 path alu_adc, a 0056 104 EF FF E4 89 path alu_adc, a
0057 108 FF FF FF FF inc pc 0057 108 FF FF FF FF inc pc
0058 10C AF FF FF FF ask_for_int 0058 10C AF FF FF FF ask_for_int
0059 110 CF FF FF FF reset upc 0059 110 CF FF FF FF reset upc
0060 0060
0061 114 FF FF FF FF dup 3, null 0061 114 FF FF FF FF dup 3, null
0062 0062
0063 ; adc a, [rx] 0063 ; adc a, [rx]
0064 120 EF F7 FA FF path rx, mar 0064 120 EF F7 FA FF path rx, mar
0065 124 EF FB F9 7F path [mar], w 0065 124 EF FB F9 7F path [mar], w
0066 128 EF FF E4 89 path alu_adc, a 0066 128 EF FF E4 89 path alu_adc, a
0067 12C FF FF FF FF inc pc 0067 12C FF FF FF FF inc pc
0068 130 AF FF FF FF ask_for_int 0068 130 AF FF FF FF ask_for_int
0069 134 CF FF FF FF reset upc 0069 134 CF FF FF FF reset upc
0070 0070
0071 138 FF FF FF FF dup 2, null 0071 138 FF FF FF FF dup 2, null
0072 0072
0073 ; adc a, symbol 0073 ; adc a, symbol
0074 140 FF FF FF FF inc pc 0074 140 FF FF FF FF inc pc
0075 144 EF 77 F9 FF path [pc], mar 0075 144 EF 77 F9 FF path [pc], mar
0076 148 EF FB F9 7F path [mar], w 0076 148 EF FB F9 7F path [mar], w
0077 14C EF FF E4 89 path alu_adc, a 0077 14C EF FF E4 89 path alu_adc, a
0078 150 FF FF FF FF inc pc 0078 150 FF FF FF FF inc pc
0079 154 AF FF FF FF ask_for_int 0079 154 AF FF FF FF ask_for_int
0080 158 CF FF FF FF reset upc 0080 158 CF FF FF FF reset upc
0081 0081
0082 15C FF FF FF FF dup 1, null 0082 15C FF FF FF FF dup 1, null
0083 0083
0084 ; adc a, immediate 0084 ; adc a, immediate
0085 160 FF FF FF FF inc pc 0085 160 FF FF FF FF inc pc
0086 164 EF 7F F9 7F path [pc], w 0086 164 EF 7F F9 7F path [pc], w
0087 168 EF FF E4 89 path alu_adc, a 0087 168 EF FF E4 89 path alu_adc, a
0088 16C FF FF FF FF inc pc 0088 16C FF FF FF FF inc pc
0089 170 AF FF FF FF ask_for_int 0089 170 AF FF FF FF ask_for_int
0090 174 CF FF FF FF reset upc 0090 174 CF FF FF FF reset upc
0091 0091
0092 178 FF FF FF FF dup 2, null 0092 178 FF FF FF FF dup 2, null
0093 0093
0094 ; sub a, rx 0094 ; sub a, rx
0095 180 EF FF FA 7F path rx, w 0095 180 EF FF FA 7F path rx, w
0096 184 EF FF E4 86 path alu_sub, a 0096 184 EF FF E4 86 path alu_sub, a
0097 188 FF FF FF FF inc pc 0097 188 FF FF FF FF inc pc
0098 18C AF FF FF FF ask_for_int 0098 18C AF FF FF FF ask_for_int
0099 190 CF FF FF FF reset upc 0099 190 CF FF FF FF reset upc
0100 0100
0101 194 FF FF FF FF dup 3, null 0101 194 FF FF FF FF dup 3, null
0102 0102
0103 ; sub a, [rx] 0103 ; sub a, [rx]
0104 1A0 EF F7 FA FF path rx, mar 0104 1A0 EF F7 FA FF path rx, mar
0105 1A4 EF FB F9 7F path [mar], w 0105 1A4 EF FB F9 7F path [mar], w
0106 1A8 EF FF E4 86 path alu_sub, a 0106 1A8 EF FF E4 86 path alu_sub, a
0107 1AC FF FF FF FF inc pc 0107 1AC FF FF FF FF inc pc
0108 1B0 AF FF FF FF ask_for_int 0108 1B0 AF FF FF FF ask_for_int
0109 1B4 CF FF FF FF reset upc 0109 1B4 CF FF FF FF reset upc
0110 0110
0111 1B8 FF FF FF FF dup 2, null 0111 1B8 FF FF FF FF dup 2, null
0112 0112
0113 ; sub a, symbol 0113 ; sub a, symbol
0114 1C0 FF FF FF FF inc pc 0114 1C0 FF FF FF FF inc pc
0115 1C4 EF 77 F9 FF path [pc], mar 0115 1C4 EF 77 F9 FF path [pc], mar
0116 1C8 EF FB F9 7F path [mar], w 0116 1C8 EF FB F9 7F path [mar], w
0117 1CC EF FF E4 86 path alu_sub, a 0117 1CC EF FF E4 86 path alu_sub, a
0118 1D0 FF FF FF FF inc pc 0118 1D0 FF FF FF FF inc pc
0119 1D4 AF FF FF FF ask_for_int 0119 1D4 AF FF FF FF ask_for_int
0120 1D8 CF FF FF FF reset upc 0120 1D8 CF FF FF FF reset upc
0121 0121
0122 1DC FF FF FF FF dup 1, null 0122 1DC FF FF FF FF dup 1, null
0123 0123
0124 ; sub a, immediate 0124 ; sub a, immediate
0125 1E0 FF FF FF FF inc pc 0125 1E0 FF FF FF FF inc pc
0126 1E4 EF 7F F9 7F path [pc], w 0126 1E4 EF 7F F9 7F path [pc], w
0127 1E8 EF FF E4 86 path alu_sub, a 0127 1E8 EF FF E4 86 path alu_sub, a
0128 1EC FF FF FF FF inc pc 0128 1EC FF FF FF FF inc pc
0129 1F0 AF FF FF FF ask_for_int 0129 1F0 AF FF FF FF ask_for_int
0130 1F4 CF FF FF FF reset upc 0130 1F4 CF FF FF FF reset upc
0131 0131
0132 1F8 FF FF FF FF dup 2, null 0132 1F8 FF FF FF FF dup 2, null
0133 0133
0134 ; sbb a, rx 0134 ; sbb a, rx
0135 200 EF FF FA 7F path rx, w 0135 200 EF FF FA 7F path rx, w
0136 204 EF FF E4 96 path alu_sbb, a 0136 204 EF FF E4 96 path alu_sbb, a
0137 208 FF FF FF FF inc pc 0137 208 FF FF FF FF inc pc
0138 20C AF FF FF FF ask_for_int 0138 20C AF FF FF FF ask_for_int
0139 210 CF FF FF FF reset upc 0139 210 CF FF FF FF reset upc
0140 0140
0141 214 FF FF FF FF dup 3, null 0141 214 FF FF FF FF dup 3, null
0142 0142
0143 ; sbb a, [rx] 0143 ; sbb a, [rx]
0144 220 EF F7 FA FF path rx, mar 0144 220 EF F7 FA FF path rx, mar
0145 224 EF FB F9 7F path [mar], w 0145 224 EF FB F9 7F path [mar], w
0146 228 EF FF E4 96 path alu_sbb, a 0146 228 EF FF E4 96 path alu_sbb, a
0147 22C FF FF FF FF inc pc 0147 22C FF FF FF FF inc pc
0148 230 AF FF FF FF ask_for_int 0148 230 AF FF FF FF ask_for_int
0149 234 CF FF FF FF reset upc 0149 234 CF FF FF FF reset upc
0150 0150
0151 238 FF FF FF FF dup 2, null 0151 238 FF FF FF FF dup 2, null
0152 0152
0153 ; sbb a, symbol 0153 ; sbb a, symbol
0154 240 FF FF FF FF inc pc 0154 240 FF FF FF FF inc pc
0155 244 EF 77 F9 FF path [pc], mar 0155 244 EF 77 F9 FF path [pc], mar
0156 248 EF FB F9 7F path [mar], w 0156 248 EF FB F9 7F path [mar], w
0157 24C EF FF E4 96 path alu_sbb, a 0157 24C EF FF E4 96 path alu_sbb, a
0158 250 FF FF FF FF inc pc 0158 250 FF FF FF FF inc pc
0159 254 AF FF FF FF ask_for_int 0159 254 AF FF FF FF ask_for_int
0160 258 CF FF FF FF reset upc 0160 258 CF FF FF FF reset upc
0161 0161
0162 25C FF FF FF FF dup 1, null 0162 25C FF FF FF FF dup 1, null
0163 0163
0164 ; sbb a, immediate 0164 ; sbb a, immediate
0165 260 FF FF FF FF inc pc 0165 260 FF FF FF FF inc pc
0166 264 EF 7F F9 7F path [pc], w 0166 264 EF 7F F9 7F path [pc], w
0167 268 EF FF E4 96 path alu_sbb, a 0167 268 EF FF E4 96 path alu_sbb, a
0168 26C FF FF FF FF inc pc 0168 26C FF FF FF FF inc pc
0169 270 AF FF FF FF ask_for_int 0169 270 AF FF FF FF ask_for_int
0170 274 CF FF FF FF reset upc 0170 274 CF FF FF FF reset upc
0171 0171
0172 278 FF FF FF FF dup 2, null 0172 278 FF FF FF FF dup 2, null
0173 0173
0174 ; and a, rx 0174 ; and a, rx
0175 280 EF FF FA 7F path rx, w 0175 280 EF FF FA 7F path rx, w
0176 284 EF FF E4 BB path alu_and a 0176 284 EF FF E4 BB path alu_and a
0177 288 FF FF FF FF inc pc 0177 288 FF FF FF FF inc pc
0178 28C AF FF FF FF ask_for_int 0178 28C AF FF FF FF ask_for_int
0179 290 CF FF FF FF reset upc 0179 290 CF FF FF FF reset upc
0180 0180
0181 294 FF FF FF FF dup 3, null 0181 294 FF FF FF FF dup 3, null
0182 0182
0183 ; and a, [rx] 0183 ; and a, [rx]
0184 2A0 EF F7 FA FF path rx, mar 0184 2A0 EF F7 FA FF path rx, mar
0185 2A4 EF FB F9 7F path [mar], w 0185 2A4 EF FB F9 7F path [mar], w
0186 2A8 EF FF E4 BB path alu_and, a 0186 2A8 EF FF E4 BB path alu_and, a
0187 2AC FF FF FF FF inc pc 0187 2AC FF FF FF FF inc pc
0188 2B0 AF FF FF FF ask_for_int 0188 2B0 AF FF FF FF ask_for_int
0189 2B4 CF FF FF FF reset upc 0189 2B4 CF FF FF FF reset upc
0190 0190
0191 2B8 FF FF FF FF dup 2, null 0191 2B8 FF FF FF FF dup 2, null
0192 0192
0193 ; and a, symbol 0193 ; and a, symbol
0194 2C0 FF FF FF FF inc pc 0194 2C0 FF FF FF FF inc pc
0195 2C4 EF 77 F9 FF path [pc], mar 0195 2C4 EF 77 F9 FF path [pc], mar
0196 2C8 EF FB F9 7F path [mar], w 0196 2C8 EF FB F9 7F path [mar], w
0197 2CC EF FF E4 BB path alu_and, a 0197 2CC EF FF E4 BB path alu_and, a
0198 2D0 FF FF FF FF inc pc 0198 2D0 FF FF FF FF inc pc
0199 2D4 AF FF FF FF ask_for_int 0199 2D4 AF FF FF FF ask_for_int
0200 2D8 CF FF FF FF reset upc 0200 2D8 CF FF FF FF reset upc
0201 0201
0202 2DC FF FF FF FF dup 1, null 0202 2DC FF FF FF FF dup 1, null
0203 0203
0204 ; and a, immediate 0204 ; and a, immediate
0205 2E0 FF FF FF FF inc pc 0205 2E0 FF FF FF FF inc pc
0206 2E4 EF 7F F9 7F path [pc], w 0206 2E4 EF 7F F9 7F path [pc], w
0207 2E8 EF FF E4 BB path alu_and, a 0207 2E8 EF FF E4 BB path alu_and, a
0208 2EC FF FF FF FF inc pc 0208 2EC FF FF FF FF inc pc
0209 2F0 AF FF FF FF ask_for_int 0209 2F0 AF FF FF FF ask_for_int
0210 2F4 CF FF FF FF reset upc 0210 2F4 CF FF FF FF reset upc
0211 0211
0212 2F8 FF FF FF FF dup 2, null 0212 2F8 FF FF FF FF dup 2, null
0213 0213
0214 ; or a, rx 0214 ; or a, rx
0215 300 EF FF FA 7F path rx, w 0215 300 EF FF FA 7F path rx, w
0216 304 EF FF E4 BE path alu_or a 0216 304 EF FF E4 BE path alu_or a
0217 308 FF FF FF FF inc pc 0217 308 FF FF FF FF inc pc
0218 30C AF FF FF FF ask_for_int 0218 30C AF FF FF FF ask_for_int
0219 310 CF FF FF FF reset upc 0219 310 CF FF FF FF reset upc
0220 0220
0221 314 FF FF FF FF dup 3, null 0221 314 FF FF FF FF dup 3, null
0222 0222
0223 ; or a, [rx] 0223 ; or a, [rx]
0224 320 EF F7 FA FF path rx, mar 0224 320 EF F7 FA FF path rx, mar
0225 324 EF FB F9 7F path [mar], w 0225 324 EF FB F9 7F path [mar], w
0226 328 EF FF E4 BE path alu_or, a 0226 328 EF FF E4 BE path alu_or, a
0227 32C FF FF FF FF inc pc 0227 32C FF FF FF FF inc pc
0228 330 AF FF FF FF ask_for_int 0228 330 AF FF FF FF ask_for_int
0229 334 CF FF FF FF reset upc 0229 334 CF FF FF FF reset upc
0230 0230
0231 338 FF FF FF FF dup 2, null 0231 338 FF FF FF FF dup 2, null
0232 0232
0233 ; or a, symbol 0233 ; or a, symbol
0234 340 FF FF FF FF inc pc 0234 340 FF FF FF FF inc pc
0235 344 EF 77 F9 FF path [pc], mar 0235 344 EF 77 F9 FF path [pc], mar
0236 348 EF FB F9 7F path [mar], w 0236 348 EF FB F9 7F path [mar], w
0237 34C EF FF E4 BE path alu_or, a 0237 34C EF FF E4 BE path alu_or, a
0238 350 FF FF FF FF inc pc 0238 350 FF FF FF FF inc pc
0239 354 AF FF FF FF ask_for_int 0239 354 AF FF FF FF ask_for_int
0240 358 CF FF FF FF reset upc 0240 358 CF FF FF FF reset upc
0241 0241
0242 35C FF FF FF FF dup 1, null 0242 35C FF FF FF FF dup 1, null
0243 0243
0244 ; or a, immediate 0244 ; or a, immediate
0245 360 FF FF FF FF inc pc 0245 360 FF FF FF FF inc pc
0246 364 EF 7F F9 7F path [pc], w 0246 364 EF 7F F9 7F path [pc], w
0247 368 EF FF E4 BE path alu_or, a 0247 368 EF FF E4 BE path alu_or, a
0248 36C FF FF FF FF inc pc 0248 36C FF FF FF FF inc pc
0249 370 AF FF FF FF ask_for_int 0249 370 AF FF FF FF ask_for_int
0250 374 CF FF FF FF reset upc 0250 374 CF FF FF FF reset upc
0251 0251
0252 378 FF FF FF FF dup 2, null 0252 378 FF FF FF FF dup 2, null
0253 0253
0254 ; mov a, rx 0254 ; mov a, rx
0255 380 EF FF FA BF path rx, a 0255 380 EF FF FA BF path rx, a
0256 384 FF FF FF FF inc pc 0256 384 FF FF FF FF inc pc
0257 388 AF FF FF FF ask_for_int 0257 388 AF FF FF FF ask_for_int
0258 38C CF FF FF FF reset upc 0258 38C CF FF FF FF reset upc
0259 0259
0260 390 FF FF FF FF dup 4, null 0260 390 FF FF FF FF dup 4, null
0261 0261
0262 ; mov a, [rx] 0262 ; mov a, [rx]
0263 3A0 EF F7 FA FF path rx, mar 0263 3A0 EF F7 FA FF path rx, mar
0264 3A4 EF FB F9 BF path [mar], a 0264 3A4 EF FB F9 BF path [mar], a
0265 3A8 FF FF FF FF inc pc 0265 3A8 FF FF FF FF inc pc
0266 3AC AF FF FF FF ask_for_int 0266 3AC AF FF FF FF ask_for_int
0267 3B0 CF FF FF FF reset upc 0267 3B0 CF FF FF FF reset upc
0268 0268
0269 3B4 FF FF FF FF dup 3, null 0269 3B4 FF FF FF FF dup 3, null
0270 0270
0271 ; mov a, symbol 0271 ; mov a, symbol
0272 3C0 FF FF FF FF inc pc 0272 3C0 FF FF FF FF inc pc
0273 3C4 EF 77 F9 FF path [pc], mar 0273 3C4 EF 77 F9 FF path [pc], mar
0274 3C8 EF FB F9 BF path [mar], a 0274 3C8 EF FB F9 BF path [mar], a
0275 3CC FF FF FF FF inc pc 0275 3CC FF FF FF FF inc pc
0276 3D0 AF FF FF FF ask_for_int 0276 3D0 AF FF FF FF ask_for_int
0277 3D4 CF FF FF FF reset upc 0277 3D4 CF FF FF FF reset upc
0278 0278
0279 3D8 FF FF FF FF dup 2, null 0279 3D8 FF FF FF FF dup 2, null
0280 0280
0281 ; mov a, immediate 0281 ; mov a, immediate
0282 3E0 FF FF FF FF inc pc 0282 3E0 FF FF FF FF inc pc
0283 3E4 EF 7F F9 BF path [pc], a 0283 3E4 EF 7F F9 BF path [pc], a
0284 3E8 FF FF FF FF inc pc 0284 3E8 FF FF FF FF inc pc
0285 3EC AF FF FF FF ask_for_int 0285 3EC AF FF FF FF ask_for_int
0286 3F0 CF FF FF FF reset upc 0286 3F0 CF FF FF FF reset upc
0287 0287
0288 3F4 FF FF FF FF dup 3, null 0288 3F4 FF FF FF FF dup 3, null
0289 0289
0290 ; mov rx, a 0290 ; mov rx, a
0291 400 EF FF B4 D0 path a, rx 0291 400 EF FF B4 D0 path a, rx
0292 404 FF FF FF FF inc pc 0292 404 FF FF FF FF inc pc
0293 408 AF FF FF FF ask_for_int 0293 408 AF FF FF FF ask_for_int
0294 40C CF FF FF FF reset upc 0294 40C CF FF FF FF reset upc
0295 0295
0296 410 FF FF FF FF dup 4, null 0296 410 FF FF FF FF dup 4, null
0297 0297
0298 ; mov [rx], a 0298 ; mov [rx], a
0299 420 EF F7 FA FF path rx, mar 0299 420 EF F7 FA FF path rx, mar
0300 424 ED FB F4 D0 path a, [mar] 0300 424 ED FB F4 D0 path a, [mar]
0301 428 FF FF FF FF inc pc 0301 428 FF FF FF FF inc pc
0302 42C AF FF FF FF ask_for_int 0302 42C AF FF FF FF ask_for_int
0303 430 CF FF FF FF reset upc 0303 430 CF FF FF FF reset upc
0304 0304
0305 434 FF FF FF FF dup 3, null 0305 434 FF FF FF FF dup 3, null
0306 0306
0307 ; mov symbol, a 0307 ; mov symbol, a
0308 440 FF FF FF FF inc pc 0308 440 FF FF FF FF inc pc
0309 444 EF 77 F9 FF path [pc], mar 0309 444 EF 77 F9 FF path [pc], mar
0310 448 ED FB F4 D0 path a, [mar] 0310 448 ED FB F4 D0 path a, [mar]
0311 44C FF FF FF FF inc pc 0311 44C FF FF FF FF inc pc
0312 450 AF FF FF FF ask_for_int 0312 450 AF FF FF FF ask_for_int
0313 454 CF FF FF FF reset upc 0313 454 CF FF FF FF reset upc
0314 0314
0315 458 FF FF FF FF dup 2, null 0315 458 FF FF FF FF dup 2, null
0316 0316
0317 ; mov rx, immediate 0317 ; mov rx, immediate
0318 460 FF FF FF FF inc pc 0318 460 FF FF FF FF inc pc
0319 464 EF 7F B9 FF path [pc], rx 0319 464 EF 7F B9 FF path [pc], rx
0320 468 FF FF FF FF inc pc 0320 468 FF FF FF FF inc pc
0321 46C AF FF FF FF ask_for_int 0321 46C AF FF FF FF ask_for_int
0322 470 CF FF FF FF reset upc 0322 470 CF FF FF FF reset upc
0323 0323
0324 474 FF FF FF FF dup 3, null 0324 474 FF FF FF FF dup 3, null
0325 0325
0326 ; read a, symbol 0326 ; read a, symbol
0327 480 FF FF FF FF inc pc 0327 480 FF FF FF FF inc pc
0328 484 EF 77 F9 FF path [pc], mar 0328 484 EF 77 F9 FF path [pc], mar
0329 488 EF 7F F9 BF path <mar>, a 0329 488 EF 7F F9 BF path <mar>, a
0330 48C FF FF FF FF inc pc 0330 48C FF FF FF FF inc pc
0331 490 AF FF FF FF ask_for_int 0331 490 AF FF FF FF ask_for_int
0332 494 CF FF FF FF reset upc 0332 494 CF FF FF FF reset upc
0333 0333
0334 498 FF FF FF FF dup 2, null 0334 498 FF FF FF FF dup 2, null
0335 0335
0336 ; write symbol, a 0336 ; write symbol, a
0337 4A0 FF FF FF FF inc pc 0337 4A0 FF FF FF FF inc pc
0338 4A4 EF 77 F9 FF path [pc], mar 0338 4A4 EF 77 F9 FF path [pc], mar
0339 4A8 EC FB F4 D0 path alu_aout, [mar] 0339 4A8 EC FB F4 D0 path alu_aout, [mar]
0340 4AC FF FF FF FF inc pc 0340 4AC FF FF FF FF inc pc
0341 4B0 AF FF FF FF ask_for_int 0341 4B0 AF FF FF FF ask_for_int
0342 4B4 CF FF FF FF reset upc 0342 4B4 CF FF FF FF reset upc
0343 0343
0344 4B8 FF FF FF FF dup 2, null 0344 4B8 FF FF FF FF dup 2, null
0345 0345
0346 ; lea a, symbol 0346 ; lea a, symbol
0347 4C0 FF FF FF FF inc pc 0347 4C0 FF FF FF FF inc pc
0348 4C4 EF 7F F9 BF path [pc], a 0348 4C4 EF 7F F9 BF path [pc], a
0349 4C8 FF FF FF FF inc pc 0349 4C8 FF FF FF FF inc pc
0350 4CC AF FF FF FF ask_for_int 0350 4CC AF FF FF FF ask_for_int
0351 4D0 CF FF FF FF reset upc 0351 4D0 CF FF FF FF reset upc
0352 0352
0353 4D4 FF FF FF FF dup 3, null 0353 4D4 FF FF FF FF dup 3, null
0354 0354
0355 ;mov sp, immediate 0355 ;mov sp, immediate
0356 4E0 FF FF FF FF inc pc 0356 4E0 FF FF FF FF inc pc
0357 4E4 EF 7E F9 FF path [pc], sp 0357 4E4 EF 7E F9 FF path [pc], sp
0358 4E8 FF FF FF FF inc pc 0358 4E8 FF FF FF FF inc pc
0359 4EC AF FF FF FF ask_for_int 0359 4EC AF FF FF FF ask_for_int
0360 4F0 CF FF FF FF reset upc 0360 4F0 CF FF FF FF reset upc
0361 0361
0362 4F4 FF FF FF FF dup 3, null 0362 4F4 FF FF FF FF dup 3, null
0363 0363
0364 ; jc symbol 0364 ; jc symbol
0365 500 FF FF FF FF inc pc 0365 500 FF FF FF FF inc pc
0366 504 EF 6F F9 FF path [pc], pc 0366 504 EF 6F F9 FF path [pc], pc
0367 508 AF FF FF FF ask_for_int 0367 508 AF FF FF FF ask_for_int
0368 50C CF FF FF FF reset upc 0368 50C CF FF FF FF reset upc
0369 0369
0370 510 FF FF FF FF dup 4, null 0370 510 FF FF FF FF dup 4, null
0371 0371
0372 ; jz symbol 0372 ; jz symbol
0373 520 FF FF FF FF inc pc 0373 520 FF FF FF FF inc pc
0374 524 EF 6F F9 FF path [pc], pc 0374 524 EF 6F F9 FF path [pc], pc
0375 528 AF FF FF FF ask_for_int 0375 528 AF FF FF FF ask_for_int
0376 52C CF FF FF FF reset upc 0376 52C CF FF FF FF reset upc
0377 0377
0378 530 FF FF FF FF dup 4, null 0378 530 FF FF FF FF dup 4, null
0379 0379
0380 ; 填充空白指令 0380 ; 填充空白指令
0381 540 FF FF FF FF dup 8, null 0381 540 FF FF FF FF dup 8, null
0382 0382
0383 ; jmp symbol 0383 ; jmp symbol
0384 560 FF FF FF FF inc pc 0384 560 FF FF FF FF inc pc
0385 564 EF 6F F9 FF path [pc], pc 0385 564 EF 6F F9 FF path [pc], pc
0386 568 AF FF FF FF ask_for_int 0386 568 AF FF FF FF ask_for_int
0387 56C CF FF FF FF reset upc 0387 56C CF FF FF FF reset upc
0388 0388
0389 570 FF FF FF FF dup 4, null 0389 570 FF FF FF FF dup 4, null
0390 0390
0391 ; in 0391 ; in
0392 580 EF FF F0 BF path rin, a 0392 580 EF FF F0 BF path rin, a
0393 584 FF FF FF FF inc pc 0393 584 FF FF FF FF inc pc
0394 588 AF FF FF FF ask_for_int 0394 588 AF FF FF FF ask_for_int
0395 58C CF FF FF FF reset upc 0395 58C CF FF FF FF reset upc
0396 0396
0397 590 FF FF FF FF dup 4, null 0397 590 FF FF FF FF dup 4, null
0398 0398
0399 ; out 0399 ; out
0400 5A0 EE FF F4 D0 path a, rout 0400 5A0 EE FF F4 D0 path a, rout
0401 5A4 FF FF FF FF inc pc 0401 5A4 FF FF FF FF inc pc
0402 5A8 AF FF FF FF ask_for_int 0402 5A8 AF FF FF FF ask_for_int
0403 5AC CF FF FF FF reset upc 0403 5AC CF FF FF FF reset upc
0404 0404
0405 5B0 FF FF FF FF dup 4, null 0405 5B0 FF FF FF FF dup 4, null
0406 0406
0407 ; int immediate 0407 ; int immediate
0408 5C0 FF FF FF FF inc pc 0408 5C0 FF FF FF FF inc pc
0409 5C4 EB 7F F9 FF path [pc], ia 0409 5C4 EB 7F F9 FF path [pc], ia
0410 5C8 EF FF 72 FF path sp, csp 0410 5C8 EF FF 72 FF path sp, csp
0411 5CC E7 FF FF FF path sp_inc, csp 0411 5CC E7 FF FF FF path sp_inc, csp
0412 5D0 EF FE F8 FF path csp, sp 0412 5D0 EF FE F8 FF path csp, sp
0413 5D4 EF F7 F2 FF path sp, mar 0413 5D4 EF F7 F2 FF path sp, mar
0414 5D8 FF FF FF FF inc pc 0414 5D8 FF FF FF FF inc pc
0415 5DC ED FB F3 FF path pc, [mar] 0415 5DC ED FB F3 FF path pc, [mar]
0416 5E0 EF F7 F1 FF path ia, mar 0416 5E0 EF F7 F1 FF path ia, mar
0417 5E4 EF EB F9 FF path [mar], pc 0417 5E4 EF EB F9 FF path [mar], pc
0418 5E8 CF FF FF FF reset upc 0418 5E8 CF FF FF FF reset upc
0419 0419
0420 5EC FF FF FF FF dup 5, null 0420 5EC FF FF FF FF dup 5, null
0421 0421
0422 ; 0422 ;
0423 600 FF FF FF FF dup 16, null 0423 600 FF FF FF FF dup 16, null
0424 0424
0425 ;===================================================================== 0425 ;=====================================================================
0426 ;子程序调用返回指令 0426 ;子程序调用返回指令
0427 ; ret 0427 ; ret
0428 640 EF F7 F2 FF path sp, mar ;将堆栈指针(栈顶地址)传送到 MAR 0428 640 EF F7 F2 FF path sp, mar ;将堆栈指针(栈顶地址)传送到 MAR
0429 644 EF FF 72 FF path sp, csp ; 0429 644 EF FF 72 FF path sp, csp ;
0430 648 E7 FF FF FF path sp_inc, csp ; 0430 648 E7 FF FF FF path sp_inc, csp ;
0431 64C EF FE F8 FF path csp, sp ;SP = SP + 1,出栈,更新栈顶 0431 64C EF FE F8 FF path csp, sp ;SP = SP + 1,出栈,更新栈顶
0432 650 EF EB F9 FF path [mar], pc ;将调用返回地址加载到PC,转移到调用处的下一条指令继续执行 0432 650 EF EB F9 FF path [mar], pc ;将调用返回地址加载到PC,转移到调用处的下一条指令继续执行
0433 654 CF FF FF FF reset upc 0433 654 CF FF FF FF reset upc
0434 0434
0435 658 FF FF FF FF dup 2, null 0435 658 FF FF FF FF dup 2, null
0436 ;===================================================================== 0436 ;=====================================================================
0437 0437
0438 ; 填充空白指令 0438 ; 填充空白指令
0439 660 FF FF FF FF dup 8, null 0439 660 FF FF FF FF dup 8, null
0440 0440
0441 ; shr a 0441 ; shr a
0442 680 EF FF D5 90 path alu_shr, a 0442 680 EF FF D5 90 path alu_shr, a
0443 684 FF FF FF FF inc pc 0443 684 FF FF FF FF inc pc
0444 688 AF FF FF FF ask_for_int 0444 688 AF FF FF FF ask_for_int
0445 68C CF FF FF FF reset upc 0445 68C CF FF FF FF reset upc
0446 0446
0447 690 FF FF FF FF dup 4, null 0447 690 FF FF FF FF dup 4, null
0448 0448
0449 ; shl a 0449 ; shl a
0450 6A0 EF FF D6 90 path alu_shl, a 0450 6A0 EF FF D6 90 path alu_shl, a
0451 6A4 FF FF FF FF inc pc 0451 6A4 FF FF FF FF inc pc
0452 6A8 AF FF FF FF ask_for_int 0452 6A8 AF FF FF FF ask_for_int
0453 6AC CF FF FF FF reset upc 0453 6AC CF FF FF FF reset upc
0454 0454
0455 6B0 FF FF FF FF dup 4, null 0455 6B0 FF FF FF FF dup 4, null
0456 0456
0457 ; rcr a 0457 ; rcr a
0458 6C0 EF FF E5 90 path alu_rcr, a 0458 6C0 EF FF E5 90 path alu_rcr, a
0459 6C4 FF FF FF FF inc pc 0459 6C4 FF FF FF FF inc pc
0460 6C8 AF FF FF FF ask_for_int 0460 6C8 AF FF FF FF ask_for_int
0461 6CC CF FF FF FF reset upc 0461 6CC CF FF FF FF reset upc
0462 0462
0463 6D0 FF FF FF FF dup 4, null 0463 6D0 FF FF FF FF dup 4, null
0464 0464
0465 ; rcl a 0465 ; rcl a
0466 6E0 EF FF E6 90 path alu_rcl, a 0466 6E0 EF FF E6 90 path alu_rcl, a
0467 6E4 FF FF FF FF inc pc 0467 6E4 FF FF FF FF inc pc
0468 6E8 AF FF FF FF ask_for_int 0468 6E8 AF FF FF FF ask_for_int
0469 6EC CF FF FF FF reset upc 0469 6EC CF FF FF FF reset upc
0470 0470
0471 6F0 FF FF FF FF dup 4, null 0471 6F0 FF FF FF FF dup 4, null
0472 0472
0473 ; nop 0473 ; nop
0474 700 FF FF FF FF inc pc 0474 700 FF FF FF FF inc pc
0475 704 CF FF FF FF reset upc 0475 704 CF FF FF FF reset upc
0476 0476
0477 708 FF FF FF FF dup 6, null 0477 708 FF FF FF FF dup 6, null
0478 0478
0479 ; not a 0479 ; not a
0480 720 EF FF F4 B0 path alu_not, a 0480 720 EF FF F4 B0 path alu_not, a
0481 724 FF FF FF FF inc pc 0481 724 FF FF FF FF inc pc
0482 728 AF FF FF FF ask_for_int 0482 728 AF FF FF FF ask_for_int
0483 72C CF FF FF FF reset upc 0483 72C CF FF FF FF reset upc
0484 0484
0485 730 FF FF FF FF dup 4, null 0485 730 FF FF FF FF dup 4, null
0486 0486
0487 ; call symbol 0487 ; call symbol
0488 740 FF FF FF FF inc pc 0488 740 FF FF FF FF inc pc
0489 744 EF 7D F9 FF path [pc], asr 0489 744 EF 7D F9 FF path [pc], asr
0490 748 EF FF 72 FF path sp, csp 0490 748 EF FF 72 FF path sp, csp
0491 74C EF FF FF FF path sp_dec, csp 0491 74C EF FF FF FF path sp_dec, csp
0492 750 EF FE F8 FF path csp, sp 0492 750 EF FE F8 FF path csp, sp
0493 754 EF F7 F2 FF path sp, mar 0493 754 EF F7 F2 FF path sp, mar
0494 758 FF FF FF FF inc pc 0494 758 FF FF FF FF inc pc
0495 75C ED FB F3 FF path pc, [mar] 0495 75C ED FB F3 FF path pc, [mar]
0496 760 EF EF F7 FF path asr, pc 0496 760 EF EF F7 FF path asr, pc
0497 764 AF FF FF FF ask_for_int 0497 764 AF FF FF FF ask_for_int
0498 768 CF FF FF FF reset upc 0498 768 CF FF FF FF reset upc
0499 0499
0500 76C FF FF FF FF dup 5, null 0500 76C FF FF FF FF dup 5, null
0501 0501
0502 ;====================================================================== 0502 ;======================================================================
0503 ; 硬中断处理微指令程序。 0503 ; 硬中断处理微指令程序。
0504 ;硬中断处理就是入栈过程,将下一条指令的地址(中断返回地址)入栈,入栈过程就是将返回地址写入sp加1后指向的存储单元中 0504 ;硬中断处理就是入栈过程,将下一条指令的地址(中断返回地址)入栈,入栈过程就是将返回地址写入sp加1后指向的存储单元中
0505 ;然后将硬中断服务程序入口地址加载到PC,转去执行服务程序。 0505 ;然后将硬中断服务程序入口地址加载到PC,转去执行服务程序。
0506 780 EF FF 72 FF path sp, csp ;将堆栈指针寄存器sp的值传送到cst计数器 0506 780 EF FF 72 FF path sp, csp ;将堆栈指针寄存器sp的值传送到csp计数器
0507 784 EF FF FF FF path sp_dec, csp ;计数器cst减1 0507 784 EF FF FF FF path sp_dec, csp ;计数器csp减1
0508 788 EF FE F8 FF path csp, sp ;将减计数结果写回sp,完成堆栈指针sp-1操作,为返回地址入栈做准备 0508 788 EF FE F8 FF path csp, sp ;将减计数结果写回sp,完成堆栈指针sp-1操作,为返回地址入栈做准备
0509 78C EF F7 F2 FF path sp, mar ;sp堆栈指针寄存器内容传送到地址寄存器mar 0509 78C EF F7 F2 FF path sp, mar ;sp堆栈指针寄存器内容传送到地址寄存器mar
0510 790 ED FB F3 FF path pc, [mar] ;将返回地址PC入栈 0510 790 ED FB F3 FF path pc, [mar] ;将返回地址PC入栈
0511 0511
0512 ; 根据中断号获取中断服务程序入口地址 0512 ; 根据中断号获取中断服务程序入口地址
0513 794 EF FF FB FF inta1 ;发出第一个中断应答信号,中断控制器保存最高优先级中断请求对应的编号(0~7) 0513 794 EF FF FB FF inta1 ;发出第一个中断应答信号,中断控制器保存最高优先级中断请求对应的编号(0~7)
0514 798 EB FF FC FF inta2 ;发出第二个中断应答信号,将响应中断的终端号读入IA寄存器中,并清除响应的中断请求,避免重复响应 0514 798 EB FF FC FF inta2 ;发出第二个中断应答信号,将响应中断的终端号读入IA寄存器中,并清除响应的中断请求,避免重复响应
0515 0515
0516 79C EF DF F1 FF path int_ia, pc ;将中断向量(ia寄存器的内容)传入PC 0516 79C EF DF F1 FF path int_ia, pc ;将中断向量(ia寄存器的内容)传入PC
0517 7A0 EF 5F F9 FF path [int_pc], pc ;读出中断向量中的内容(中断服务程序首地址),将其加载到PC,执行中断服务程序 0517 7A0 EF 5F F9 FF path [int_pc], pc ;读出中断向量中的内容(中断服务程序首地址),将其加载到PC,执行中断服务程序
0518 7A4 CF FF FF FF reset upc 0518 7A4 CF FF FF FF reset upc
0519 0519
0520 7A8 FF FF FF FF dup 6, null 0520 7A8 FF FF FF FF dup 6, null
0521 0521
0522 ;====================================================================== 0522 ;======================================================================
0523 ;中断返回指令 0523 ;中断返回指令
0524 ; iret 0524 ; iret
0525 ;中断返回就是出栈过程,将栈顶指针sp指向的存储单元内的返回地址加载到PC,实现中断返回 0525 ;中断返回就是出栈过程,将栈顶指针sp指向的存储单元内的返回地址加载到PC,实现中断返回
0526 ;与此同时,sp加1,指向新的栈顶 0526 ;与此同时,sp加1,指向新的栈顶
0527 ; iret 0527 ; iret
0528 7C0 EF F7 F2 FF path sp, mar ;将栈顶指针SP传入地址寄存器MAR,也就是将中断返回地址传入mar 0528 7C0 EF F7 F2 FF path sp, mar ;将栈顶指针SP传入地址寄存器MAR,也就是将中断返回地址传入mar
0529 7C4 EF FF 72 FF path sp, csp ;sp传入cst计数器 0529 7C4 EF FF 72 FF path sp, csp ;sp传入csp计数器
0530 7C8 E7 FF FF FF path sp_inc, csp ;cst计数器加1 0530 7C8 E7 FF FF FF path sp_inc, csp ;csp计数器加1
0531 7CC EF FE F8 FF path csp, sp ;将cst减1后的结果写入sp,也就是出栈后,sp减1,指向新的栈顶 0531 7CC EF FE F8 FF path csp, sp ;将csp减1后的结果写入sp,也就是出栈后,sp减1,指向新的栈顶
0532 7D0 EF EB F9 FF path [mar], pc ;将mar寄存器指向存储单元的内容作为地址传入PC,实现中断返回 0532 7D0 EF EB F9 FF path [mar], pc ;将mar寄存器指向存储单元的内容作为地址传入PC,实现中断返回
0533 7D4 EF FF FD FF eoi ;清除已经服务完的硬中断标志 0533 7D4 EF FF FD FF eoi ;清除已经服务完的硬中断标志
0534 7D8 CF FF FF FF reset upc 0534 7D8 AF FF FF FF ask_for_int
0535 0535 7DC CF FF FF FF reset upc
0536 7DC FF FF FF FF dup 1, null 0536
0537 0537 ;dup 1, null
0538 0538
0539 0539
0540
; (C) 2008-2018 北京英真时代科技有限公司。保留所有权利。 ; (C) 2008-2018 北京英真时代科技有限公司。保留所有权利。
; 所有指令的第一条微指令地址必须是8的倍数 ; 所有指令的第一条微指令地址必须是8的倍数
; 取指微指令,所有指令的第一步均为取指操作,都要执行该条微指令 ; 取指微指令,所有指令的第一步均为取指操作,都要执行该条微指令
path [pc], ir path [pc], ir
; 填充空白指令 01-1f ; 填充空白指令 01-1f
dup 31, null dup 31, null
; add a, rx ; add a, rx
path rx, w path rx, w
path alu_add, a path alu_add, a
inc pc inc pc
;查询硬中断请求,将低3位中断号与高5位中断向量基地址组合,得到8位中断向量(8位地址) ;查询硬中断请求,将低3位中断号与高5位中断向量基地址组合,得到8位中断向量(8位地址)
;该中断向量指向一个存储单元,该存储单元保存的就是中断服务程序的入口地址 ;该中断向量指向一个存储单元,该存储单元保存的就是中断服务程序的入口地址
;若允许中断且有中断请求,则微程序跳转到硬中断处理处执行 ;若允许中断且有中断请求,则微程序跳转到硬中断处理处执行
ask_for_int ask_for_int
reset upc reset upc
dup 3, null dup 3, null
; add a, [rx] ; add a, [rx]
path rx, mar path rx, mar
path [mar], w path [mar], w
path alu_add, a path alu_add, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; add a, symbol ; add a, symbol
inc pc inc pc
path [pc], mar path [pc], mar
path [mar], w path [mar], w
path alu_add, a path alu_add, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 1, null dup 1, null
; add a, immediate ; add a, immediate
inc pc inc pc
path [pc], w path [pc], w
path alu_add, a path alu_add, a
inc pc inc pc
ask_for_int ;查询硬中断请求,若有请求,则转去执行硬中断预处理微程序 ask_for_int ;查询硬中断请求,若有请求,则转去执行硬中断预处理微程序
reset upc reset upc
dup 2, null dup 2, null
; adc a, rx ; adc a, rx
path rx, w path rx, w
path alu_adc, a path alu_adc, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 3, null dup 3, null
; adc a, [rx] ; adc a, [rx]
path rx, mar path rx, mar
path [mar], w path [mar], w
path alu_adc, a path alu_adc, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; adc a, symbol ; adc a, symbol
inc pc inc pc
path [pc], mar path [pc], mar
path [mar], w path [mar], w
path alu_adc, a path alu_adc, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 1, null dup 1, null
; adc a, immediate ; adc a, immediate
inc pc inc pc
path [pc], w path [pc], w
path alu_adc, a path alu_adc, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; sub a, rx ; sub a, rx
path rx, w path rx, w
path alu_sub, a path alu_sub, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 3, null dup 3, null
; sub a, [rx] ; sub a, [rx]
path rx, mar path rx, mar
path [mar], w path [mar], w
path alu_sub, a path alu_sub, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; sub a, symbol ; sub a, symbol
inc pc inc pc
path [pc], mar path [pc], mar
path [mar], w path [mar], w
path alu_sub, a path alu_sub, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 1, null dup 1, null
; sub a, immediate ; sub a, immediate
inc pc inc pc
path [pc], w path [pc], w
path alu_sub, a path alu_sub, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; sbb a, rx ; sbb a, rx
path rx, w path rx, w
path alu_sbb, a path alu_sbb, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 3, null dup 3, null
; sbb a, [rx] ; sbb a, [rx]
path rx, mar path rx, mar
path [mar], w path [mar], w
path alu_sbb, a path alu_sbb, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; sbb a, symbol ; sbb a, symbol
inc pc inc pc
path [pc], mar path [pc], mar
path [mar], w path [mar], w
path alu_sbb, a path alu_sbb, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 1, null dup 1, null
; sbb a, immediate ; sbb a, immediate
inc pc inc pc
path [pc], w path [pc], w
path alu_sbb, a path alu_sbb, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; and a, rx ; and a, rx
path rx, w path rx, w
path alu_and a path alu_and a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 3, null dup 3, null
; and a, [rx] ; and a, [rx]
path rx, mar path rx, mar
path [mar], w path [mar], w
path alu_and, a path alu_and, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; and a, symbol ; and a, symbol
inc pc inc pc
path [pc], mar path [pc], mar
path [mar], w path [mar], w
path alu_and, a path alu_and, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 1, null dup 1, null
; and a, immediate ; and a, immediate
inc pc inc pc
path [pc], w path [pc], w
path alu_and, a path alu_and, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; or a, rx ; or a, rx
path rx, w path rx, w
path alu_or a path alu_or a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 3, null dup 3, null
; or a, [rx] ; or a, [rx]
path rx, mar path rx, mar
path [mar], w path [mar], w
path alu_or, a path alu_or, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; or a, symbol ; or a, symbol
inc pc inc pc
path [pc], mar path [pc], mar
path [mar], w path [mar], w
path alu_or, a path alu_or, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 1, null dup 1, null
; or a, immediate ; or a, immediate
inc pc inc pc
path [pc], w path [pc], w
path alu_or, a path alu_or, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; mov a, rx ; mov a, rx
path rx, a path rx, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 4, null dup 4, null
; mov a, [rx] ; mov a, [rx]
path rx, mar path rx, mar
path [mar], a path [mar], a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 3, null dup 3, null
; mov a, symbol ; mov a, symbol
inc pc inc pc
path [pc], mar path [pc], mar
path [mar], a path [mar], a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; mov a, immediate ; mov a, immediate
inc pc inc pc
path [pc], a path [pc], a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 3, null dup 3, null
; mov rx, a ; mov rx, a
path a, rx path a, rx
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 4, null dup 4, null
; mov [rx], a ; mov [rx], a
path rx, mar path rx, mar
path a, [mar] path a, [mar]
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 3, null dup 3, null
; mov symbol, a ; mov symbol, a
inc pc inc pc
path [pc], mar path [pc], mar
path a, [mar] path a, [mar]
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; mov rx, immediate ; mov rx, immediate
inc pc inc pc
path [pc], rx path [pc], rx
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 3, null dup 3, null
; read a, symbol ; read a, symbol
inc pc inc pc
path [pc], mar path [pc], mar
path <mar>, a path <mar>, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; write symbol, a ; write symbol, a
inc pc inc pc
path [pc], mar path [pc], mar
path alu_aout, [mar] path alu_aout, [mar]
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 2, null dup 2, null
; lea a, symbol ; lea a, symbol
inc pc inc pc
path [pc], a path [pc], a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 3, null dup 3, null
;mov sp, immediate ;mov sp, immediate
inc pc inc pc
path [pc], sp path [pc], sp
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 3, null dup 3, null
; jc symbol ; jc symbol
inc pc inc pc
path [pc], pc path [pc], pc
ask_for_int ask_for_int
reset upc reset upc
dup 4, null dup 4, null
; jz symbol ; jz symbol
inc pc inc pc
path [pc], pc path [pc], pc
ask_for_int ask_for_int
reset upc reset upc
dup 4, null dup 4, null
; 填充空白指令 ; 填充空白指令
dup 8, null dup 8, null
; jmp symbol ; jmp symbol
inc pc inc pc
path [pc], pc path [pc], pc
ask_for_int ask_for_int
reset upc reset upc
dup 4, null dup 4, null
; in ; in
path rin, a path rin, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 4, null dup 4, null
; out ; out
path a, rout path a, rout
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 4, null dup 4, null
; int immediate ; int immediate
inc pc inc pc
path [pc], ia path [pc], ia
path sp, csp path sp, csp
path sp_inc, csp path sp_inc, csp
path csp, sp path csp, sp
path sp, mar path sp, mar
inc pc inc pc
path pc, [mar] path pc, [mar]
path ia, mar path ia, mar
path [mar], pc path [mar], pc
reset upc reset upc
dup 5, null dup 5, null
; ;
dup 16, null dup 16, null
;===================================================================== ;=====================================================================
;子程序调用返回指令 ;子程序调用返回指令
; ret ; ret
path sp, mar ;将堆栈指针(栈顶地址)传送到 MAR path sp, mar ;将堆栈指针(栈顶地址)传送到 MAR
path sp, csp ; path sp, csp ;
path sp_inc, csp ; path sp_inc, csp ;
path csp, sp ;SP = SP + 1,出栈,更新栈顶 path csp, sp ;SP = SP + 1,出栈,更新栈顶
path [mar], pc ;将调用返回地址加载到PC,转移到调用处的下一条指令继续执行 path [mar], pc ;将调用返回地址加载到PC,转移到调用处的下一条指令继续执行
reset upc reset upc
dup 2, null dup 2, null
;===================================================================== ;=====================================================================
; 填充空白指令 ; 填充空白指令
dup 8, null dup 8, null
; shr a ; shr a
path alu_shr, a path alu_shr, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 4, null dup 4, null
; shl a ; shl a
path alu_shl, a path alu_shl, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 4, null dup 4, null
; rcr a ; rcr a
path alu_rcr, a path alu_rcr, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 4, null dup 4, null
; rcl a ; rcl a
path alu_rcl, a path alu_rcl, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 4, null dup 4, null
; nop ; nop
inc pc inc pc
reset upc reset upc
dup 6, null dup 6, null
; not a ; not a
path alu_not, a path alu_not, a
inc pc inc pc
ask_for_int ask_for_int
reset upc reset upc
dup 4, null dup 4, null
; call symbol ; call symbol
inc pc inc pc
path [pc], asr path [pc], asr
path sp, csp path sp, csp
path sp_dec, csp path sp_dec, csp
path csp, sp path csp, sp
path sp, mar path sp, mar
inc pc inc pc
path pc, [mar] path pc, [mar]
path asr, pc path asr, pc
ask_for_int ask_for_int
reset upc reset upc
dup 5, null dup 5, null
;====================================================================== ;======================================================================
; 硬中断处理微指令程序。 ; 硬中断处理微指令程序。
;硬中断处理就是入栈过程,将下一条指令的地址(中断返回地址)入栈,入栈过程就是将返回地址写入sp加1后指向的存储单元中 ;硬中断处理就是入栈过程,将下一条指令的地址(中断返回地址)入栈,入栈过程就是将返回地址写入sp加1后指向的存储单元中
;然后将硬中断服务程序入口地址加载到PC,转去执行服务程序。 ;然后将硬中断服务程序入口地址加载到PC,转去执行服务程序。
path sp, csp ;将堆栈指针寄存器sp的值传送到cst计数器 path sp, csp ;将堆栈指针寄存器sp的值传送到csp计数器
path sp_dec, csp ;计数器cst减1 path sp_dec, csp ;计数器csp减1
path csp, sp ;将减计数结果写回sp,完成堆栈指针sp-1操作,为返回地址入栈做准备 path csp, sp ;将减计数结果写回sp,完成堆栈指针sp-1操作,为返回地址入栈做准备
path sp, mar ;sp堆栈指针寄存器内容传送到地址寄存器mar path sp, mar ;sp堆栈指针寄存器内容传送到地址寄存器mar
path pc, [mar] ;将返回地址PC入栈 path pc, [mar] ;将返回地址PC入栈
; 根据中断号获取中断服务程序入口地址 ; 根据中断号获取中断服务程序入口地址
inta1 ;发出第一个中断应答信号,中断控制器保存最高优先级中断请求对应的编号(0~7) inta1 ;发出第一个中断应答信号,中断控制器保存最高优先级中断请求对应的编号(0~7)
inta2 ;发出第二个中断应答信号,将响应中断的终端号读入IA寄存器中,并清除响应的中断请求,避免重复响应 inta2 ;发出第二个中断应答信号,将响应中断的终端号读入IA寄存器中,并清除响应的中断请求,避免重复响应
path int_ia, pc ;将中断向量(ia寄存器的内容)传入PC path int_ia, pc ;将中断向量(ia寄存器的内容)传入PC
path [int_pc], pc ;读出中断向量中的内容(中断服务程序首地址),将其加载到PC,执行中断服务程序 path [int_pc], pc ;读出中断向量中的内容(中断服务程序首地址),将其加载到PC,执行中断服务程序
reset upc reset upc
dup 6, null dup 6, null
;====================================================================== ;======================================================================
;中断返回指令 ;中断返回指令
; iret ; iret
;中断返回就是出栈过程,将栈顶指针sp指向的存储单元内的返回地址加载到PC,实现中断返回 ;中断返回就是出栈过程,将栈顶指针sp指向的存储单元内的返回地址加载到PC,实现中断返回
;与此同时,sp加1,指向新的栈顶 ;与此同时,sp加1,指向新的栈顶
; iret ; iret
path sp, mar ;将栈顶指针SP传入地址寄存器MAR,也就是将中断返回地址传入mar path sp, mar ;将栈顶指针SP传入地址寄存器MAR,也就是将中断返回地址传入mar
path sp, csp ;sp传入cst计数器 path sp, csp ;sp传入csp计数器
path sp_inc, csp ;cst计数器加1 path sp_inc, csp ;csp计数器加1
path csp, sp ;将cst减1后的结果写入sp,也就是出栈后,sp减1,指向新的栈顶 path csp, sp ;将csp减1后的结果写入sp,也就是出栈后,sp减1,指向新的栈顶
path [mar], pc ;将mar寄存器指向存储单元的内容作为地址传入PC,实现中断返回 path [mar], pc ;将mar寄存器指向存储单元的内容作为地址传入PC,实现中断返回
eoi ;清除已经服务完的硬中断标志 eoi ;清除已经服务完的硬中断标志
reset upc ask_for_int
reset upc
dup 1, null
没有这种文件类型的预览
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论