第13章 int指令

目錄

  • 13.1 int 指令
  • 13.2 編寫供應用程序調用的中斷例程
  • 13.3 對int、iret和棧的深入理解
  • 13.4 BIOS和DOS所提供的中斷例程
  • 13.5 BIOS和DOS中斷例程的安裝過程
  • 13.6 BIOS中斷例程應用
  • 13.7 DOS中斷例程應用
  • 實驗13 編寫、應用中斷例程

????中斷信息可以來自CPU的內部和外部,當CPU的內部有需要處理的事情發生的時候,將產生需要馬上處理的中斷信息,引發中斷過程。


13.1 int 指令

int 指令的格式為:int n,n為中斷類型碼,它的功能是引發中斷過程。CPU執行int指令過程如下:
(1)取得中斷類型碼 n
(2)標志寄存器入棧,IF=0,TF=0
(3)CS、IP入棧
(4)(IP)=(n 4),(CS)=(n4+2)

????一般情況下,系統將一些具有一定功能的子程序,以中斷處理程序的方式提供給應用程序調用。 我們在編程的時候,可以用int指令調用這些子程序。當然也可以自己寫中斷處理程序給別人調用。我們可以將中斷處理程序簡稱為中斷例程。

????int 指令和call 指令的對比

intcall
都跳轉到子程序執行子程序是中斷處理程序,簡稱為中斷例程常見的子程序
如何得到子程序入口地址根據中斷類型碼查找中斷向量表根據機器碼中的位移或CS IP或保存在寄存器、內存中的CS IP
跳轉到子程序前要保存、設置哪些內容保存標記寄存器、TF=0、IF=0,然后保存CS IP只要保存IP或CS IP
保存在哪兒保存在棧中保存在棧中
如何返回通常用iret指令返回用ret或retf指令返回

????int指令的最終功能和call指令相似,都是調用一段程序。上面我自己總結的對比表格比較重要。


13.2 編寫供應用程序調用的中斷例程

????int指令和iret指令的配合使用與call指令和ret指令的配合使用具有相似的思路。編寫中斷例程和編寫子程序的時候具有同樣的問題,就是要避免寄存器沖突。應該注意例程中用到的寄存器的值的保存和恢復。


????碰到程序我都要自己寫一遍,這小節第二個程序,沒看清需求就寫了,寫得比例題中更全面一點,字符串中包含非字母的字符能識別,不處理。寫完這個程序挺得意的,雖然在高手眼中很簡單。


13.3 對int、iret和棧的深入理解

????這小節的例子就是用int指令模擬其它指令,如loop指令、jmp指令。書本中的知識比較簡單,無非就是注意一下int指令對棧的操作。


????我在思考解決這小節時,總結出我的一些問題。當我遇到一個問題時,不能一眼看出解決辦法,就本能抗拒問題,擔心解決不了問題,然后帶著這種恐懼的心,不是平常心,更談不上藐視問題的心態,去解決問題,更加人為的增加了自己解決問題的難度。其實從自學開始,我碰到了很多難題,都解決了,而且幾乎都是第二天就解決了。
????我總結自己解決問題的關鍵是,遇到問題的第一天,對問題不熟悉,又想解決問題就逼迫自己去分析問題,分析的過程中對問題本身,還有問題相關的知識也就熟悉了,有些問題在分析過程中就看出問題的本質,可能當天花半小時左右就解決了,難一點的問題第二天也解決了。第二天解決的關鍵就是,第一天對問題及問題相關的知識熟悉了,發現難題不難了,就能以一種平常心去思考問題,然后發現問題的本質,結合相關知識找到問題的答案。
????我的解題過程中充滿了不自信,遇到問題不能一眼看出答案,就覺得自己不如別人,就會產生恐懼,害怕自己不如別人,為了認可自己,證明自己不比別人差,就想著趕快解決問題,這反而就失去了解決問題需要的平常心,更加難以解決問題,進一步加深了自己內心的不自信、自卑。
????我想提醒自己的是,學習到現在已經解決了很多問題了,我不是天才,是個普通人,所以遇到的問題也就是普通人能解決的問題,只需要不恐懼,以一種平常心去面對問題,就能解決。因為事實如此,我至今遇到的問題都解決了。要知道能一眼看出答案的都不能稱為問題,問題就是要先熟悉問題,然后分析問題,了解問題相關知識點,最后用一顆平常心去找出問題的答案。著什么急呢。
????第二點我害怕遇到問題,遇到問題意味著我的學習速度要降下來,總想著快點把想學的東西學完,然后把知識換成錢。
????我想提醒自己的第二點就是,知識之所以值錢,是因為學習的過程中需要停下來思考,真正值錢的就是思考的部分。如果把一本書讀一遍就掌握了知識,那知識不稀缺,也不值錢。
????我今后要做的就是,從遇到問題開始,自信的以一種平常心,去熟悉問題,分析問題,找出問題的本質,然后解決問題。不追求解題速度,追求自信從容,說不定比追求速度更快、更順利的解決問題。


