汇编访问计算机端口,汇编总结(2):中断、端口、直接定址表
1、中斷
CPU具有一種能力,可以在執(zhí)行完當(dāng)前指令之后,檢測(cè)從內(nèi)部產(chǎn)生或外部發(fā)來(lái)的特殊信息,并立即對(duì)其進(jìn)行處理,這種特殊的信息,叫做中斷信息。
中斷即CPU不再接著剛執(zhí)行完的指令向下執(zhí)行,而是轉(zhuǎn)去處理特殊信息。
中斷分為:
內(nèi)中斷,CPU內(nèi)部產(chǎn)生的特殊信息
外中斷,CPU外部產(chǎn)生的特殊信息
2.1.1、內(nèi)中斷
中斷信息必須包含標(biāo)識(shí)來(lái)源的編碼,叫做中斷類型碼。中斷類型碼為一個(gè)字節(jié)型數(shù)據(jù),可表示256種中斷信息來(lái)源。
產(chǎn)生中斷信息的事件,即中斷信息的來(lái)源,叫做中斷源。
內(nèi)中斷分類:
除法錯(cuò)誤,類型碼0,如div指令產(chǎn)生溢出
單步執(zhí)行,類型碼1,即單步調(diào)試
into指令,類型碼4
int指令,指令格式為int n,類型碼為n
CPU在收到中斷信息后,需要對(duì)中斷信息進(jìn)行處理,這可以由我們編程來(lái)決定,我們編寫的處理中斷信息的程序叫做中斷處理程序。
CPU要想執(zhí)行中斷處理程序,則必須知道這個(gè)程序的入口,即CS:IP指向這個(gè)入口,CPU用8位中斷類型碼通過(guò)中斷向量表找到對(duì)應(yīng)中斷程序的入口地址。
中斷向量表在內(nèi)存中保存,對(duì)于8086CPU機(jī),其必須存放在0000:0000~0000:03FF處,這是規(guī)定好的。
中斷向量表中每個(gè)中斷類型碼對(duì)應(yīng)中斷程序的段地址和偏移地址,共占2個(gè)字節(jié)。
CPU通過(guò)中斷類型碼,然后在中斷向量表中找到中斷處理程序的段地址和偏移地址,設(shè)置CS和IP,CPU開始執(zhí)行中斷處理程序。這個(gè)操作是CPU自動(dòng)完成的,這個(gè)過(guò)程叫做中斷過(guò)程。
具體過(guò)程如下:
從中斷信息中取得中斷類型碼N
pushf:標(biāo)志寄存器的值入棧(中斷過(guò)程中會(huì)改變標(biāo)志寄存器的值,所以先保存之前的值)
TF=0,IF=0:設(shè)置標(biāo)志寄存器第8位TF和第9位IF的值為0
PUSH CS:CS內(nèi)容入棧
PUSH IP:IP內(nèi)容入棧
(IP)=(N4),(CS)=(N4+2):從內(nèi)存地址為中斷類型碼4和中斷類型碼4+2的兩個(gè)字中讀取中斷處理程序入口地址,設(shè)置CS和IP
執(zhí)行中斷處理程序
中斷處理程序編寫步驟:
保存用到的寄存器
處理中斷
恢復(fù)用到的寄存器
用iret指令返回
ret指令功能:
pop IP
pop CS
popf
引發(fā)中斷的具體事件:
除法錯(cuò)誤:如果在執(zhí)行div指令時(shí),發(fā)生溢出錯(cuò)誤,將產(chǎn)生中斷類型碼為0的中斷信息,CPU檢測(cè)到此信息然后引發(fā)中斷過(guò)程,轉(zhuǎn)去執(zhí)行0號(hào)中斷所對(duì)應(yīng)的中斷處理程序;
單步中斷:CPU執(zhí)行完一條指令后,如果檢測(cè)到TF位是1,則產(chǎn)生單步中斷,轉(zhuǎn)去執(zhí)行1號(hào)中斷處理程序,CPU提供單步中斷功能,為單步跟蹤程序執(zhí)行過(guò)程提供了實(shí)現(xiàn)機(jī)制;
int指令引發(fā)中斷:可自定義調(diào)用中斷處理程序,例如int n將調(diào)用n號(hào)中斷處理程序;
在主板的ROM中存放的程序,叫做BIOS(基本輸入輸出系統(tǒng)),主要包含以下內(nèi)容:
硬件系統(tǒng)的檢測(cè)和初始化程序;
外部中斷和內(nèi)部中斷的中斷例程;
用于對(duì)硬件設(shè)備進(jìn)行I/O操作的中斷例程;
其他和硬件系統(tǒng)相關(guān)的中斷例程;
操作系統(tǒng)DOS也提供了中斷例程,DOS中斷例程就是操作系統(tǒng)向程序員提供的編程資源。int 21h中斷例程就是DOS提供的,即程序返回功能。
在執(zhí)行完向ss寄存器傳送數(shù)據(jù)指令后,即使發(fā)生中斷,CPU也不會(huì)響應(yīng)。因?yàn)閟s:sp聯(lián)合指向棧頂,應(yīng)該持續(xù)完成,否則將發(fā)生錯(cuò)誤。
1.2、外中斷
CPU能響應(yīng)外設(shè)的輸入,并向它們進(jìn)行輸出,這個(gè)過(guò)程叫做外中斷。
外設(shè)的輸入不直接送入內(nèi)存和CPU,而是送入相關(guān)的接口芯片端口中。CPU向外設(shè)輸出也不是直接送入外設(shè),而是先送入端口,再由芯片送到外設(shè)。CPU通過(guò)端口和外設(shè)進(jìn)行聯(lián)系。
外中斷源分為2類:
可屏蔽中斷:CPU可以不響應(yīng)的外中斷,由標(biāo)志寄存器IF決定,如果IF=1則響應(yīng),否則屏蔽中斷;
中斷過(guò)程將IF設(shè)置為0,就是保證在進(jìn)入中斷處理程序后,禁止其他的可屏蔽中斷
8086CPU提供修改IF的指令:sti:IF=1, cli:IF=0
不可屏蔽中斷:
CPU必須響應(yīng)的外中斷
中斷類型碼固定為2
幾乎所有由外設(shè)引發(fā)的外中斷,都是可屏蔽中斷。
2、端口
在計(jì)算機(jī)中,各種存儲(chǔ)器和CPU的地址總線、數(shù)據(jù)總線、控制總線相連,CPU控制它們時(shí),都把它們當(dāng)做內(nèi)存來(lái)對(duì)待。除了各種存儲(chǔ)器之外,還與很多芯片相連:
各種接口卡(網(wǎng)卡、顯卡)上的接口芯片,它們控制接口卡工作;
主板上的接口芯片,CPU通過(guò)它們對(duì)部分外設(shè)進(jìn)行訪問(wèn);
其他芯片,存儲(chǔ)相關(guān)系統(tǒng)信息,或進(jìn)行相關(guān)的輸入輸出處理;
這些芯片中,都有一組可以由CPU讀寫的寄存器,CPU把這些寄存器都當(dāng)做端口,對(duì)它們進(jìn)行統(tǒng)一編址,從而建立一個(gè)統(tǒng)一的端口地址空間。
訪問(wèn)端口:
in al 60h:從60h號(hào)端口讀入一個(gè)字節(jié)
out 20h,al:往20h端口寫入一個(gè)字節(jié)
PC機(jī)中,有一個(gè)CMOS RAM芯片,一般稱為CMOS,特征如下:
包含一個(gè)實(shí)時(shí)鐘和一個(gè)有128個(gè)存儲(chǔ)單元的RAM存儲(chǔ)器;
此芯片靠電池供電,可保證實(shí)時(shí)鐘持續(xù)工作,RAM中信息不丟失;
128個(gè)字節(jié)的RAM中,內(nèi)部實(shí)時(shí)鐘占用0~0dh保存時(shí)間信息,其他單元保存系統(tǒng)配合信息,供系統(tǒng)啟動(dòng)時(shí)BIOS程序讀取,也可通過(guò)BIOS配置CMOS RAM中的系統(tǒng)信息;
此芯片內(nèi)部有2個(gè)端口:70h和71h,CPU通過(guò)這2個(gè)端口讀寫CMOS RAM;
70h為地址端口,存放要訪問(wèn)CMOS RAM單元的地址;71h為數(shù)據(jù)端口,存放從選定CMOS RAM單元中讀取的數(shù)據(jù),或要寫入其中的數(shù)據(jù);
在CMOS RAM中,存放著當(dāng)前的時(shí)間:年、月、日、時(shí)、分、秒。每個(gè)長(zhǎng)度為1個(gè)字節(jié),這些數(shù)據(jù)以BCD碼方式存放。
BCD碼是以4位二進(jìn)制數(shù)表示十進(jìn)制數(shù)的編碼方法。
3、直接定址表
假如a、b標(biāo)號(hào)代表2組數(shù)據(jù)空間,那么有如下寫法既可以標(biāo)記存儲(chǔ)數(shù)據(jù)的單元地址,還可以標(biāo)記其長(zhǎng)度:
指令:mov ax,b
相當(dāng)于:mov ax,cs:[8]
指令:mov b,2
相當(dāng)于:mov word ptr cs:[8],2
指令:inc b
相當(dāng)于:inc word ptr cs:[8]
指令:mov al,a[si]
相當(dāng)于:mov al,cs:0[si]
指令:mov al,a[3]
相當(dāng)于:mov al,cs:0[3]
指令:mov al,a[bx+si+3]
相當(dāng)于:mov al,cs:0[bx+si+3]
通過(guò)數(shù)據(jù)能直接計(jì)算出所要找的元素的位置的表,叫做直接定址表。
直接定址表的好處:
使算法清晰簡(jiǎn)潔
加快運(yùn)算速度
程序易于擴(kuò)展
如果此文章能給您帶來(lái)小小的工作效率提升,不妨小額贊助我一下,以鼓勵(lì)我寫出更好的文章!
總結(jié)
以上是生活随笔為你收集整理的汇编访问计算机端口,汇编总结(2):中断、端口、直接定址表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 海军蚌埠士官学校官网电话?
- 下一篇: 八路军在打仗的时候葫芦上刻着一个小孔是用