
简介本资源是一份高分《计算机组成原理》课程中断实验的完整实践报告面向高校计算机类专业本科生及嵌入式初学者聚焦中断机制这一核心硬件-软件协同知识点解决理论抽象、实操缺位导致的理解困难问题。压缩包共19个文件约150KB包含Keil工程文件uvproj、uvopt、plg等、C语言源码zhongduan.c、汇编启动文件STARTUP.A51、仿真电路图DSN、DBK、编译输出文件hex、lst、obj及配套Word实验报告实验四.docx覆盖从代码编写、工程构建、Proteus仿真到原理分析的全流程。已有3148人学习下载资源结构完整、注释清晰特别提供中断请求/响应/处理/返回四阶段仿真图与可运行C源码便于读者直观理解CPU状态切换、中断向量表配置与中断屏蔽机制是夯实系统底层认知、衔接操作系统与驱动开发的重要实践材料。1. 中断实验不是“插个线就跑通”——它暴露的是你对CPU响应机制的真实理解程度很多同学交出的《计算机组成原理实验报告——中断实验》看起来逻辑完整、波形正确、结果有截图但老师一眼就能看出没真正摸过中断控制器的手动配置没在寄存器级调试过向量偏移更没亲手验证过中断嵌套时堆栈如何压入/恢复。这不是代码写得漂不漂亮的问题而是你是否清楚当一个外部信号比如按键按下到达CPU引脚到最终执行ISR函数之间究竟发生了多少次硬件握手、状态切换和寄存器搬运。本报告聚焦真实可复现的中断实验全流程——从8086/8088最小系统或FPGA仿真平台如LogisimMIPS模拟器、QuartusDE2-115、或现代常用ARM Cortex-M3/M4开发板出发用纯汇编或裸机C语言操作中断向量表、IMR中断屏蔽寄存器、IRR中断请求寄存器和ISR中断服务寄存器不依赖任何RTOS封装。适合正在做华科、广工、交大等高校计算机组成原理课程设计的学生也适合想补足底层中断认知断层的嵌入式初学者。文中所有命令、寄存器地址、汇编指令、hex值转换与验证步骤均按真实实验环境校准。2. 中断控制器选型与硬件连接为什么8259A仍是教学首选而现代MCU要手动映射NVIC2.1 教学场景下8259A不可替代的三大理由当前主流高校《计算机组成原理》实验仍以8086/8088最小系统为载体其配套中断控制器几乎全部采用Intel 8259A。这不是技术落后而是教学必要性决定的可观察性高8259A有明确的ICW1–ICW4初始化命令字每个均为1字节学生能逐字节写入并用逻辑分析仪捕获总线信号状态透明IRR中断请求寄存器、IMR中断屏蔽寄存器、ISR中断服务寄存器均为8位并行寄存器可通过IN指令直接读取便于验证中断挂起、屏蔽、响应三态向量生成直观8259A将中断类型号Type Number通过数据总线送入CPU该号码直接对应中断向量表中偏移地址Type × 4学生可手算INT 08h → 0x0020并反查IDT内容。提示若使用STM32F103C8T6等现代MCU做同类实验必须绕过HAL库直接操作NVIC_ISER、NVIC_ICER、NVIC_IPR等寄存器并手动设置向量表基址VTOR。这虽更贴近工业实践但对组成原理初学者易造成“中断在哪被触发”的认知混淆——因为NVIC已将中断号、优先级、使能状态全部抽象化丢失了8259A中IRR→ISR→EOI的物理流水线感。2.2 硬件连接关键点DIP开关、跳线与电平匹配必须实测以典型80868259A实验箱为例中断源常为拨码开关或独立按键需注意三处易错接线INT引脚直连CPU8259A的INT输出必须接到8086的INTR引脚非NMI且需外接上拉电阻通常10kΩCAS0–CAS2级联信号悬空处理单片8259A工作时CAS0–CAS2必须全接高电平VCC或通过DIP开关置1否则芯片拒绝响应数据总线方向控制8259A的D0–D7需经74LS245双向缓冲器连接CPU数据总线其DIR引脚由CPU的IOR/IOW信号经逻辑门控制——若方向错误IN AL, 20H将读回0xFF而非真实IRR值。验证方法用万用表测量INT引脚在按键按下瞬间是否从高电平5V跌落至低电平0.8V持续时间应≥100ns若无跌落检查SP/EN引脚是否接地单片模式必须接地。2.3 初始化命令字ICW1–ICW4的hex值与写入顺序不可颠倒8259A必须按严格顺序写入4个初始化命令字任意一步错误将导致中断完全失效。各命令字含义及典型hex值如下以主片、边沿触发、单片、ICW4需写入为例命令字hex值含义说明写入端口关键位说明ICW10x11边沿触发、需ICW4、单片、调用ICW40x20D41ICW4存在D31单片D01边沿触发ICW20x08中断类型号起始地址INT8–INT150x21主片设为0x08则INT0对应0x0000INT8对应0x0020ICW30x00单片模式无需级联写00x21若为从片此处写从片连主片的IRQ编号如IRQ2→0x02ICW40x018086模式、非缓冲、自动EOI、非特殊全嵌套0x21D018086模式D10非缓冲D31自动EOI写入代码8086汇编; 初始化8259A主片 MOV AL, 0x11 ; ICW1: 边沿触发需ICW4单片 OUT 0x20, AL ; 写入主片命令端口 MOV AL, 0x08 ; ICW2: 类型号起始为8 OUT 0x21, AL ; 写入主片数据端口 MOV AL, 0x00 ; ICW3: 单片写0 OUT 0x21, AL MOV AL, 0x01 ; ICW4: 8086模式自动EOI OUT 0x21, AL注意ICW1后必须立即写ICW2中间不能插入其他I/O操作若写入后IN AL, 0x20读回0xFF说明8259A未进入初始化状态检查A0地址线是否接错ICW1写0x20其余写0x21。3. 中断向量表手工构建与ISR编写从hex地址计算到堆栈现场保护3.1 手动计算中断向量地址为什么INT 09h对应0x0024而不是0x00208086中断向量表位于内存0x00000–0x003FF每个中断占用4字节低字IP高字CS。类型号n对应的物理地址为n × 4。因此INT 08h定时器→0x08 × 4 0x20→ 地址0x00020处存IP0x00022处存CSINT 09h键盘→0x09 × 4 0x24→ 地址0x00024处存IP0x00026处存CS。常见错误学生误将INT 09h向量写入0x0020导致CPU执行错误代码。正确做法是用DEBUG或直接内存写入工具如DEBUG -a 0:24填入目标ISR入口地址。3.2 ISR必须包含的四条核心指令与堆栈操作逻辑一个合规的中断服务程序ISR不能只写业务逻辑必须完成CPU现场保护与恢复。标准结构如下以INT 09h键盘中断为例KEY_ISR PROC FAR PUSH AX ; 保存所有可能被修改的寄存器 PUSH BX PUSH CX PUSH DX PUSH DS PUSH ES PUSH SS PUSH SP ; 保存原堆栈指针可选但推荐 ; —— 业务逻辑开始 —— IN AL, 0x60 ; 读键盘扫描码 CMP AL, 0x01 ; 检查是否ESC键扫描码0x01 JNE EXIT_ISR MOV AH, 0x4C ; DOS退出功能号 INT 0x21 ; 退出程序仅演示实际应清标志再返回 ; —— 业务逻辑结束 —— EXIT_ISR: POP SP ; 恢复堆栈指针若前面push了 POP SS POP ES POP DS POP DX POP CX POP BX POP AX IRET ; 中断返回自动恢复IP/CS及标志位 KEY_ISR ENDP提示IRET指令会从堆栈弹出IP、CS、FLAGS三个字因此PUSH顺序必须与POP严格逆序若漏掉PUSH FLAGS由CPU自动完成则IRET仍能正确返回但若ISR中修改了IF标志位需显式PUSHF/POPF。3.3 向量表安装用MOV指令直接写内存 vs 使用DOS INT 25h教学实验中推荐直接内存写入法因其暴露地址计算过程; 将KEY_ISR入口地址假设CS0x1000, IP0x0100写入INT 09h向量 MOV AX, 0x1000 ; ISR段地址 MOV ES, AX MOV DI, 0x0024 ; INT 09h向量地址 0x09*4 0x24 MOV AX, 0x0100 ; ISR偏移地址 STOSW ; 写入IP低字 MOV AX, 0x1000 ; 再写CS高字 STOSW ; 写入CS对比DOS功能调用INT 25h需设置DS:DX指向ISR地址前者让学生看清0x0024处确实存着0x0100和0x1000两个字——用逻辑分析仪抓总线可验证MOV [0024], AX产生WR信号。4. 中断响应全过程验证用hex dump追踪IRR/ISR变化与EOI时机4.1 三步定位中断卡死原因读IRR、读ISR、查EOI是否发送当按键按下后无响应不要急于重烧程序按顺序执行以下诊断读IRR确认请求是否到达IN AL, 0x20主片命令端口→ 若AL0x00说明8259A未收到中断请求检查按键电路或INT引脚电平读ISR确认是否被响应IN AL, 0x20后立即IN AL, 0x21主片数据端口→ 若AL≠0x00说明CPU已响应并置位ISR某位如AL0x02表示IRQ1被服务此时需检查ISR中是否遗漏EOI验证EOI发送在ISR末尾添加MOV AL, 0x20→OUT 0x20, AL普通EOI命令若此前AL0x02则OUT 0x20, AL后再次IN AL, 0x21应返回0x00。4.2 hex值与十进制转换实战IRR寄存器bit位与IRQ编号映射IRR是8位寄存器每位对应一个IRQ线bit0 → IRQ0定时器bit1 → IRQ1键盘bit2 → IRQ2级联从片…bit7 → IRQ7并口若IN AL, 0x20读回0x02转为二进制00000010bbit11 → 正在处理IRQ1键盘中断。此转换必须手算不可依赖在线工具——因为考试常考“IRR0x40时对应哪个IRQ”答案bit61 → IRQ6。4.3 逻辑分析仪抓取关键信号INT、IOR、IOW与地址线A0–A1真实调试必须依赖逻辑分析仪如Saleae Logic 8捕获四组信号INT确认下降沿时刻IOR/IOW判断是读IRRIOR有效时A00还是写EOIIOW有效时A00A0,A1区分8259A端口A00→命令端口0x20A01→数据端口0x21D0–D7验证写入ICW值是否为预期hex如ICW10x11。典型失败波形INT有下降沿但IOR无响应 → 说明8259A未被CPU识别检查CS片选信号是否始终为高未选中。5. 高分报告必备技巧中断嵌套演示、hex转十进制速算表与实验现象归因模板5.1 中断嵌套演示用定时器INT 08h触发键盘INT 09h的双重验证高分报告需体现对中断优先级的理解。实现方法在INT 08h定时器ISR中不发送EOI而是直接调用INT 09h指令此时CPU会先压入INT 08h现场再压入INT 09h现场形成嵌套在INT 09hISR末尾IRET后自动返回INT 08hISR继续执行最后再IRET返回主程序。验证手段在INT 08hISR开头INC BYTE PTR [CNT8]INT 09hISR开头INC BYTE PTR [CNT9]运行10秒后用DEBUG查看CNT8和CNT9值——若CNT9 CNT8说明嵌套成功键盘中断打断了定时器中断。5.2 实验报告中必须出现的hex转十进制速算表手写版避免在报告中出现“0x2032”这类基础换算应展示带推导过程的表格体现计算能力hex值二进制权重展开十进制用途说明0x08000010001×2³8ICW2起始类型号对应INT80x20001000001×2⁵32INT08h向量地址0x08×40x2032d0x40010000001×2⁶64IRR0x40 → bit61 → IRQ6软盘0xFF111111112⁷2⁶…2⁰255IMR全1 → 所有中断被屏蔽提示考试常考“若ICW20x30INT10h向量地址是多少”解法0x30 0x10 0x40因INT10h比起始号高20x1016d0x10h→0x40 × 4 0x100。5.3 实验现象归因模板让老师一眼看到你的分析深度高分报告不用长篇大论用结构化归因直击要害。例如现象“按键按下无反应”按此模板填写观察现象可能原因验证方法hex值证据结论IN AL, 0x20读回0xFF8259A未初始化或CS未选中测CS引脚电压CS高电平2.5V片选信号断路检查74LS138译码输出IN AL, 0x20读回0x00但INT有下降沿中断请求被IMR屏蔽IN AL, 0x21读IMRIMR0xFF执行MOV AL, 0xFE→OUT 0x21, AL开放IRQ1IN AL, 0x21读ISR0x02但无后续动作ISR中未发EOI导致锁死在ISR末尾加MOV AL, 0x20→OUT 0x20, ALEOI后IN AL, 0x210x00确认EOI缺失补全指令最后一行不写总结只留一个可立即执行的动作现在请打开你的实验箱用万用表量一下8259A的SP/EN引脚——如果它是浮空的立刻用杜邦线将其接地。本文还有配套的精品资源点击获取