13.4 BIOS和DOS所提供的中斷例程

BIOS中主要包含以下幾部分內容:
(1)硬件系統的檢測和初始化程序
(2)外部中斷和內部中斷的中斷例程
(3)用于對硬件設備進行I/O操作的中斷例程
(4)其它和硬件系統相關的中斷例程

????從操作系統的角度看,DOS的中斷例程就是操作系統向程序員提供的編程資源。 程序員在編程時可以用int指令直接調用BIOS和DOS提供的中斷例程,來完成某些工作。和硬件設備相關的DOS中斷例程中,一般都調用了BIOS的中斷例程。


????讀這小節時,我誤把書中介紹BIOS內容的內部中斷例程、外部中斷例程、對硬件設備進行IO操作的中斷例程,看成是中斷例程的分類了。糾結了很久,這里其實不強調分類,只是說明BIOS中包含的內容。如果非要分類的話,從CPU內外的角度來分,CPU內部引發的中斷,就是內部中斷/軟件中斷。包括異常(異常是CPU執行可能引發的問題);CPU外部引發的中斷叫外部中斷/硬件中斷,包括IO中斷。可以對硬件設備進行IO操作的中斷例程,內部中斷,外都中斷都有。不能看成一個分類。


13.5 BIOS和DOS中斷例程的安裝過程

????對于BIOS提供的中斷例程,只需將入口地址登記在中斷向量表即可,因為它們是固化到ROM中的程序,一直在內存中存在。


????BIOS這個軟件程序是硬件出廠時就安裝好的,是最基礎的軟件系統;DOS等操作系統終端用戶可以自己安裝或更換操作系統,相對于BIOS來說屬于后天安裝的。而且操作系統的安裝,需要有BIOS這個基本輸入輸出系統才能安裝。


13.6 BIOS中斷例程應用

????一般來說,一個供程序員調用的中斷例程中往往包含多個子程序,中斷例程內部用傳遞進來的參數決定執行哪個子程序。 BIOS和DOS提供的中斷例程,都用ah來傳遞內部子程序的編號。

int 10h中斷例程是BIOS提供的中斷例程,其中包含了多個和屏幕輸出相關的子程序。
ah=2 表示調用第10h號中斷例程的2號子程序,功能為設置光標位置,可以提供光標所在的行號、列號,和頁號作為參數
ah=9 表示調用第10h號中斷例程的9號子程序,功能為在光標位置顯示字符,可以提供要顯示的字符、顏色屬性、頁號、字符重復個數作為參數。



13.7 DOS中斷例程應用

int 21h 中斷例程是DOS提供的中斷例程,其中包含了DOS提供給程序員在編程時調用的子程序。
ah=4ch 表示調用第21h號中斷例程的4ch號子程序,功能為程序返回,可以提供返回值作為參數
ah=9 表示調用第21h號中斷例程的9號子程序,功能為在光標位置顯示字符串, 要顯示的字符串需用“$”作為結束符,可提供字符串的地址作為參數。



