int指令的练习,安装一个中断程序后打印“!”

目的:在屏幕中间显示八十个感叹号

安装程序:

assume cs:code

code segment
	start:
		mov ax,cs
		mov ds,ax
		mov si,offset L
		mov ax,0
		mov es,ax
		mov di,200h
		mov cx,offset Lend - offset L;计算L程序的大小
		cld
		rep movsb
		
                ;以下操作修改中断向量表7ch跳转地址为0:200 
		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
		
	 L:
		lp:
			push bp
			mov bp,sp;将栈顶地址送到bp
			dec cx
			jcxz lpret
			sub [bp+2],bx;在栈中,将bp下面的ip修改到执行程序的开头
		lpret:
			pop bp;恢复bp
			iret;相当于pop IP
                        ;pop CS
                        ;popf
	 Lend:
		nop
code ends
end start	


执行程序:

assume cs:code

code segment
      start:
          ;将显存区域地址传送到es 
          mov ax,0b800h
          mov es,ax
 
          mov di,160*12;将屏幕中间的位置地址付给di
          mov bx,offset se - offset s;计算s程序段的大小
          mov cx,80;要打印80个感叹号
          
        s:
          mov byte ptr es:[di],'!'
          add di,2;跳到下一个数据区
          int 7ch;引发7ch中断
                  ;操作有:pushf
                         ;push CS
                         ;push IP 
       se:
          nop   
      
      
      
      mov ax,4c00h
      int 21h
code ends
end start



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值