|
主题 : : 哈哈,独立完成实验16.没有参考书上的代码,调式成功,贴上来炫一下 [已解决] |
回复[ 2次 ]
点击[ 318次 ] | |
荣誉值:22
信誉值:12
注册日期:2009-08-28 00:17 |
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset setscreen
mov ax,0
mov es,ax
mov di,200h
mov cx,offset setscreenend-offset setscreen
cld
rep movsb
mov ax,0
mov es,ax
mov word ptr es:[7ch*4],200h
mov word ptr es:[7ch*4+2],0
mov ax,4c00h
int 21h
setscreen:
push ax
push bx
push cx
push dx
push si
push di
push ds
push es
cmp ah,0
je cls
cmp ah,1
je foreground
cmp ah,2
je background
cmp ah,3
je scroll
totalret:
pop es
pop ds
pop di
pop si
pop dx
pop cx
pop bx
pop ax
iret
;----------------------------------------------------
cls:
mov bx,0b800h
mov ds,bx
mov bx,0
mov cx,2000
s1:
mov byte ptr [bx],20h
add bx,2
loop s1
jmp totalret
;---------------------------------------------------
foreground:
;check the range of al is 0-7
cmp al,0
jb break1
cmp al,7
ja break1
mov bx,0b800h
mov ds,bx
mov bx,1
mov cx,2000
s2:
and byte ptr [bx],11111000b;clear old foreground color
or [bx],al;set new foreground color
add bx,2
loop s2
break1:
jmp totalret
;----------------------------------------------------
background:
push ax;because of shl al
;check the range of al is 0-7
cmp al,0
jb break2
cmp al,7
ja break2
mov bx,0b800h
mov ds,bx
mov bx,1
mov cx,2000
s3:
pop ax
push ax
and byte ptr [bx],10001111b;clear old background color
shl al,1;change to 0xxx0000b
shl al,1
shl al,1
shl al,1
or [bx],al;set new background color
add bx,2
loop s3
break2:
pop ax
jmp totalret
;----------------------------------------------------
scroll:
mov bx,0b800h
mov ds,bx
mov si,160;line1
mov es,bx
mov di,0;line0
mov cx,24
s4:
push cx
mov cx,160
cld
rep movsb;movsb,and cld,so si++,di++
pop cx
loop s4
mov cx,80
s5:
mov word ptr es:[di],0020h
add di,2
loop s5
jmp totalret
setscreenend:
nop
code ends
end start
函数命名很干净吧!一看就知道。还有些英文注释。因为是独立完成,所以跟书上的代码还是很不一样滴。当然,我承认我看了他的文字提示。 | | |