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

layout net

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