實驗四 中斷實驗

一、實驗目的 ??????????????

掌握中斷服務程序的編寫。

二、實驗電路

三、實驗內容

1.實驗用PC機內部的中斷控制器8259A,中斷源用TPC-ZK實驗箱上的單脈沖電路,將單脈沖電路的輸出接中斷請求信號IRQ,每按一次單脈沖按鍵產生一次中斷請求。

2.編寫程序,要求每次主機響應外中斷IRQ時,顯示"THIS IS A 8259A INTERRUPT !",在鍵盤上敲任意一個鍵,程序退出。

四、編程提示

1.本實驗用TPC-ZK實驗系統的USB接口,USB接口實驗箱固定接到了PC機主片中斷控制器8259的IRQ3上,即進行中斷實驗時,所用中斷類型號為0BH,編程時要根據0BH中斷類型號設置中斷矢量。

2. PC機主片中斷控制器8259的地址為20H、21H。主片8259中斷屏蔽寄存器IMR對應位(IRQ3)要清零(允許中斷):

IN AL,21H

AND AL,11110111B

OUT 21H,AL

中斷服務結束前要使用中斷結束命令:

MOV AL,20H

OUT 20H,AL

中斷結束返回DOS時將IMR對應位置1,屏蔽中斷。

IN AL,21H

OR AL,08H

OUT 21H,AL

五、實驗程序(必須加注釋)和結果

IRO_MASK EQU 11110111B ; 中斷屏蔽碼,二進制表示為11110111,用于設置8259A中斷控制器的中斷屏蔽寄存器

DATAS SEGMENT

??? MS1 DB 0DH,0AH,'THIS IS A 8259A INTERRUPT!',0DH,0AH,'$' ; 定義字符串,用于顯示中斷信息

??? MS2 DB 0DH,0AH,'PRESS ANY KEY TO EXIT!',0DH,0AH,'$' ; 定義字符串,用于提示用戶按任意鍵退出

??? MS3 DB 0DH,0AH,'guozhihong2022900624 AND mingruizhao2022900625',0DH,0AH,'$' ; 定義字符串,可能是作者信息

??? CSREG DW? ; 用于存儲舊的中斷向量段地址

??? IPREG DW? ; 用于存儲舊的中斷向量偏移地址

DATAS ENDS

STACKS SEGMENT

??? ; 此處輸入堆棧段代碼

STACKS ENDS

CODES SEGMENT

??? ASSUME CS:CODES,DS:DATAS,SS:STACKS

START:

??? MOV ax,DATAS

??? MOV ds,AX

???

??? MOV dx,OFFSET MS3

??? MOV ah,09H

??? INT 21H ; 顯示作者信息

???

??? MOV DX,OFFSET MS1

??? MOV ah,09H

??? INT 21H ; 顯示中斷信息

???

??? CLI ; 關中斷,禁止其他中斷發生

??? MOV ax,350bh

??? INT 21h ; 獲取舊的中斷向量

??? MOV ax,es

??? MOV CSREG,ax ; 存儲舊的中斷向量段地址

??? MOV IPREG,bx ; 存儲舊的中斷向量偏移地址

??? MOV ax,cs

??? mov ds,ax

??? MOV dx,offset INT_PROC

??? MOV ax,250bh

??? INT 21h ; 設置新的中斷向量

??? IN al,21h

??? AND al,11110111b

??? OUT 21h,al ; 設置8259A中斷控制器的中斷屏蔽寄存器

??? MOV dx,offset MS2

??? MOV ah,09h

??? INT 21h ; 顯示提示信息

??? STI ; 開中斷,允許其他中斷發生

AG:

??? MOV ah,1

??? INT 16h

??? JZ AG ; 等待用戶按鍵

EXIT:

??? CLI ; 關中斷

??? MOV dx,IPREG

??? MOV ax,CSREG

??? MOV ds,ax

??? MOV ax,250bh

??? INT 21h ; 恢復舊的中斷向量

??? IN al,21h

??? or al,00001000b

??? OUT 21h,al ; 恢復8259A中斷控制器的中斷屏蔽寄存器

??? MOV ax,4c00h

??? INT 21h ; 程序結束,返回操作系統

INT_PROC PROC

??? PUSH ax

??? PUSH dx

??? PUSH ds

??? MOV ax,DATAS

??? MOV ds,ax

??? MOV dx,offset MS1

??? MOV ah,09h

??? INT 21h ; 顯示中斷信息

??? MOV al,20h

??? OUT 20h,al ; 發送中斷結束命令給8259A中斷控制器

??? POP ds

??? POP dx

??? POP ax

??? IRET ; 中斷返回

INT_PROC ENDP

CODES ENDS

END START

代碼注釋說明

IRO_MASK EQU 11110111B:定義了一個常量,用于設置8259A中斷控制器的中斷屏蔽寄存器。

