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

Merge branch 'hdr' into 'master'

Hdr See merge request !3
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob 。
没有这种文件类型的预览
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览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 人 到此讨论。请谨慎行事。
请先完成此评论的编辑!
请 注册 或者 后发表评论