實驗13 編寫、應用中斷例程

前面兩個實驗,很簡單,關鍵就是第三個實驗,書中也要求我們細細體會其中的編程思想,下面是我的一些理解:
(1)本來想寫“offset不支持在數據段和棧段中使用的”,因為我看到此刻offset都只在代碼段中使用,我覺得不可能這么傻,后來查了資料,發現可以在其他段中用offset,甚至于要求就是這么寫的,這樣數據段、棧段、代碼段才能結構分明,本書后面第16章就介紹了offset在更全面的應用。
(2)某些看似可以利用循環指令的需求,循環體的規律可能不直接,我們需要創造出規律。這里類似高級語言的指針、間接指針相關知識。

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

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

相關文章

最新扣子(Coze)案例教程:全自動DeepSeek 寫影評+批量生成 + 發布飛書,提效10 倍!手把手教學,完全免費教程

👨?💻群里有同學是做影視賽道的博主,聽說最近DeepSeek這么火,咨詢能不能用DeepSeek寫影評,并整理電影數據資料,自動發布到飛書文檔,把每天的工作做成一個自動化的流程。 那今天斜杠君就為大家…

DeepSeek 提示詞:定義、作用、分類與設計原則

🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/?__c1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,精通Java編…

鳥語林-論壇系統自動化測試

文章目錄 一、自動化實施步驟1.1編寫Web測試用例1.2 編寫自動化代碼1.2.1 LoginPageTest1) 能否正確打開登錄頁面2) 點擊去注冊能否跳轉注冊頁面3) 模擬用戶登錄,輸入多組登錄測試用例 1.2.2 RegisterPageTest1) 能否成功打開注冊頁面2) 注冊測試用例3) 點擊去登錄按…

DeepSeek模型量化

技術背景 大語言模型(Large Language Model,LLM),可以通過量化(Quantization)操作來節約內存/顯存的使用,并且降低了通訊開銷,進而達到加速模型推理的效果。常見的就是把Float16的浮…

本周行情——250222

本周A股行情展望與策略 結合近期盤面特征及市場主線演化,本周A股預計延續結構性分化行情,科技成長與政策催化板塊仍是資金主戰場,但需警惕高標股分歧帶來的波動。以下是具體分析與策略建議: 1. 行情核心驅動因素 主線延續性&…

【JT/T 808協議】808 協議開發筆記 ② ( 終端注冊 | 終端注冊應答 | 字符編碼轉換網站 )

文章目錄 一、消息頭 數據1、消息頭拼接2、消息 ID 字段3、消息體屬性 字段4、終端手機號 字段5、終端流水號 字段 二、消息體 數據三、校驗碼計算四、最終計算結果五、終端注冊應答1、分解終端應答數據2、終端應答 消息體 數據 六、字符編碼轉換網站 一、消息頭 數據 1、消息頭…

使用ezuikit-js封裝一個對接攝像頭的組件

ezuikit-js 是一個基于 JavaScript 的視頻播放庫,主要用于在網頁中嵌入實時視頻流播放功能。它通常用于與支持 RTSP、RTMP、HLS 等協議的攝像頭或視頻流服務器進行交互,提供流暢的視頻播放體驗。 主要功能 多協議支持:支持 RTSP、RTMP、HLS …

一周學會Flask3 Python Web開發-flask3模塊化blueprint配置

鋒哥原創的Flask3 Python Web開發 Flask3視頻教程: 2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 我們在項目開發的時候,多多少少會劃分幾個或者幾十個業務模塊,如果把這些模塊的視圖方法都寫在app.py…

DSC數字選擇性呼叫