DATAS SEGMENT:定義了數據段,包含了要顯示的字符串和用于存儲舊中斷向量的變量。

STACKS SEGMENT:定義了堆棧段,但代碼中沒有具體內容。

CODES SEGMENT:定義了代碼段,包含了程序的主要邏輯。

START:程序的入口點,包含了初始化和中斷處理的代碼。

INT_PROC PROC:定義了中斷處理程序,用于處理8259A中斷控制器產生的中斷。

CODES ENDS:代碼段結束。

END START:程序結束。

代碼執行流程

程序開始,顯示作者信息。

顯示中斷信息。

保存舊的中斷向量。

設置新的中斷向量,指向自定義的中斷處理程序。

設置8259A中斷控制器的中斷屏蔽寄存器。

顯示提示信息,等待用戶按鍵。

用戶按鍵后,恢復舊的中斷向量。

恢復8259A中斷控制器的中斷屏蔽寄存器。

程序結束,返回操作系統。

代碼中的關鍵操作

CLI和STI:用于關閉和開啟中斷。

INT 21H:用于調用DOS系統功能,如顯示字符串和獲取/設置中斷向量。

IN和OUT:用于與8259A中斷控制器進行數據傳輸。

PUSH和POP:用于保存和恢復寄存器的值。

IRET:用于從中斷處理程序返回。

代碼中的數據結構和變量

MS1、MS2和MS3:用于存儲要顯示的字符串。

CSREG和IPREG:用于存儲舊的中斷向量段地址和偏移地址。

代碼中的函數和子程序

INT_PROC:中斷處理程序,用于處理8259A中斷控制器產生的中斷。

代碼中的輸入輸出操作

MOV dx,OFFSET MS1和MOV ah,09H:用于顯示字符串。

IN al,21h和OUT 21h,al:用于與8259A中斷控制器進行數據傳輸。

代碼中的條件判斷和循環結構

JZ AG:用于等待用戶按鍵。

代碼中的異常處理

代碼中沒有顯式的異常處理邏輯,但通過中斷處理程序可以處理8259A中斷控制器產生的中斷。

IRQ

二、實驗電路

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77153.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77153.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77153.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

React 項目src文件結構

SCSS 組件庫 SCSS為預處理器 支持除原生CSS外的其他語句 別名路徑 在項目下的第一級目錄就加入craco.config.js文件并且修改packpage.js 中的部分 // 擴展webpage的配置const path require(path)module.exports {// exports配置webpack:{// 配置別名alias:{:path.resolve(__d…

Cursor入門教程-JetBrains過度向

Cursor使用筆記 **前置:**之前博主使用的是JetBrains的IDE,VSCode使用比較少,所以會盡量朝著JetBrains的使用習慣及樣式去調整。 一、設置語言為中文 如果剛上手Cursor,那么肯定對Cursor中的眾多選項配置項不熟悉,這…

Linux上位機開發實踐(SoC和MCU的差異)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】 soc一般是指跑linux的芯片,而mcu默認是跑rtos的芯片,兩者在基本原理方面其實差異不大。只不過,前者由于性能的原…

離線導出和安裝Python庫

詳細介紹:離線導出和安裝Python庫 常用命令: 生成requirement.txt文件 pip freeze > requirement.txt離線批量下載庫 pip download -d packages -r requirement.txt離線批量安裝庫 pip install --no-index --find-links./ -r requirement.txt

