坚持不住的时候, 再坚持一小下...!
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 int9end - offset int9
cld
rep movsb
push es:[9*4]
pop es:[200h]
push es:[9*4+2]
pop es:[202h]
cli
mov word ptr es:[9*4], 204h
mov word ptr es:[9*4+2], 0
sti
mov ax, 4c00h
int 21h
int9: push ax
push bx
push cx
push es
in al, 60h ;读出60h端口的数据
pushf ;标志寄存器入栈
call dword ptr cs:[200h] ;调用原int9中断例程, 处理相关的硬件细节
cmp al, 9eh ;判断60h端口是否是A键的断码, 不是则跳转
jne int9ret ;不等于则退出例程
mov ax, 0b800h
mov es, ax
mov bx, 0 ;显示满屏的'A'
mov cx, 2000
s: mov byte ptr es:[bx], 'A'
add bx, 2
loop s
int9ret:
pop es
pop cx
pop bx
pop ax
iret
int9end: nop
code ends
end start
- [zanghufei] 明天继续 01/08 02:55
- [landyking] 好久没来论坛,还是有很多奋进的少年人嘛。 加油喽! 12/02 23:26
- [chinatree] 加油。 12/02 12:50
- [chinatree] 我遇到99%的这种情况都是因为栈顶越界,自己做个调试或者逻辑检查吧。 11/15 00:41
- [游客] 你不适合学习计算机。 转行吧 11/14 11:03
- [zanghufei] 直接运行也是同样的错误信息,command,debug的错误斗一样,纠结了… 11/04 13:35
- [fpamc] 貌似没发现问题。 你是调试的时候出现的问题吧? 一般都是栈出现问题才这样。 你直接运行怎么样? 11/04 06:45
- [fpamc] 对的 10/30 10:06
- [fpamc] xor是异或指令,相同为假,不同为真。xor ax,ax就是把ax置零。 mov ah,11 i 10/30 09:05
- [chinatree] 加油。 10/29 23:47