|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
;这个是在程序中测试的,没有安装部分,用的书上显示a~z字母,按esc改变颜色的测试程序。课本p276
;
assume cs:code
stack segment
db 128 dup (0)
stack ends
data segment
dw 0,0,0,0
data ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
mov ax, data
mov ds, ax
mov ax, 0
mov es, ax
push es:[9*4]
pop ds:[0]
push es:[9*4+2]
pop ds:[2] ;保存原int9h的中断地址
cli
mov word ptr es:[9*4], offset int9h
mov es:[9*4+2], cs
sti
push es
mov ax, 0b800h
mov es, ax
mov si, 160*12+2*40
mov ch, 'a' ;这里显示依次显示a~z
s1: mov es:[si], ch
call delay
inc ch
cmp ch, 'z'
jna s1
pop es
push ds:[0]
pop es:[9*4]
push ds:[2]
pop es:[9*4+2];保存原int9h的中断地址
mov ax, 4c00h
int 21h
delay: push ax
push dx
mov dx, 500h
mov ax, 0
ly: sub ax, 1
sbb dx, 0
cmp ax, 0
jne ly
cmp dx, 0
jne ly
pop dx
pop ax
ret
int9h: push ax
push bx
push cx
push es
in al, 60h ;接收键盘输入
pushf
call dword ptr ds:[0] ;模拟调用原int9h程序
cmp al, 9eh ;不是是‘a’断码就结束,是就执行写A操作
jne ret9h
mov ax, 0b800h
mov es, ax
mov bx, 0
mov cx, 2000
s2: mov byte ptr es:[bx], 'A'
add bx, 2
loop s2
ret9h: pop es
pop cx
pop bx
pop ax
iret
code ends
end start |
|