汇编语言 实验13(王爽 第三版) 编写应用中断例程(1)

实验13(2)https://blog.youkuaiyun.com/qq_41700629/article/details/89791981

实验13(1)
编写并安装int 7ch中断例程,功能为显示一个用0结尾的字符串,中断例程安装在0:200处。
参数: (dh)=行号, (dl)=列号, (cl)=颜色 ds:si指向字符串首地址
以上中断例程安装好后,对下面的程序进行单步跟踪,尤其注意int,iret指令执行前后cs,ip的和栈中的状态。

assume cs:code  
data segment
     db "welcome to masm!",0
data ends
code segment
start:  mov dh,10
        mov dl,10
        mov cl,2h
        mov ax,data
        mov ds,ax
        mov si,0
        int 7ch
        
        mov ax,4c00h
        int 21h  
code ends
end start

编写程序如下:

assume cs:code
code segment
	start:	mov ax,cs
			mov ds,ax
			mov si,offset do7c
			mov ax,0
			mov es,ax
			mov di,0200h
			mov cx,offset do7cend-offset do7c
			cld
			rep movsb				;安装
			
		mov ax,0
		mov es,ax
		mov word ptr es:[4*7ch],200h
		mov word ptr es:[4*7ch+2],0			;设置中断向量表
		mov ax,4c00h
		int 21h
		
do7c:	
		  push ax
		  push es
		  push di
		  push cx
		  push bx			;保护寄存器

		  mov ax,0B800H
		  mov es,ax
		  mov di,0
		
		  mov al,160
		  mul dh
		  add di,ax                  ; 行

		  mov al,2
		  mul dl
		  add di,ax                  ; 列
									;显存地址设置好了
		  mov bl,cl                  ; 放颜色
		  mov ch,0
	   s: mov cl,ds:[si]
		  jcxz ok
		  mov es:[di],cl
		  mov es:[di+1],bl
		  add di,2
		  inc si
		  jmp short s
	  ok: pop dx
		  pop cx
		  pop di
		  pop es
		  pop ax
		  iret                       ; 恢复寄存器并返回

do7cend:nop
code ends
end start

实验截图:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值