assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset begin
mov ax,0
mov es,ax
mov di,204h
mov cx,offset over - offset begin
cld
rep movsb
;修改向量表
mov ax,es:[9*4]
mov es:[200h],ax
mov ax,es:[9*4+2]
mov es:[202h],ax ;保存了int9的向量表
cli
mov ax,204h
mov es:[9*4],ax
mov ax,0
mov es:[9*4+2],ax
sti
;退出
mov ax,4c00h
int 21h
;中断处理程序
begin:
push ax
push ds
push si
push cx ;保护现场
in al,60h
pushf
call dword ptr cs:[200h]
cmp al,9eh
jne return
mov ax,0b800h
mov ds,ax
mov si,0 ;ds:si指向显存
mov al,'A'
mov cx,2000 ;循环次数
s:
mov [si],al
mov ah,2
mov [si+1],ah
add si,2
loop s
return:
pop cx ;恢复现场
pop si
pop ds
pop ax
iret
over: nop
code ends
end start
- [cutebe] 相当牛,这个苦思冥想也值了。^_^ 11/30 00:00
- [parse] 如果忽略消息循环,那么操作系统加载的程序很快就执行完了,就像DOS程序一闪而过,所以CPU会空闲下来 06/30 09:04
- [游客] 楼主好厉害,挺一下! 01/19 08:43
- [游客] 很不错。 01/04 18:36
- [chinatree] 潜力贴留名,沙发。 11/08 12:58
- [youthangel] 恩,这次对了 10/30 18:56
- [fpamc] mov bx,18 在这条指令的上边是不是要加一条sub dx,dx? 10/30 10:03
- [fpamc] 对的 10/27 11:19
- [fpamc] 对的 10/27 09:00
- [fpamc] 哦,对不起,看错了。实验13也有一个7ch中断 10/27 08:52
- [游客] 现在急需一个汇编大作业。。。。。。可以么。。。。。如果今天之内看见留言 就加 1765496715 12/28 16:52
- [youthangel] 这算是对我学习的鼓励吗?谢谢!咱们这样交流就可以了 10/11 15:48
- [fpamc] 多日观察,你的学习积极性挺高的。可以来我们群了。群号:75916434 10/11 10:58
[ fpamc 发表于 2012-10-19 08:13 ]
对的,
[ fpamc 发表于 2012-10-19 08:16 ]
mov word ptr es:[9*4],204h
mov word ptr es:[9*4+2],0
里面有两处可以合并成这样的,
[ youthangel 发表于 2012-10-19 14:40 ]
恩恩,课本上是那么写的。我感觉可读性比较差而且没必要这么节省空间。