汇编语言_实验13_编写、应用中断例程

实验13.1
编写安装7ch中断,功能为显示一个用0结束的字符串,中断例程安装在0:200处。
参数:dh=行号,dl=列号,cl=颜色,ds:si指向字符串首地址

assume cs:code,ds:data,ss:stack

data segment
	db 'welcome to masm!',0
data ends

stack segment 
	db 128 dup(0)
stack ends

code segment 
start:
	mov ax,stack
	mov ss,ax
	mov sp,128
	;安装程序
	mov ax,cs
	mov ds,ax
	mov si,offset show_str_start
	
	mov ax,0
	mov es,ax
	mov di,200h
	mov cx,offset show_str_end - offset show_str_start
	cld 
	rep movsb
	;修改中断向量表
	mov ax,0
	mov es,ax
	mov word ptr es:[7ch*4+0],200h ;偏移地址
	mov word ptr es:[7ch*4+2],0		;段地址

	mov dh,10	;行号
	mov dl,10	;列号
	mov cl,2    ;颜色
	mov ax,data	;
	mov ds,ax
	mov si,0
	int 7ch
	
	mov ax,4c00h
	int 21h

show_str_start:
	mov ax,0b800h
	mov es,ax
	mov ax,0
	
	mov al,160
	mul dh
	mov di,ax
	mov ax,0
	mov al,10
	mul dl
	add di,ax
	
	mov ah,cl
	mov cx,0
showStr:
	mov cl,[si]
	jcxz ok
	mov al,cl
	mov es:[di],ax
	inc si
	add di,2
	jmp short showStr

ok:
	iret
show_str_end:
	nop

code ends
end start

观察int iret执行时,栈和cs ip变化情况;
int 7ch执行前,栈的数据和CS IP 变化情况
在这里插入图片描述
执行后,栈的数据和CS IP 变化情况
在这里插入图片描述
执行iret前
在这里插入图片描述
执行后:cs ip 恢复到之前的状态
在这里插入图片描述

13.2 编写并安装int 7ch中断,功能为完成loop指令
参数:cx = 循环次数,bx=位移

assume cs:code,ds:data,ss:stack

data segment
	db 'welcome to masm!',0
data ends

stack segment 
	db 128 dup(0)
stack ends

code segment 
start:
	mov ax,stack
	mov ss,ax
	mov sp,128
	;安装程序
	mov ax,cs
	mov ds,ax
	mov si,offset lp
	
	mov ax,0
	mov es,ax
	mov di,200h
	mov cx,offset lpret - offset lp
	
	cld 
	rep movsb
	;修改中断向量表
	mov ax,0
	mov es,ax
	mov word ptr es:[7ch*4+0],200h
	mov word ptr es:[7ch*4+2],0
	
	
	mov ax,0b800h
	mov es,ax
	mov di,160*12
	mov cx,80
	mov bx,offset s - offset se
	
s:
	mov byte ptr es:[di],'!'
	add di,2
	int 7ch
se:
	nop
	
	mov ax,4c00h
	int 21h

lp:
	push bp
	mov bp,sp
	dec cx
	jcxz ok
	add [bp+2],bx
	pop bp
ok:
	iret
lpret:
	nop
code ends
end start

在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值