汇编语言第三版(王爽著)(第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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值