汇编语言(王爽)15章编写int9中断例程:输入f1改变全屏字体颜色

关键步骤:

  1. 保存中断向量表int9的地址到changeColor代码的data区
  2. 把changeColor代码写进中断向量表
  3. 把int9的地址设置为中断向量表里changeColor代码的地址

程序运行后,按F1依旧可以改变屏幕字体颜色

assume cs:code,ds:data
data segment
	db 16 dup(0)
data ends
code segment
	start:  
		mov ax,0
		mov es,ax
		mov di,200h
		mov ax,code
		mov ds,ax

		mov si,offset dataStart
		mov ax,es:[4*9]
		mov ds:[si],ax
		mov ax,es:[4*9+2]
		mov ds:[si+2],ax
		
		mov si,offset changeColor
		mov cx,offset end1-offset changeColor
		cld
		rep movsb
		
		cli
		mov word ptr es:[4*9],200h
		mov word ptr es:[4*9+2],0	
		sti		
		
		mov ax,4c00h
		int 21h

	changeColor:	
		jmp short codeStart		
	dataStart:
		db 8 dup(0)
	codeStart:
		push cx	
		push di
		push ax
		push es
		
		in al,60h
		cmp al,3bh		;//F1的扫描码
		jnz there 
		
		mov cx,2000
		mov di,1
	s:					;//奇数地址的位置全是颜色的值
		mov ax,0b800h
		mov es,ax	
		inc byte ptr es:[di]
		add di,2
		loop s
		
	there:
		pushf
		mov ax,0
		mov es,ax
		mov di,offset dataStart-offset changeColor
		call dword ptr es:[200h+di]
		
		pop es
		pop ax
		pop di
		pop cx
		iret			
	end1:

code ends
end start
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值