基于Vue Node.js的電影售票網站的設計與實現(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 互聯網技術的成熟和普及,勢必會給人們的生活方式帶來不同程度的改變。越來越多的經營模式中都少不了線上運營,互聯網正強力推動著社會和經濟發展。國人對民族文化的自信和不同文化的包容,再加上電影行業的發展,如此繁榮吸引…

利用 Python 和 AI 技術創作獨特的圖像藝術作品

1. 項目目標 生成藝術作品:利用 AI 模型(如 Stable Diffusion)生成具有藝術風格的圖像。自定義風格:通過文本提示(prompt)控制圖像的藝術風格(如賽博朋克、印象派、超現實主義等)。…

XR技術賦能藝術展演|我的宇宙推動東方美學體驗化

本次廣州展覽現場引入我的宇宙XR體驗模塊,通過空間計算與動作捕捉技術,讓觀眾在潮玩藝術氛圍中體驗虛擬互動,打造“看得懂也玩得動”的展演新場景。 作為科技與文化融合的推動者,我的宇宙正在以“體驗科技”為媒介,為潮…

接口的集成測試步驟

一、集成測試是什么 ?接口的集成測試?是指在軟件開發過程中,將各個模塊或組件按照設計要求組合在一起,并測試它們之間的接口是否能夠正確交互和協同工作的過程。集成測試是軟件開發中的一個重要階段,通常在單元測試之后進行,目的…

上門服務 APP 30 億營收商業模式在烏干達的技術賦能與實踐

不久前,非洲烏干達出現黑人女技師提供上門足療服務的消息引發關注。據了解,當地一次40分鐘的上門按摩服務僅需約40元人民幣,價格僅為國內同類服務的十分之一。這一現象折射出全球健康服務行業正在經歷的數字化轉型浪潮。 國內領先的上門服務平…

go語言學習筆記:gin + gorm + mysql 用戶增刪改查案例入門

大家好,我是此林。 Golang 語言現在已經成為了編程的趨勢,畢竟是大廠背書嘛,Google 研發的。 目前很多云原生項目都是基于 go 來編寫的,比如: Kubernetes (K8s)? 容器編排系統, Docker? 容器化技術&…

探索亮數據Web Unlocker API:讓谷歌學術網頁科研數據 “觸手可及”

本文目錄 一、引言二、Web Unlocker API 功能亮點三、Web Unlocker API 實戰1.配置網頁解鎖器2.定位相關數據3.編寫代碼 四、Web Scraper API技術亮點 五、SERP API技術亮點 六、總結 一、引言 網頁數據宛如一座蘊藏著無限價值的寶庫,無論是企業洞察市場動態、制定…

SpringBoot整合POI實現Excel文件的導出與導入

使用 Apache POI 操作 Excel文件,系列文章: 《SpringBoot整合POI實現Excel文件的導出與導入》 《SpringMVC實現文件的上傳與下載》 《C#使用NPOI導出Excel文件》 《NPOI使用手冊》 1、Apache POI 的介紹 Apache POI 是一個基于 Java 的開源庫,專為讀寫 Microsoft Office 格…

構建用戶友好的記賬體驗 - LedgerX交互設計與性能優化實踐

構建用戶友好的記賬體驗 - LedgerX交互設計與性能優化實踐 發布日期: 2025-04-16 引言 在財務管理應用領域,技術實力固然重要,但最終決定用戶留存的往往是日常使用體驗。本文作為LedgerX技術博客的第二篇,將深入探討我們如何通過精心的交互…

如何用AI輔助軟件產品原型設計及工具推薦

以下是針對軟件產品原型設計的 AI輔助工具推薦,涵蓋國內外主流工具,結合功能特點、優劣勢及適用場景分析,并標注是否為國內軟件及付費情況: 一、國內工具推薦 1. 墨刀AI(MockingBot AI) 特點:…

MySQL的MVCC機制詳解

1. 什么是MVCC? MVCC(Multi-Version Concurrency Control,多版本并發控制)是數據庫系統中用于實現并發控制的一種技術。它通過保存數據在某個時間點的快照來實現,使得在同一個數據行上可以同時存在多個版本&#xff0…

C語言數字圖像處理---2.31統計濾波器

本文介紹空域濾波器中的一種:統計濾波器 [定義與算法] 統計濾波(Statistic Filter)定義:基于圖像處理中的鄰域統計方法,對鄰域內的像素信息進行統計,如基于均值和方差的信息,用于平滑或去噪圖像,同時保留邊緣信息。 算法步驟如下: 統計濾波器的優點和缺點主要包…

計算機視覺相機模型與標定:如何讓計算機“看懂”三維世界?

計算機視覺相機模型與標定:如何讓計算機“看懂”三維世界? 一、前言二、相機模型基礎?2.1 針孔相機模型?2.1.1 模型原理?2.1.2 代碼示例?2.2 透視變換與相機內參?2.2.1 透視變換矩陣?2.2.2 內參矩陣的作用?2.3 相機外參?2.3.1 世界坐標系與相機坐標系的轉換?2.3.2 外…

DeepSpeed ZeRO++:降低4倍網絡通信,顯著提高大模型及類ChatGPT模型訓練效率

圖1: DeepSpeed ZeRO 簡介 大型 AI 模型正在改變數字世界。基于大型語言模型 (LLM)的 Turing-NLG、ChatGPT 和 GPT-4 等生成語言模型用途廣泛,能夠執行摘要、代碼生成和翻譯等任務。 同樣,DALLE、Microsoft Designer 和 Bing Image Creator 等大型多模…

Seq2Seq - 編碼器(Encoder)和解碼器(Decoder)

本節實現一個簡單的 Seq2Seq(Sequence to Sequence)模型 的編碼器(Encoder)和解碼器(Decoder)部分。 重點把握Seq2Seq 模型的整體工作流程 理解編碼器(Encoder)和解碼器&#xff08…

Spring Boot集成MinIO的詳細步驟

1. 安裝MinIO 使用Docker部署MinIO 拉取MinIO鏡像: docker pull minio/minio 這將從Docker Hub中獲取最新的MinIO鏡像。 創建目錄: mkdir -p /home/minio/config mkdir -p /home/minio/data 這些目錄將用于持久化MinIO的數據和配置文件 創建MinIO…