彙編語言第三版(王爽著)(第13章.int指令)

13.1 int指令

CPU執行int n指令相當於引發一個n號中斷的中斷過程,執行過程如下:
1.取中斷類型碼n
2.標誌寄存器入棧IF=0,TF=0
3.CS,IP入棧
4.(IP)=N4,(CS)=N4+2

我們可以將中斷處理程序簡稱爲中斷例程。

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

編寫安裝中斷7ch的中斷例程
功能:求一word型數據的平方
03:
assume cs:code
code segment
;安裝
start:mov ax,cs
mov ds,ax
mov si,offset sqr
mov ax,0
mov es,ax
mov di,200h
mov cx,offset sqrend-offset sqr
cld
rep movsb
;設置中斷向量表
mov ax,0
mov es,ax
mov word ptr es:[7chx4],200h
mov word ptr es:[7chx4+2],0
mov ax,4c00h
int 21h
sqr :mul ax
iret
sqrend:nop
code ends
end start
04:
assume cs:code
code segment
start:mov ax,3456
int 7ch
add ax,ax
adc dx,dx
mov ax,4c00h
int 21h
code ends
end start
功能:將一個全是字母,以0結尾的字符串,轉化爲大寫
05:
assume cs:code
code segment
;安裝
start:mov ax,cs
mov ds,ax
mov si,offset capital
mov ax,0
mov es,ax
mov di,200h
mov cx,offset capitalend-offset capital
cld
rep movsb
;設置中斷向量
mov ax,0
mov es,ax
mov word ptr es:[7ch4],200h
mov word ptr es:[7ch
4+2],0
mov ax,4c00h
int 21h
capital:push cx
push si
change:mov cl,[si]
mov ch,0
jcxz ok
and byte ptr [si],11011111b
inc si
jmp short change
ok:pop si
pop cx
iret
capitalend:nop
code ends
end start
06:
assume cs:code
data segment
db ‘conversation’,0
data ends
code segment
start:mov ax,data
mov ds,ax
mov si,0
int 7ch
mov ax,4c00h
int 21h
code ends
end start

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

在屏幕中間顯示80個!
讓int 7ch 實現loop s的功能
07:
assume cs:code
code segment
;安裝
start:mov ax,cs
mov ds,ax
mov si,offset lp
mov ax,0
mov es,ax
mov di,200h
mov cx,offset lpend-offset lp
cld
rep movsb
;設置中斷向量
mov ax,0
mov es,ax
mov word ptr es:[7ch4],200h
mov word ptr es:[7ch
4+2],0
mov ax,4c00h
int 21h
lp:push bp
mov bp,sp
dec cx
jcxz lpret
add [bp+2],bx
lpret:pop bp
iret
lpend:nop
code ends
end start
08:
assume cs:code
code segment
start:mov ax,0b800h
mov es,ax
mov di,160*12
mov bx,offset s - offset se ;是一個負數,爲了等一下求s的偏移地址
mov cx,80
s:mov byte ptr es:[di],’!’
add di,2
int 7ch
se:nop
mov ax,4c00h
int 21h
code ends
end start

檢測點13.1

1.128
2.assume cs:code
code segment
;安裝
start:mov ax,cs
mov ds,ax
mov si,offset lp
mov ax,0
mov es,ax
mov di,200h
mov cx,offset lpend-offset lp
cld
rep movsb
;設置中斷向量
mov ax,0
mov es,ax
mov word ptr es:[7ch4],200h
mov word ptr es:[7ch
4+2],0
mov ax,4c00h
int 21h
lp:push bp
mov bp,sp
dec cx
add [bp+2],bx
pop bp
iret
lpend:nop
code ends
end start

在這裏插入圖片描述

13.4 BIOS和DOS提供的中斷例程

在系統板ROM中,存在BIOS程序
1.硬件系統的 檢測和初始化
2.外部中斷和內部中斷例程
3.用於硬件設備進行I/O操作的中斷例程
4.其他和硬件系統相關的中斷例程

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

1.CPU一開機,自動從ffff:0單元開始執行程序。此處有一條跳轉指令,執行完該指令後,轉去執行BIOS中的硬件系統檢測和初始化程序
2.初始化程序將建立BIOS所支持的中斷向量
3.硬件系統檢測和初始化完成後,調用int 19h進行操作系統的引導
4.DOS啓動後,除完成其他工作外,還將它所提供的中斷例程裝入內存,並建立相應的中斷向量。

13.6 BIOS 中斷例程的應用

BIOS和DOS提供的中斷例程,都用ah來傳遞內部子程序的編號
編程:在屏幕5行12列顯示3個紅底高亮閃爍綠色的’a’
assume cs:code
code segment
mov ah,2
mov bh,0
mov dh,5
mov dl,12
int 10h
mov ah,9
mov al,‘a’
mov bl,11001010b
mov bh,0
mov cx,3
int 10h

mov ax,4c00h
int 21h
code ends
end

13.7 DOS 中斷例程應用

在屏幕5行12列顯示字符串’Welcome to masm!’
mov ah,2
mov bh,0
mov dh,5
mov dl,12
int 10h
mov ax,data
mov ds,ax
mov dx,0
mov ah,9
int 21h

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章