8086汇编复习4 - int指令 - 使用emu8086
int指令
? ? 中斷信息可以來自CPU的內部和外部;int指令引發的中斷是內中斷;
? ? int n,n為中斷類型碼;
? ? CPU執行int n指令,相當于引發一個n號中斷的中斷過程;執行過程如下:
? ? 1)取中斷類型碼n;
? ? 2)標志寄存器入棧,IF=0, TF=0;
? ? 3)CS、IP入棧;
? ? 4)n*4賦值給IP寄存器;(n*4+2)賦值給CS寄存器;
? ? 從此處轉去執行n號中斷的中斷處理程序;
mov ax, 0b800h
mov es, ax
mov byte ptr es:[12*160 + 40 * 2], '!'
int 0
? ? 此程序在Win2000中的DOS方式下執行,將在屏幕中間顯示一個驚嘆號,然后顯示"Divide overflow"后返回到系統中。
? ? 程序并沒有做除法;CPU執行int 0指令,引發中斷,執行0號中斷處理程序,系統的0號中斷處理程序的功能是顯示"Divide overflow",然后返回到系統;
? ? int和call指令類似,都是調用一段程序;
? ? 在emu8086中,int 0 中斷例程位于仿真內存F4170處;程序執行完,自己彈出仿真屏幕,顯示一個驚嘆號;
? ? 在系統板的ROM中存放著一套程序;稱為BIOS;BIOS主要包含:
? ? 1)硬件系統的檢測和初始化程序;
? ? 2)外部中斷和內部中斷的中斷例程;
? ? 3)用于對硬件設備進行I/O操作的中斷例程;
? ? 4)其他和硬件系統相關的中斷例程;
? ? DOS操作系統也提供了中斷例程,DOS的中斷例程就是操作系統向程序員提供的編程資源;
? ? int 10h中斷例程是BIOS提供的中斷例程;其中包含了多個和屏幕輸出相關的子程序;
? ? int 10h設置光標位置;
mov ah, 2 ? ?;置光標
mov bh, 0 ? ;第0頁
mov dh, 5 ? ;dh中放行號
mov dl, 12 ?;dl中放列號
int 10h
? ? ah內容為2,后面再int 10h,就調用10h號中斷例程的2號子程序;后面是參數;
? ? 設置光標到第0頁,第5行,第12列;
? ? 在內存地址空間中,B8000H - BFFFFH 共32kB的空間,為80*25彩色字符模式的顯示緩沖區;
? ? 顯示緩沖區分為8頁;每頁4KB,4000B;一般情況下,顯示第0頁內容,B8000H - B8F9FH的4000個字節;
? ? 在emu8086中,int 10h 中斷例程位于仿真內存F4190處;
? ? 程序運行完,手動彈出仿真屏幕,看不到有內容;
? ? 下面嘗試在顯示緩沖區手動輸入內容;5行12列,要設置的位置大概在B8000后60個字節,即B803C處;在B803C手動輸入99;原來它的仿真屏幕是即時處理的;手動修改了,馬上自動彈出仿真屏幕,顯示修改的內容;99的ASCII碼大概是一個問號;在屏幕顯示一個問號;
? ??
?
總結
以上是生活随笔為你收集整理的8086汇编复习4 - int指令 - 使用emu8086的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8086汇编复习3 - 标志寄存器 -
- 下一篇: 破解时的数据约束性和winhex操作失败