汇编: 用int中断改变ip,实现loop循环

在屏幕中间显示一行"!" 

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

data segment
	db 128 dup(0)
data ends


stack segment stack
	db 128 dup(0)
stack ends


code segment
	start:	mov bx, stack
		mov ss, bx
		mov sp, 129


		call cpy_new_7CH
		call set_new_7CH


		mov bx, 0B800H
		mov es, bx
		mov di, 160*12  ; 屏幕中间
		
		mov bx, OFFSET s - OFFSET se
		mov cx, 80

s:		mov byte ptr es:[di], '!'
		mov byte ptr es:[di+1], 00000100B
		add di,2		
		int 73H
se:		nop				; 跳转长度 = 标号出 - loop指令后第一个字节地址
	
		mov ax, 4C00H
		int 21H


;============================================
set_new_7CH:
		mov bx, 0
		mov es, bx

		mov word ptr es:[73H*4], 7E00H
		mov word ptr es:[73H*4+2], 0

		ret

;============================================
new_7CH:
		push bp		; bp, ip, cs, pushf
		mov bp, sp
		dec cx
		jcxz newRet
		add ss:[bp+2],bx
		
		
		;dec cx
		;jcxz newRet
		;add ss:[sp],bx
		
	newRet:
		pop bp
		iret
		
new_7CH_end: nop

;============================================
cpy_new_7CH:
		mov bx, cs
		mov ds, bx
		mov si, OFFSET new_7CH

		mov bx, 0
		mov es, bx
		mov di, 7E00H
		
		mov cx, OFFSET new_7CH_end - new_7CH
		
		cld
		rep movsb
		ret

code ends

end start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值