Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
DM1000
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸大学计算机学院
教师群组
赵鹏翀-zpc
DM1000
提交
f4ee406d
提交
f4ee406d
12月 17, 2018
创建
作者:
李川
提交者:
李川
12月 17, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改调用指令微程序
上级
af5ed2ee
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
118 行增加
和
90 行删除
+118
-90
rom.dbg
rom.dbg
+0
-0
rom.lst
rom.lst
+98
-84
rom.masm
rom.masm
+18
-4
rom.rxm
rom.rxm
+2
-2
没有找到文件。
rom.dbg
浏览文件 @
f4ee406d
没有这种文件类型的预览
rom.lst
浏览文件 @
f4ee406d
...
@@ -371,90 +371,104 @@
...
@@ -371,90 +371,104 @@
0371 ;=======================================================================
0371 ;=======================================================================
0372 ;子程序调用返回指令
0372 ;子程序调用返回指令
0373 ; ret
0373 ; ret
0374
640 EF F7 F2 FF path sp, mar ;将栈指针(栈顶地址)传送到 MAR
0374
0375
644 EF FF 72 FF path sp, csp ;
0375
; 返回地址出栈
0376 64
8 E7 FF FF FF path sp_inc, csp ;
0376 64
0 EF F7 F2 FF path sp, mar ;将栈指针(栈顶地址)传送到 MAR
0377 64
C EF FE F8 FF path csp, sp ;SP = SP + 1,出栈,更新栈顶
0377 64
4 EF EB F9 FF path [mar], pc ;将返回地址加载到PC
0378
650 EF EB F9 FF path [mar], pc ;将调用返回地址加载到PC,转移到调用处的下一条指令继续执行
0378
0379
654 CF FF FF FF reset upc
0379
; 出栈时,栈顶向高地址方向生长,sp+1指向新的栈顶
0380
0380
648 EF FF 72 FF path sp, csp
0381 6
58 FF FF FF FF dup 2, null
0381 6
4C E7 FF FF FF path sp_inc, csp
0382
0382
650 EF FE F8 FF path csp, sp ;SP = SP + 1,出栈,更新栈顶
0383
;=======================================================================
0383
654 CF FF FF FF reset upc
0384
0384
0385
; 填充空白指令
0385
658 FF FF FF FF dup 2, null
0386
660 FF FF FF FF dup 8, null
0386
0387
0387
;=======================================================================
0388
; shr a
0388
0389
680 EF FF D5 90 path alu_shr, a ;累加器A 进行逻辑右移,结果写回A中
0389
; 填充空白指令
0390 6
84 FF FF FF FF inc pc
0390 6
60 FF FF FF FF dup 8, null
0391
688 CF FF FF FF reset upc
0391
0392
0392
; shr a
0393 68
C FF FF FF FF dup 5, null
0393 68
0 EF FF D5 90 path alu_shr, a ;累加器A 进行逻辑右移,结果写回A中
0394
0394
684 FF FF FF FF inc pc
0395
; shl a
0395
688 CF FF FF FF reset upc
0396
6A0 EF FF D6 90 path alu_shl, a ;累加器A 进行逻辑左移,结果写回A中
0396
0397 6
A4 FF FF FF FF inc pc
0397 6
8C FF FF FF FF dup 5, null
0398
6A8 CF FF FF FF reset upc
0398
0399
0399
; shl a
0400 6A
C FF FF FF FF dup 5, null
0400 6A
0 EF FF D6 90 path alu_shl, a ;累加器A 进行逻辑左移,结果写回A中
0401
0401
6A4 FF FF FF FF inc pc
0402
; rcr a
0402
6A8 CF FF FF FF reset upc
0403
6C0 EF FF E5 90 path alu_rcr, a ;累加器A 进行循环右移,结果写回A中
0403
0404 6
C4 FF FF FF FF inc pc
0404 6
AC FF FF FF FF dup 5, null
0405
6C8 CF FF FF FF reset upc
0405
0406
0406
; rcr a
0407 6C
C FF FF FF FF dup 5, null
0407 6C
0 EF FF E5 90 path alu_rcr, a ;累加器A 进行循环右移,结果写回A中
0408
0408
6C4 FF FF FF FF inc pc
0409
; rcl a
0409
6C8 CF FF FF FF reset upc
0410
6E0 EF FF E6 90 path alu_rcl, a ;累加器A 进行循环左移,结果写回A中
0410
0411 6
E4 FF FF FF FF inc pc
0411 6
CC FF FF FF FF dup 5, null
0412
6E8 CF FF FF FF reset upc
0412
0413
6EC FF FF FF FF dup 5, null
0413
; rcl a
0414
0414
6E0 EF FF E6 90 path alu_rcl, a ;累加器A 进行循环左移,结果写回A中
0415
; nop
0415
6E4 FF FF FF FF inc pc
0416
700 FF FF FF FF inc
pc
0416
6E8 CF FF FF FF reset u
pc
0417
704 CF FF FF FF reset upc
0417
6EC FF FF FF FF dup 5, null
0418
0418
0419
708 FF FF FF FF dup 6, null
0419
; nop
0420
0420
700 FF FF FF FF inc pc
0421
; not a
0421
704 CF FF FF FF reset upc
0422
720 EF FF F4 B0 path alu_not, a ;累加器A 取反运算,结果写回A中
0422
0423 7
24 FF FF FF FF inc pc
0423 7
08 FF FF FF FF dup 6, null
0424
728 CF FF FF FF reset upc
0424
0425
0425
; not a
0426 72
C FF FF FF FF dup 5, null
0426 72
0 EF FF F4 B0 path alu_not, a ;累加器A 取反运算,结果写回A中
0427
0427
724 FF FF FF FF inc pc
0428
;=============================================================
0428
728 CF FF FF FF reset upc
0429
;子程序调用指令,双字节指令,第二个字节是调用子程序标号,该标号实质为一个地址,所指存储单元中就是被调用子程序的入口地址(起始地址)
0429
0430
; call symbo
l
0430
72C FF FF FF FF dup 5, nul
l
0431
740 FF FF FF FF inc pc ;PC+1
0431
0432
744 EF 7D F9 FF path [pc], asr ;将PC指向存储单元内容写入辅助寄存器ASR中,也就是将被调用子程序的入口地址暂存到ASR中
0432
;=============================================================
0433
748 EF FF 72 FF path sp, csp
0433
;子程序调用指令,双字节指令,第二个字节是调用子程序标号,该标号实质为一个地址,所指存储单元中就是被调用子程序的入口地址(起始地址)
0434
74C EF FF FF FF path sp_dec, csp
0434
; call symbol
0435
750 EF FE F8 FF path csp, sp ;返回地址入栈前,先将SP-1,指向新的栈顶
0435
0436
754 EF F7 F2 FF path sp, mar
0436
; 将子程序入口地址保存到辅助寄存器asr中
0437 7
58 FF FF FF FF inc pc ;PC+1,指向下一条指令,即返回地址
0437 7
40 FF FF FF FF inc pc ;PC+1
0438 7
5C ED FB F3 FF path pc, [mar] ;将PC(返回地址)入栈
0438 7
44 EF 7D F9 FF path [pc], asr ;将PC指向存储单元内容写入辅助寄存器ASR中,也就是将被调用子程序的入口地址暂存到ASR中
0439
760 EF EF F7 FF path asr, pc ;将ASR寄存器的值加载到PC,也就是将调用子程序的入口地址加载到PC,转移到子程序处执行
0439
0440
764 CF FF FF FF reset upc
0440
; pc+1,得到返回地址
0441
0441
748 FF FF FF FF inc pc ;PC+1,指向下一条指令,即返回地址
0442
768 FF FF FF FF dup 6, null
0442
0443
0443
; sp-1,为返回地址入栈分配一个新的空间,入栈时,栈顶向低地址方向生长
0444
; 填充空白指令
0444
74C EF FF 72 FF path sp, csp
0445 7
80 FF FF FF FF dup 16, null
0445 7
50 EF FF FF FF path sp_dec, csp
0446
0446
754 EF FE F8 FF path csp, sp ;返回地址入栈前,先将SP-1,指向新的栈顶
0447
;===============================================================
0447
0448 ;
中断返回指令,可参照子程序调用返回指令,出
栈
0448 ;
返回地址入
栈
0449
; iret
0449
758 EF F7 F2 FF path sp, mar
0450 7
C0 EF F7 F2 FF path sp, mar
0450 7
5C ED FB F3 FF path pc, [mar] ;将PC(返回地址)入栈
0451
7C4 EF FF 72 FF path sp, csp
0451
0452
7C8 E7 FF FF FF path sp_inc, csp
0452
; 将调用子程序入库地址加载到PC,实现子程序调用
0453 7
CC EF FE F8 FF path csp, sp
0453 7
60 EF EF F7 FF path asr, pc ;将ASR寄存器的值加载到PC,也就是将调用子程序的入口地址加载到PC,转移到子程序处执行
0454 7
D0 EF EB F9 FF path [mar],
pc
0454 7
64 CF FF FF FF reset u
pc
0455
7D4 CF FF FF FF reset upc
0455
0456
0456
768 FF FF FF FF dup 6, null
0457
7D8 FF FF FF FF dup 2, null
0457
0458
0458
; 填充空白指令
0459
0459
780 FF FF FF FF dup 16, null
0460
0460
0461 ;===============================================================
0462 ;中断返回指令,可参照子程序调用返回指令,出栈
0463 ; iret
0464 7C0 EF F7 F2 FF path sp, mar
0465 7C4 EF FF 72 FF path sp, csp
0466 7C8 E7 FF FF FF path sp_inc, csp
0467 7CC EF FE F8 FF path csp, sp
0468 7D0 EF EB F9 FF path [mar], pc
0469 7D4 CF FF FF FF reset upc
0470
0471 7D8 FF FF FF FF dup 2, null
0472
0473
0474
rom.masm
浏览文件 @
f4ee406d
...
@@ -371,11 +371,15 @@ dup 16, null
...
@@ -371,11 +371,15 @@ dup 16, null
;=======================================================================
;=======================================================================
;子程序调用返回指令
;子程序调用返回指令
; ret
; ret
; 返回地址出栈
path sp, mar ;将栈指针(栈顶地址)传送到 MAR
path sp, mar ;将栈指针(栈顶地址)传送到 MAR
path sp, csp ;
path [mar], pc ;将返回地址加载到PC
path sp_inc, csp ;
; 出栈时,栈顶向高地址方向生长,sp+1指向新的栈顶
path sp, csp
path sp_inc, csp
path csp, sp ;SP = SP + 1,出栈,更新栈顶
path csp, sp ;SP = SP + 1,出栈,更新栈顶
path [mar], pc ;将调用返回地址加载到PC,转移到调用处的下一条指令继续执行
reset upc
reset upc
dup 2, null
dup 2, null
...
@@ -428,14 +432,24 @@ dup 5, null
...
@@ -428,14 +432,24 @@ dup 5, null
;=============================================================
;=============================================================
;子程序调用指令,双字节指令,第二个字节是调用子程序标号,该标号实质为一个地址,所指存储单元中就是被调用子程序的入口地址(起始地址)
;子程序调用指令,双字节指令,第二个字节是调用子程序标号,该标号实质为一个地址,所指存储单元中就是被调用子程序的入口地址(起始地址)
; call symbol
; call symbol
; 将子程序入口地址保存到辅助寄存器asr中
inc pc ;PC+1
inc pc ;PC+1
path [pc], asr ;将PC指向存储单元内容写入辅助寄存器ASR中,也就是将被调用子程序的入口地址暂存到ASR中
path [pc], asr ;将PC指向存储单元内容写入辅助寄存器ASR中,也就是将被调用子程序的入口地址暂存到ASR中
; pc+1,得到返回地址
inc pc ;PC+1,指向下一条指令,即返回地址
; sp-1,为返回地址入栈分配一个新的空间,入栈时,栈顶向低地址方向生长
path sp, csp
path sp, csp
path sp_dec, csp
path sp_dec, csp
path csp, sp ;返回地址入栈前,先将SP-1,指向新的栈顶
path csp, sp ;返回地址入栈前,先将SP-1,指向新的栈顶
; 返回地址入栈
path sp, mar
path sp, mar
inc pc ;PC+1,指向下一条指令,即返回地址
path pc, [mar] ;将PC(返回地址)入栈
path pc, [mar] ;将PC(返回地址)入栈
; 将调用子程序入库地址加载到PC,实现子程序调用
path asr, pc ;将ASR寄存器的值加载到PC,也就是将调用子程序的入口地址加载到PC,转移到子程序处执行
path asr, pc ;将ASR寄存器的值加载到PC,也就是将调用子程序的入口地址加载到PC,转移到子程序处执行
reset upc
reset upc
...
...
rom.rxm
浏览文件 @
f4ee406d
没有这种文件类型的预览
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论