- 【WIN32汇编教程】(第一课)配置出WIN32汇编的开发环境
- 欢迎加入编程论坛:www.ghostasm.com 我们提供大量工具和学习的资料。VIP3高级群:89366200
- 在学汇编的来加群
- 为什么因为溢出导致了实际结果为负,那么逻辑上真正的结果必然为正呢?
- 第6章 实验5 第二题
- 【WIN32汇编教程】(第四课)编写出第一个“hello ghosthouse”程序
- 【WIN32汇编教程】(第三课)了解win32汇编程序的基本结构
- 【WIN32汇编教程】(第二课)Makefile文件的编写和nmake工具的使用
- 欢迎加入编程论坛:www.ghostasm.com 我们提供大量工具和学习的资料。VIP3高级群:89366200
- 欢迎加入编程论坛:www.ghostasm.com 我们提供大量工具和学习的资料。VIP3高级群:89366200
[2011-05-14 07:26] 实验15 安装新中断例程 松开按键A的时候满屏幕都是A(纯DOS下有用)
assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
;=======================设置安装程序=============
start:
mov ax,stack
mov ss,ax
mov sp,128;堆栈设置
push cs
pop ds
mov ax,0
mov es,ax
mov si,offset int9
mov di,204h
mov cx,offset endint9-offset int9
cld
rep movsb;安装中断例程
push word ptr es:[4*9]
pop word ptr es:[200h]
push word ptr es:[4*9+2]
pop word ptr es:[202h];转移原中断向量到200h~203h
cli
mov word ptr es:[4*9],204h
mov word ptr es:[4*9+2],0
sti ;设置新的中断向?
mov ax,4c00h
int 21h
;=======================中断程序=================
int9:
push cx
push es
in al,60h
pushf
mov bx,0
mov es,bx
call dword ptr es:[200h];调用原中断例程处理
cmp al,1eh+80h
jne int9ret
mov ax,0b800h
mov es,ax
mov cx,2000
mov bx,0
mov al,'A'
int9s1:
mov es:[bx],al
add bx,2
loop int9s1
int9ret:
pop es
pop cx
iret
endint9:nop
;=======================程序结束=================
code ends
end start
stack segment
db 128 dup (0)
stack ends
code segment
;=======================设置安装程序=============
start:
mov ax,stack
mov ss,ax
mov sp,128;堆栈设置
push cs
pop ds
mov ax,0
mov es,ax
mov si,offset int9
mov di,204h
mov cx,offset endint9-offset int9
cld
rep movsb;安装中断例程
push word ptr es:[4*9]
pop word ptr es:[200h]
push word ptr es:[4*9+2]
pop word ptr es:[202h];转移原中断向量到200h~203h
cli
mov word ptr es:[4*9],204h
mov word ptr es:[4*9+2],0
sti ;设置新的中断向?
mov ax,4c00h
int 21h
;=======================中断程序=================
int9:
push cx
push es
in al,60h
pushf
mov bx,0
mov es,bx
call dword ptr es:[200h];调用原中断例程处理
cmp al,1eh+80h
jne int9ret
mov ax,0b800h
mov es,ax
mov cx,2000
mov bx,0
mov al,'A'
int9s1:
mov es:[bx],al
add bx,2
loop int9s1
int9ret:
pop es
pop cx
iret
endint9:nop
;=======================程序结束=================
code ends
end start
评论次数(0) |
浏览次数(539) |
类型(我的代码) |
收藏此文 |