Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
H
Hardware-IRQ
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
Dream Logic Group
实验项目模板
计算机组成原理
Hardware-IRQ
提交
6f4cccaf
提交
6f4cccaf
12月 10, 2018
创建
作者:
李川
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'hdr' into 'master'
将计数器CST名称修改为CSP See merge request
!4
上级
c906407a
0f792842
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
36 行增加
和
36 行删除
+36
-36
microasm.c
microasm.c
+6
-6
microasm.exe
microasm.exe
+0
-0
rom.lst
rom.lst
+15
-15
rom.masm
rom.masm
+15
-15
没有找到文件。
microasm.c
浏览文件 @
6f4cccaf
...
...
@@ -63,7 +63,7 @@ const char* asr_register_keyword = "asr";
const
char
*
upc_register_keyword
=
"upc"
;
// 堆栈计数器
const
char
*
cs
t_counter_keyword
=
"cst
"
;
const
char
*
cs
p_counter_keyword
=
"csp
"
;
//
// alu 操作码
...
...
@@ -187,15 +187,15 @@ struct PATH_INSTRUCTION_OPERAND_ENTRY path_operand_table[] =
,{
&
sp_register_keyword
,
&
mar_register_keyword
,
0xfff2f7ef
}
// path sp, mar
,{
&
sp_register_keyword
,
&
cs
t_counter_keyword
,
0xff72ffef
}
// path sp, cst
,{
&
sp_register_keyword
,
&
cs
p_counter_keyword
,
0xff72ffef
}
// path sp, csp
,{
&
pc_main_memory_keyword
,
&
ia_register_keyword
,
0xfff97feb
}
// path [pc], ia 执行后pc应加1指向下一条指令
,{
&
pc_main_memory_keyword
,
&
asr_register_keyword
,
0xfff97def
}
// path [pc], asr
,{
&
cs
t_counter_keyword
,
&
mar_register_keyword
,
0xfff8f7ef
}
// path cst
, mar
,{
&
cs
t_counter_keyword
,
&
sp_register_keyword
,
0xfff8feef
}
// path cst
, sp
,{
&
cs
p_counter_keyword
,
&
mar_register_keyword
,
0xfff8f7ef
}
// path csp
, mar
,{
&
cs
p_counter_keyword
,
&
sp_register_keyword
,
0xfff8feef
}
// path csp
, sp
,{
&
sp_inc_keyword
,
&
cs
t_counter_keyword
,
0xffffffe7
}
// path st_add, cst
,{
&
sp_dec_keyword
,
&
cs
t_counter_keyword
,
0xffffffef
}
// path st_minus, cst
,{
&
sp_inc_keyword
,
&
cs
p_counter_keyword
,
0xffffffe7
}
// path sp_add, csp
,{
&
sp_dec_keyword
,
&
cs
p_counter_keyword
,
0xffffffef
}
// path sp_minus, csp
,{
&
pc_register_keyword
,
&
mar_main_memory_keyword
,
0xfff3fbed
}
// path pc, [mar] 将pc值写入mar指向的内存
,{
&
asr_register_keyword
,
&
pc_register_keyword
,
0xfff7efef
}
// path asr, pc
...
...
microasm.exe
浏览文件 @
6f4cccaf
没有这种文件类型的预览
rom.lst
浏览文件 @
6f4cccaf
...
...
@@ -407,9 +407,9 @@
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, cs
t
0411 5CC E7 FF FF FF path sp_inc, cs
t
0412 5D0 EF FE F8 FF path cs
t
, sp
0410 5C8 EF FF 72 FF path sp, cs
p
0411 5CC E7 FF FF FF path sp_inc, cs
p
0412 5D0 EF FE F8 FF path cs
p
, 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]
...
...
@@ -426,9 +426,9 @@
0426 ;子程序调用返回指令
0427 ; ret
0428 640 EF F7 F2 FF path sp, mar ;将堆栈指针(栈顶地址)传送到 MAR
0429 644 EF FF 72 FF path sp, cs
t
;
0430 648 E7 FF FF FF path sp_inc, cs
t
;
0431 64C EF FE F8 FF path cs
t
, sp ;SP = SP + 1,出栈,更新栈顶
0429 644 EF FF 72 FF path sp, cs
p
;
0430 648 E7 FF FF FF path sp_inc, cs
p
;
0431 64C EF FE F8 FF path cs
p
, sp ;SP = SP + 1,出栈,更新栈顶
0432 650 EF EB F9 FF path [mar], pc ;将调用返回地址加载到PC,转移到调用处的下一条指令继续执行
0433 654 CF FF FF FF reset upc
0434
...
...
@@ -487,9 +487,9 @@
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, cs
t
0491 74C EF FF FF FF path sp_dec, cs
t
0492 750 EF FE F8 FF path cs
t
, sp
0490 748 EF FF 72 FF path sp, cs
p
0491 74C EF FF FF FF path sp_dec, cs
p
0492 750 EF FE F8 FF path cs
p
, 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]
...
...
@@ -503,9 +503,9 @@
0503 ; 硬中断处理微指令程序。
0504 ;硬中断处理就是入栈过程,将下一条指令的地址(中断返回地址)入栈,入栈过程就是将返回地址写入sp加1后指向的存储单元中
0505 ;然后将硬中断服务程序入口地址加载到PC,转去执行服务程序。
0506 780 EF FF 72 FF path sp, cs
t
;将堆栈指针寄存器sp的值传送到cst计数器
0507 784 EF FF FF FF path sp_dec, cs
t
;计数器cst减1
0508 788 EF FE F8 FF path cs
t
, sp ;将减计数结果写回sp,完成堆栈指针sp-1操作,为返回地址入栈做准备
0506 780 EF FF 72 FF path sp, cs
p
;将堆栈指针寄存器sp的值传送到cst计数器
0507 784 EF FF FF FF path sp_dec, cs
p
;计数器cst减1
0508 788 EF FE F8 FF path cs
p
, 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
...
...
@@ -526,9 +526,9 @@
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, cs
t
;sp传入cst计数器
0530 7C8 E7 FF FF FF path sp_inc, cs
t
;cst计数器加1
0531 7CC EF FE F8 FF path cs
t
, sp ;将cst减1后的结果写入sp,也就是出栈后,sp减1,指向新的栈顶
0529 7C4 EF FF 72 FF path sp, cs
p
;sp传入cst计数器
0530 7C8 E7 FF FF FF path sp_inc, cs
p
;cst计数器加1
0531 7CC EF FE F8 FF path cs
p
, 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
...
...
rom.masm
浏览文件 @
6f4cccaf
...
...
@@ -407,9 +407,9 @@ dup 4, null
; int immediate
inc pc
path [pc], ia
path sp, cs
t
path sp_inc, cs
t
path cs
t
, sp
path sp, cs
p
path sp_inc, cs
p
path cs
p
, sp
path sp, mar
inc pc
path pc, [mar]
...
...
@@ -426,9 +426,9 @@ dup 16, null
;子程序调用返回指令
; ret
path sp, mar ;将堆栈指针(栈顶地址)传送到 MAR
path sp, cs
t
;
path sp_inc, cs
t
;
path cs
t
, sp ;SP = SP + 1,出栈,更新栈顶
path sp, cs
p
;
path sp_inc, cs
p
;
path cs
p
, sp ;SP = SP + 1,出栈,更新栈顶
path [mar], pc ;将调用返回地址加载到PC,转移到调用处的下一条指令继续执行
reset upc
...
...
@@ -487,9 +487,9 @@ dup 4, null
; call symbol
inc pc
path [pc], asr
path sp, cs
t
path sp_dec, cs
t
path cs
t
, sp
path sp, cs
p
path sp_dec, cs
p
path cs
p
, sp
path sp, mar
inc pc
path pc, [mar]
...
...
@@ -503,9 +503,9 @@ dup 5, null
; 硬中断处理微指令程序。
;硬中断处理就是入栈过程,将下一条指令的地址(中断返回地址)入栈,入栈过程就是将返回地址写入sp加1后指向的存储单元中
;然后将硬中断服务程序入口地址加载到PC,转去执行服务程序。
path sp, cs
t
;将堆栈指针寄存器sp的值传送到cst计数器
path sp_dec, cs
t
;计数器cst减1
path cs
t
, sp ;将减计数结果写回sp,完成堆栈指针sp-1操作,为返回地址入栈做准备
path sp, cs
p
;将堆栈指针寄存器sp的值传送到cst计数器
path sp_dec, cs
p
;计数器cst减1
path cs
p
, sp ;将减计数结果写回sp,完成堆栈指针sp-1操作,为返回地址入栈做准备
path sp, mar ;sp堆栈指针寄存器内容传送到地址寄存器mar
path pc, [mar] ;将返回地址PC入栈
...
...
@@ -526,9 +526,9 @@ dup 6, null
;与此同时,sp加1,指向新的栈顶
; iret
path sp, mar ;将栈顶指针SP传入地址寄存器MAR,也就是将中断返回地址传入mar
path sp, cs
t
;sp传入cst计数器
path sp_inc, cs
t
;cst计数器加1
path cs
t
, sp ;将cst减1后的结果写入sp,也就是出栈后,sp减1,指向新的栈顶
path sp, cs
p
;sp传入cst计数器
path sp_inc, cs
p
;cst计数器加1
path cs
p
, sp ;将cst减1后的结果写入sp,也就是出栈后,sp减1,指向新的栈顶
path [mar], pc ;将mar寄存器指向存储单元的内容作为地址传入PC,实现中断返回
eoi ;清除已经服务完的硬中断标志
reset upc
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论