编译 按Esc键变颜色出现26个字母 出现(4) out of memory
assume cs:code ;编程:在屏幕中间依次显示"a"~"z",并可以让人看清,在显示的过程中,按下'Esc'键后,改变显示的颜色。;完整的功能代码:
stack segment
db 128 dup(0)
stack ends
data segment
dw 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:
pop ds:
push es:
pop ds: ;将原来的int 9中断例程的入口地址保存在ds:0、ds:2但与昂中
mov word ptr es:,offset int9
mov es:,cs ;在中断向量表中设置新的int 9中断例程的入口地址
mov ax,0b800h
mov es,ax
mov ah,'a'
s:
mov es:,ah
call delay
inc ah
cmp ah,'z'
jna s
mov ax,0
mov es,ax
push ds:
pop es:
push ds:
pop es: ;将中断向量表中intn 9中断例程的入口恢复为原来的地址
mov ax,4c00h
int 21h
delay:
push ax
push dx
mov dx,2000h
mov ax,0
s1:
sub ax,1
sbb dx,0
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
ret
; 以下为新的int 9中断例程
int9:
push ax
push bx
push es
in al,60h
pushf
pushf
pop bx
and bh,11111100b
push bx
popf
call dword ptr ds: ;对int指令进行模拟,调用原来的int 9中断例程
cmp al,1
jne int9ret
mov ax,0b800h
mov es,ax
inc byte ptr es: ;属性增加1,改变颜色
int9ret:
pop es
pop bx
pop ax
iret
code ends
end start
按书上的提示,这个代码按ESC的效果需要在纯dos下整。 或者按照这个模拟也可以实现:http://bbs.fishc.com/thread-3581-1-1.html
页:
[1]