《組合語言》學習筆記(第一章、第二章)
《組合語言》學習筆記(第三章、第四章)
《組合語言》學習筆記(第五章、第六章)
《組合語言》學習筆記(第七章、第八章)
《組合語言》學習筆記(第九章、第十章)
《組合語言》學習筆記(第十一章、第十二章)
《組合語言》學習筆記(第十三章、第十四章)
《組合語言》學習筆記(第十五章、第十六章)
第14章、埠
int指令的格式為:int n
,n為中斷型別碼,它的功能是引發中斷過程。
cpu執行int n指令,相當於引發乙個n號中斷的中斷過程
在程式中使用int指令呼叫任何乙個中斷的中斷處理程式。我們可以將中斷處理程式簡稱為中斷例程。
在系統板的rom中存放著一套程式,稱為bios(基本輸入輸出系統)
bios中主要包含以下幾部分內容
程式設計師在程式設計的時候,可以用int 指令直接呼叫bios和dos系統提供的中斷例程,來完成某些工作。
和硬體裝置相關的dos中斷例程中,一般都呼叫了bios的中斷例程。
前面的課程中,我們都是自己編寫中斷例程,將它們放到安裝程式中,然後執行安裝程式,將它們安裝到指定的記憶體區中。此後,別的應用程式才可以呼叫。
bios和dos提供的中斷例程是如何安裝到記憶體中的呢?
1、開機後,cpu一加電,初始化(cs)= 0ffffh,(ip)= 0,自動從ffff:0單元開始執行程式。ffff:0處有一條轉跳指令,cpu執行該指令後,轉去執行bios中的硬體系統檢測和初始化程式。
2、初始化程式將建立bios所支援的中斷向量,即將bios提供的中斷例程的入口位址登記在中斷向量表中。
注意,對於bios所提供的中斷例程,只需將入口位址登記在中斷向量表中即可,因為它們是固化到rom中的程式,一直在記憶體中存在。
3、硬體系統檢測和初始化完成後,呼叫int 19h進行作業系統的引導。從此將計算機交由作業系統控制。
4、dos啟動後,除完成其他工作外,還將它所提供的中斷例程裝入記憶體,並建立相應的中斷向量。
一般來說,乙個供程式設計師呼叫的中斷例程中往往包括多個子程式,中斷例程內部用傳遞進來的引數來決定執行哪乙個子程式。
bios和dos提供的中斷例程,都用ah來傳遞內部子程式的編號。
int 21h
中斷例程是dos提供的中斷例程,4ch
號功能,即程式返回功能
mov ah, 4ch ;呼叫第21h號中斷例程的4ch號子程式,功能為程式返回,可以提供返回值作為引數
mov al, 0 ;返回值
int 21h
在pc機系統中,和cpu通過匯流排相連的晶元除各種儲存器外,還有以下3種晶元。
cpu主機板上有介面卡的插槽,插槽上有介面卡,介面卡上有介面晶元,介面晶元上有暫存器。
在這些晶元中,都有一組可以由cpu讀寫的暫存器。這些暫存器,它們在物理上可能處於不同的晶元中,
但是它們在以下兩點上相同。
從cpu的角度,將這些暫存器都當作埠,對它們進行統一編址,從而建立了乙個統一的埠位址空間。
每乙個埠在位址空間中都有乙個位址。在訪問埠的時候,cpu通過埠位址來定位埠。因為埠所在的晶元和cpu通過匯流排相連,
cpu可以直接讀寫以下3個地方的資料。
埠位址和記憶體位址一樣,通過位址匯流排來傳送。在pc系統中,cpu最多可以定位64kb個不同的埠。則埠位址的範圍為0-65535
。
埠的讀寫指令只有兩條:in
和out
,分別用於從埠讀取資料和往埠寫入資料。
在in和out指令中,只能使用ax或al來存放從埠中讀入的資料或要傳送到埠中的資料。訪問8位埠時用al,訪問16位埠時用ax。
cpu執行記憶體訪問指令和埠訪問指令的時候,匯流排上的資訊:
;對0~255以內的埠進行讀寫時:
in al, 20h ;從20h埠讀入乙個位元組
out 20h, al ;往20h埠寫入乙個位元組
;對256~65535的埠進行讀寫時,埠號放在dx中:
mov dx, 3f8h ;將埠號3f8h送入dx
in al, dx ;從3f8h埠讀入乙個位元組
out dx, al ;向3f8h埠寫入乙個位元組
pc機中,有乙個cmos ram晶元,一般簡稱為cmos。此晶元的特徵如下
shl和shr是邏輯移位指令
shl是邏輯左移指令,它的功能為:
將乙個暫存器或記憶體單元中的資料向左移位;
將最後移出的一位寫入cf中;
最低位用0補充。
shr是邏輯右移指令,它的功能為:
將乙個暫存器或記憶體單元中的資料向右移位;
將最後移出的一位寫入cf中;
最高位用0補充。
如果移動位數大於1時,必須將移動位數放在cl中
mov al, 01001000b
shl al, 1 ;將a1中的資料左移一位執行後(al)=10010000b,cf=0。
mov al, 01010001b
mov cl, 3 ;如果移動位數大於1時,必須將移動位數放在cl中
shl al, c1
mov al, 10000001b
shr al, 1 ;將al中的資料右移一位執行後(al)=01000000b,cf=1。
將x邏輯左移一位,相當於執行x=x*2。
將x邏輯右移一位,相當於執行x=x/298
7654
3210
年月日時
分秒這些資料以bcd碼的方式存放。
bcd碼是以4位二進位制數表示十進位制數碼的編碼方法 4 == 0100b
乙個位元組可表示兩個bcd碼。則cmos ram儲存時間資訊的單元中,儲存了用兩個bcd碼表示的兩位十進位制數,高4位的bcd碼表示十位,低4位的bcd碼表示個位。比如,00010100b表示14。
;程式設計,在螢幕中間顯示當前的月份。
assume cs:code
code segment
start: mov al,8 ;從cmos ram的8號單元讀出當前月份的bcd碼。
out 70h,al
in al, 71h ;從資料埠71h中取得指定單元中的資料:
mov ah, al ;al中為從cmos ram的8號單元中讀出的資料
mov cl, 4
shr ah, cl ;ah中為月份的十位數碼值,左移四位空出四位
and al, 00001111b ;al中為月份的個位數碼值
add ah, 30h ;bcd碼值+30h=十進位制數對應的ascii
add al, 30h
mov bx, 0b800h
mov es, bx
mov byte ptr es:[160*12+40*2], ah ;顯示月份的十位數碼
mov byte ptr es:[160*12+40*2+2], al ;接著顯示月份的個位數碼
mov ax,4c00h
int 21h
code ends
end start
王爽組合語言第十三章檢測點答案
檢測點13.1 1 128 注 因為loop實現的是段內短轉移,目的位址必須在離本指令 128 127範圍內 利用七号中斷實現jmp near ptr s指令 assume cs code data segment db conversation 0 data ends code segment s...
組合語言學習筆記3(王爽)
乙個字 兩個位元組,即乙個字需要兩個記憶體單元儲存。高位址放高位位元組,低位址放低位位元組。8086cpu為16位結構,有16位資料線,一次性可傳輸16位資料,也就是說對記憶體一次性操作兩記憶體單元即為乙個字。ds暫存器通常用來存放cpu要訪問資料的段位址,eg 0 表示記憶體單元的偏移位址。mov...
《組合語言》第十三章 int指令
中斷資訊可以來自cpu的內部和外部,當cpu的內部有需要處理的事情發生的時候,將產生馬上需要處理的中斷資訊,引發中斷過程。這一章,我們要講解另一種重要的內中斷,由int指令引發的中斷 int指令的格式為int n 指令,相當於引發乙個n號中斷的中斷過程,執 況如下 取中斷型別碼n 標誌暫存器入棧,i...