![]() |
#2
zhuzhuchar2008-01-02 18:14
循环打印26个字母,按Esc变色。
;keyboar change color ;a15_key.asm assume cs:code 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:[9*4] pop ds:[0] push es:[9*4+2] pop ds:[2] cli mov word ptr es:[9*4],offset int9 mov es:[9*4+2],cs sti mov ax,0b800h mov es,ax mov ah,'a' s: mov es:[160*12+40*2],ah call delay inc ah cmp ah,'z' jna s mov ax,0 mov es,ax cli push ds:[0] pop es:[9*4] push ds:[2] pop es:[9*4+2] sti mov ax,4c00h int 21h delay: push ax push dx mov dx,1000h 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 int9: push ax push bx push es in al,60h pushf pushf pop bx and bh,11111100b push bx popf call dword ptr ds:[0] ; cmp al,1 jne int9ret mov ax,0b800h mov es,ax inc byte ptr es:[160*12+40*2+1] int9ret: pop es pop bx pop ax iret code ends end start [url]http://www.[/url] 看看这个博文,转自汇编网博客 |
运行时每按一下键盘屏幕显示的字符应有变化,但是却没变化为啥??
DATAS SEGMENT
dw 0,0;
DATAS ENDS
STACKS SEGMENT
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
mov ax,0
mov es,ax
mov ax,datas
mov ds,ax
push es:[9*4]
pop ds:[0]
push es:[9*4+2]
pop ds:[2]
mov word ptr es:[9*4],offset do1
mov es:[9*4+2],cs
mov ah,2
mov dl,3
lop:int 21h
call delay
jmp lop
MOV AH,4CH
INT 21H
delay: push ax
push dx
mov ax,0
mov dx,1000h
s: sub ax,1
sbb dx,0
cmp ax,0
jne s
cmp dx,0
jne s
pop dx
pop ax
ret
do1: push ax
push bx
mov ax,datas
mov ds,ax
pushf
pushf
pop bx
and bh,11111100b
push bx
popf
call dword ptr ds:[0]
inc dl
pop bx
pop ax
iret
CODES ENDS
END START