《汇编语言(第三版)》王爽笔记(13)int指令

第十三章 int指令

由int引起的另一种内中断。
格式:int n (n为中断类型码),用于引发中断过程。
在这里插入图片描述
int 与 iret 指令搭配使用,用于实现标志寄存器、CS、IP的入栈及出栈。与call 和 ret 搭配的思路相似。
iret功能为:
pop IP
pop CS
popf

检测点13.1

  1. 65535(FFFFH)
  2. (我不会做TT)
jnp:	push bp
	mov bp, sp
	add [bp+2], bx
	pop bp
	iret

在这里插入图片描述
BIOS和DOS中都提供了许多中断例程,供程序员使用int指令调用。
中断例程安装到内存的过程如下:
在这里插入图片描述

检测点13.2

  1. 错误,FFFF:0处单元无法被更改
  2. 错误,DOS此时未启动

BIOS和DOS提供的中断例程,都用ah来传递子程序编号。
我们一直使用的是int 21h中断例程中的4ch号功能,即程序返回功能。

实验13

assume cs:code

code segment
start:  mov ax, cs
mov ds, ax
mov si, offset print
mov ax, 0
mov es, ax
mov di, 200h
mov cx, offset printend - offset print
cld
rep movsb

mov ax, 0
mov es, ax
mov word ptr es:[7ch * 4], 200h
mov word ptr es:[7ch * 4 + 2], 0
mov ax, 4c00h
int 21h

print:
push es
push ax
push cx
push dx
push si
push di

mov ax, 0b800h
mov es, ax
mov al, 160
mov ah, 0
mul dh
mov di, ax
add dl, dl
mov dh, 0
add di, dx

mov al, cl
printstart:
mov ch, 0
mov cl, [si]
jcxz zero
mov ch, al
mov es:[di], cx
add di, 2
inc si
jmp printstart

zero:
pop di
pop si
pop dx
pop cx
pop ax
pop es
iret
printend:
nop

code ends

end start
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:[7ch * 4], 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
[si]
[bx]
add bx, 2
inc si
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值