提交 90b223e4 创建 作者: 李川's avatar 李川 提交者: 李川

修改中断控制器原理图

上级 0dd78ffa
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
没有这种文件类型的预览
差异被折叠。
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
......@@ -8,45 +8,24 @@ mov sp, 0xf8 ;初始化堆栈指针寄存器
;安装中断向量,安装中断的过程是将各个中断服务程序的入口地址(首地址)保存到对应中断向量指向的存储单元中。
;中断向量本身是一个地址,它指向一个存储单元,该存储单元保存的就是某个中断服务程序的入口地址(起始地址)
;设中断向量列表的首地址为0xf8,即第一个中断向量是存储单元0xf8
;0号中断向量0xf8,0xf8中保存0号中断服务程序的入口地址
;安装0号中断向量0xf8,0xf8中保存0号中断服务程序的入口地址
lea a, int_0
mov r0, 0xf8
mov [r0], a
;1号中断向量0xf9,0xf9中保存1号中断服务程序的入口地址
lea a, int_1
mov r0, 0xf9
mov [r0], a
;2号中断向量0xfa,0xfa中保存2号中断服务程序的入口地址
lea a, int_2
mov r0, 0xfa
mov [r0], a
;3号中断向量0xfb,0xfb中保存3号中断服务程序的入口地址
;安装3号中断向量0xfb,0xfb中保存3号中断服务程序的入口地址
lea a, int_3
mov r0, 0xfb
mov [r0], a
;4号中断向量0xfc,0xfc中保存4号中断服务程序的入口地址
lea a, int_4
mov r0, 0xfc
mov [r0], a
;5号中断向量0xfd,0xfd中保存5号中断服务程序的入口地址
;安装5号中断向量0xfd,0xfd中保存5号中断服务程序的入口地址
lea a, int_5
mov r0, 0xfd
mov [r0], a
;6号中断向量0xfe,0xfe中保存6号中断服务程序的入口地址
lea a, int_6
mov r0, 0xfe
mov [r0], a
;7号中断向量0xff,0xff中保存7号中断服务程序的入口地址
lea a, int_7
mov r0, 0xff
mov [r0], a
;=======================================================
;主程序代码
......@@ -66,48 +45,21 @@ jmp LOOPC
int_0:
mov a, 0x10
adc a, -1
ret
iret
;1号中断的服务程序
int_1:
mov a, 0x11
sub a, -1
ret
;2号中断的服务程序
int_2:
mov a, 0x12
and a, r0
ret
;3号中断的服务程序
int_3:
mov a, 0x13
or a, [r0]
ret
sbb a, -1
iret
;4号中断的服务程序
int_4:
mov r1, 2
mov a, 0
adc a, r1
ret
;5号中断的服务程序
int_5:
mov r2, 3
mov a, 1
and a, r2
ret
;6号中断的服务程序
int_6:
mov a, 2
sbb a, 3
ret
;7号中断的服务程序
int_7:
mov a, 2
shl a
ret
\ No newline at end of file
iret
没有这种文件类型的预览
......@@ -8,106 +8,58 @@
0008 ;安装中断向量,安装中断的过程是将各个中断服务程序的入口地址(首地址)保存到对应中断向量指向的存储单元中。
0009 ;中断向量本身是一个地址,它指向一个存储单元,该存储单元保存的就是某个中断服务程序的入口地址(起始地址)
0010 ;设中断向量列表的首地址为0xf8,即第一个中断向量是存储单元0xf8
0011 ;0号中断向量0xf8,0xf8中保存0号中断服务程序的入口地址
0012 02 98 31 lea a, int_0
0013 04 8C F8 mov r0, 0xf8
0014 06 84 mov [r0], a
0015
0016 ;1号中断向量0xf9,0xf9中保存1号中断服务程序的入口地址
0017 07 98 36 lea a, int_1
0018 09 8C F9 mov r0, 0xf9
0019 0B 84 mov [r0], a
0020
0021 ;2号中断向量0xfa,0xfa中保存2号中断服务程序的入口地址
0022 0C 98 3B lea a, int_2
0023 0E 8C FA mov r0, 0xfa
0024 10 84 mov [r0], a
0025
0026 ;3号中断向量0xfb,0xfb中保存3号中断服务程序的入口地址
0027 11 98 3F lea a, int_3
0028 13 8C FB mov r0, 0xfb
0029 15 84 mov [r0], a
0030
0031 ;4号中断向量0xfc,0xfc中保存4号中断服务程序的入口地址
0032 16 98 43 lea a, int_4
0033 18 8C FC mov r0, 0xfc
0034 1A 84 mov [r0], a
0035
0036 ;5号中断向量0xfd,0xfd中保存5号中断服务程序的入口地址
0037 1B 98 49 lea a, int_5
0038 1D 8C FD mov r0, 0xfd
0039 1F 84 mov [r0], a
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 ;6号中断向量0xfe,0xfe中保存6号中断服务程序的入口地址
0042 20 98 4F lea a, int_6
0043 22 8C FE mov r0, 0xfe
0044 24 84 mov [r0], a
0045
0046 ;7号中断向量0xff,0xff中保存7号中断服务程序的入口地址
0047 25 98 54 lea a, int_7
0048 27 8C FF mov r0, 0xff
0049 29 84 mov [r0], a
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 ;=======================================================
0052 ;主程序代码
0053
0054 2A 7C FF mov a, -1
0055
0056 LOOPC:
0057 2C 8C 01 mov r0, 1
0058 2E 10 add a, r0
0059
0060 2F AC 2C jmp LOOPC
0061
0062
0063 ;=======================================================
0064 ;中断服务程序
0065 ;0号中断的服务程序
0066 int_0:
0067 31 7C 10 mov a, 0x10
0068 33 2C FF adc a, -1
0069 35 C8 ret
0070
0071 ;1号中断的服务程序
0072 int_1:
0073 36 7C 11 mov a, 0x11
0074 38 3C FF sub a, -1
0075 3A C8 ret
0076
0077 ;2号中断的服务程序
0078 int_2:
0079 3B 7C 12 mov a, 0x12
0080 3D 50 and a, r0
0081 3E C8 ret
0082
0083 ;3号中断的服务程序
0084 int_3:
0085 3F 7C 13 mov a, 0x13
0086 41 64 or a, [r0]
0087 42 C8 ret
0088
0089 ;4号中断的服务程序
0090 int_4:
0091 43 8D 02 mov r1, 2
0092 45 7C 00 mov a, 0
0093 47 21 adc a, r1
0094 48 C8 ret
0095
0096 ;5号中断的服务程序
0097 int_5:
0098 49 8E 03 mov r2, 3
0099 4B 7C 01 mov a, 1
0100 4D 52 and a, r2
0101 4E C8 ret
0102
0103 ;6号中断的服务程序
0104 int_6:
0105 4F 7C 02 mov a, 2
0106 51 4C 03 sbb a, 3
0107 53 C8 ret
0108
0109 ;7号中断的服务程序
0110 int_7:
0111 54 7C 02 mov a, 2
0112 56 D4 shl a
0113 57 C8 ret
\ No newline at end of file
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
没有这种文件类型的预览
没有这种文件类型的预览
差异被折叠。
......@@ -423,19 +423,16 @@ dup 5, null
dup 16, null
;=====================================================================
;硬中断调用返回指令。
;硬中断返回就是出栈过程,将栈顶指针sp指向的存储单元内的返回地址加载到PC,实现中断返回
;与此同时,sp加1,指向新的栈顶
;子程序调用返回指令
; ret
path sp, mar ;将栈顶指针SP传入地址寄存器MAR,也就是将中断返回地址传入mar
path sp, cst ;sp传入cst计数器
path sp_inc, cst ;cst计数器加1
path cst, sp ;将cst减1后的结果写入sp,也就是出栈后,sp减1,指向新的栈顶
path [mar], pc ;将mar寄存器指向存储单元的内容作为地址传入PC,实现中断返回
eoi ;清除已经服务完的硬中断标志
path sp, mar ;将堆栈指针(栈顶地址)传送到 MAR
path sp, cst ;
path sp_inc, cst ;
path cst, sp ;SP = SP + 1,出栈,更新栈顶
path [mar], pc ;将调用返回地址加载到PC,转移到调用处的下一条指令继续执行
reset upc
dup 1, null
dup 2, null
;=====================================================================
; 填充空白指令
......@@ -523,16 +520,20 @@ reset upc
dup 6, null
;======================================================================
;中断返回指令
;中断返回指令
; iret
path sp, mar
path sp, cst
path sp_inc, cst
path cst, sp
path [mar], pc
;中断返回就是出栈过程,将栈顶指针sp指向的存储单元内的返回地址加载到PC,实现中断返回
;与此同时,sp加1,指向新的栈顶
; iret
path sp, mar ;将栈顶指针SP传入地址寄存器MAR,也就是将中断返回地址传入mar
path sp, cst ;sp传入cst计数器
path sp_inc, cst ;cst计数器加1
path cst, sp ;将cst减1后的结果写入sp,也就是出栈后,sp减1,指向新的栈顶
path [mar], pc ;将mar寄存器指向存储单元的内容作为地址传入PC,实现中断返回
eoi ;清除已经服务完的硬中断标志
reset upc
dup 2, null
dup 1, null
没有这种文件类型的预览
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论