int指令---汇编学习笔记
int指令
int指令可以引發中斷
13.1 int指令
int指令格式:int n,n為中斷類型碼,它的功能是引發中斷過程。
CPU執行int n指令,相當于引發一個n號中斷的中斷過程,執行過程如下。
13.2 編寫供應用程序調用的中斷例程
很簡單的例子自己看。
13.3 對int、iret和棧的深入理解
用int 7ch來模擬loop指令,挺復雜的。
大致步驟如下:
例子:
將上面的例子簡單概括一下:
檢測點 13.1
(1)在上面的內容中,我們用7ch中斷例程實現loop的功能,則上面的7ch中斷例程所能進行的最大轉移位移是多少?
答:必須在1個字所能存儲的范圍以內,也就是0000~FFFF,容量大小是65536。
(2)用7ch中斷例程完成jmp near ptr s指令的功能,用bx向中斷例程傳送轉移位移。
應用舉例:在屏幕的第12行,顯示data段中以0結尾的字符串。
int 7ch中斷例程及安裝
assume cs:codecode segmentstart:mov ax,csmov ds,axmov si,offset smov ax,0mov es,axmov di,200hmov cx,offset se-offset scldrep movsbmov ax,0mov es,axmov word ptr es:[7ch*4],200hmov word ptr es:[7ch*4+2],0mov ax,4c00hint 21hs:push bpmov bp,spadd [bp+2],bxpop bpiretse:nopcode ends end start完整程序:
assume cs:code data segmentdb 'conversation',0 data endscode segmentstart:mov ax,csmov ds,axmov si,offset smov ax,0mov es,axmov di,200hmov cx,offset se-offset scldrep movsbmov ax,0mov es,axmov word ptr es:[7ch*4],200hmov word ptr es:[7ch*4+2],0mov ax,datamov ds,axmov si,0mov ax,0b800hmov es,axmov di,12*160s1:cmp byte ptr [si],0je okmov al,[si]mov es:[di],alinc siadd di,2mov bx,offset s1-offset okint 7chok:mov ax,4c00hint 21hs:push bpmov bp,spadd [bp+2],bxpop bpiretse:nopcode ends end start13.4 BIOS和DOS所提供的中斷例程
BIOS中主要包括以下幾部分內容。
操作系統DOS也提供了中斷例程,從操作系統的角度來看,DOS的中斷例程就是操作系統向程序員提供的編程資源。
BIOS和DOS在所提供的中斷例程中包含了許多子程序,這些子程序實現了程序員在編程的時候經常需要用到的功能。程序員在編程的時候,可以用int指令直接調用BIOS和DOS提供的中斷例程,來完成某些工作。
和硬件設備相關的DOS中斷例程中,一般都調用了BIOS的中斷例程。
13.5 BIOS和DOS中斷例程的安裝過程
BIOS和DOS提供的中斷例程的安裝過程
檢測點 13.2
判斷下面說法的正誤:
(1)我們可以編程改變FFFF:0處的指令,使得CPU不去執行BIOS中的硬件系統檢測和初始化程序。
答:不行,因為BIOS的中斷例程是ROM(只讀)。
(2)int 19h中斷例程,可以由DOS提供。
答:不行,因為int 19h是用來啟動DOS的。而DOS不能在沒被啟動的情況下提供int 19h。
13.6 BIOS中斷例程應用
自行閱讀,略過。
13.7 DOS中斷例程應用
這里說明一個內容,其他自行閱讀,略過。
mov ah,4c ;程序返回 mov al,0 ;返回值 int 21h實驗13 編寫、應用中斷例程
(1)編寫并安裝int 7ch中斷例程,功能為顯示一個用0結束的字符串,中斷例程安裝在0:200處。
參數:(dh)=行號,(dl)=列號,(cl)=顏色,ds:si指向字符串首地址。
7ch中斷例程編寫及其安裝
assume cs:code code segmentstart:mov ax,csmov ds,axmov si,offset smov ax,0mov es,axmov di,200hmov cx,offset se-offset scldrep movsbmov ax,0mov es,axmov word ptr es:[7ch*4],200hmov word ptr es:[7ch*4+2],0mov ax,4c00hint 21h s:mov ax,0b800hmov es,axmov ax,160mul dhmov di,axmov ax,2mul dladd di,axsl:mov al,ds:[si]mov ah,0cmp ah,alje okmov ah,clmov es:[di],axinc siadd di,2jmp slok:iretse:nopcode ends end start實驗結果:
(2)編寫并安裝int 7ch中斷例程,功能為完成loop指令的功能。
參數:(cx)=循環次數,(bx)=位移。
7ch中斷例程及其安裝:
assume cs:code code segmentstart:mov ax,csmov ds,axmov si,offset smov ax,0mov es,axmov di,200hmov cx,offset se-offset scldrep movsbmov ax,0mov es,axmov word ptr es:[7ch*4],200hmov word ptr es:[7ch*4+2],0mov ax,4c00hint 21h s:push bpmov bp,spdec cxjcxz okadd [bp+2],bxok:pop bpiretse:nopcode ends end start實驗結果:
(3)下面的程序,分別在屏幕的第2、4、6、8行顯示4句英文詩,補全程序。
實驗結果:
總結
以上是生活随笔為你收集整理的int指令---汇编学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试题,你做了哪些事情来提升自己的沟通能
- 下一篇: 面向人工智能“新基建”的知识图谱行业白皮