GMDSS Digital Selective Calling WAVECOM Decoder Online Help 12.0.0 VHF Marine GMDSS/DSC Decode & Scicos Simulation Black Cat Systems (一)DSC調制方式 DSC(Digital Selective Calling,數字選擇性呼叫&#xff0…

科普:你的筆記本電腦中有三個IP:127.0.0.1、無線網 IP 和局域網 IP;兩個域名:localhost和host.docker.internal

三個IP 你的筆記本電腦中有三個IP:127.0.0.1、無線網 IP 和局域網 IP。 在不同的場景下,需要選用不同的 IP 地址,如下為各自的特點及適用場景: 127.0.0.1(回環地址) 特點 127.0.0.1 是一個特殊的 IP 地…

《AI與NLP:開啟元宇宙社交互動新紀元》

在科技飛速發展的當下,元宇宙正從概念逐步走向現實,成為人們關注的焦點。而在元宇宙諸多令人矚目的特性中,社交互動體驗是其核心魅力之一。人工智能(AI)與自然語言處理(NLP)技術的迅猛發展&…

量化方法bitsandbytes hqq eetq區別

量化方法bitsandbytes、HQQ(Half-Quadratic Quantization)和EETQ(Efficient and Effective Ternary Quantization)在深度學習模型壓縮和加速中各有特點,以下是它們的區別: 1. bitsandbytes 概述: bitsand…

Hutool - Log:自動識別日志實現的日志門面

一、簡介 在 Java 開發中,日志記錄是一項非常重要的功能,它可以幫助開發者在開發和生產環境中監控程序的運行狀態、排查問題。然而,Java 生態系統中有多種日志實現框架,如 Log4j、Logback、JDK 自帶的日志框架等。為了在不同的項…

偽404兼容huawei生效顯示404

根據上述思考,以下是詳細的中文分步說明: --- **步驟 1:獲取目標設備的User-Agent信息** 首先,我們需要收集目標設備的User-Agent字符串,包括: 1. **iPhone設備的User-Agent**: Mozi…

github配置sshkey

使用命令生成sshkey ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 依此會要求輸入以下信息,可以使用默認值 設置保存密鑰的路徑 設置SSH密鑰密碼(備注:空內容表示不設置SSH密鑰密碼) 再次確認SSH密鑰密…

深入理解WebSocket接口:如何使用C++實現行情接口

在現代網絡應用中,實時數據傳輸變得越來越重要。通過WebSocket,我們可以建立一個持久連接,讓服務器和客戶端之間進行雙向通信。這種技術不僅可以提供更快的響應速度,還可以減少不必要的網絡流量。本文將詳細介紹如何使用C來實現We…

FFMPEG編碼容錯處理解決辦法之途徑----升級庫文件

在qt開發環境下接收網絡數據,調用ffmpeg解碼播放視頻,出現閃屏現象,具體現象可以使用操作系統自帶的ffplay播放器播放原始視頻流可復現;而使用操作系統自帶的mpv播放器播放視頻則不會出現閃屏;閃屏時會報Could not fin…

什么是超越編程(逾編程)(元編程?)

超越編程(逾編程)(元編程?)(meta-programming) 目錄 1. meta- 的詞源 2. 逾編程(meta-programming) 的直實含義 2.1 定義 2.2 說明 3. 翻譯成“元編程”應該是一種錯誤 1. meta- 的詞源 這是一個源自希臘語的構詞元素,其有三種含義&#xff…

基于Martin的全國基礎底圖實現

概述 前面有文章基于Martin實現MapboxGL自定義底圖分享了Martin的使用,本文使用網絡收集的數據實現了全國基礎數據的收集和基礎底圖。 實現后效果 實現 1. 數據準備 實例中包含如下數據: 邊界線和九段線數據省邊界面數據省會城市點數據市邊界面數據…

新版Tomcat MySQL IDEA 安裝配置過程遇到的問題

一、IDEA閃退 打不開了 IDEA環境變量路徑不對 二、Tomcat 一閃而過 主要是JDK環境變量不對 三、MySQL 重新安裝、是否備份以及默認盤問題 看清楚教程基本沒問題:Windows 安裝配置及卸載MySQL8超詳細保姆級教程_mysql8卸載-CSDN博客