汇编网首页登录博客注册
x_miracle的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
文章收藏

[2009-04-08 16:10] 重发实验16

assume cs:code,ds:data 
data segment 
    s1 db 'screen function!','$' 
    s2 db 'q is quit!','$'  
data ends 
code segment 
start:        mov ax,cs
        mov ds,ax
        mov si,offset screen
        mov ax,0
        mov es,ax
        mov di,200h
        mov cx,offset funcend-offset screen
        cld
        rep movsb

        mov word ptr es:[4*7ch],0
        mov word ptr es:[4*7ch+2],20h 

  
            mov ah,2 
            mov bh,0 
            mov dh,0 
            mov dl,12 
            int 10h 

            mov ax,data 
            mov ds,ax 
            mov dx,offset s1 
            mov ah,9 
            int 21h 

            mov ah,2 
            mov bh,0 
            mov dh,1 
            mov dl,12 
            int 10h 

            mov ax,data 
            mov ds,ax 
            mov dx,offset s2 
            mov ah,9 
            int 21h 
        mov al,1 
           mov ah,1                      ;输出s1,s2字符串,主要是为了便于观察效果  
        int 7ch                             
        mov ax,4c00h
        int 21h 
screen:        
jmp short c1
table: dw offset sub1-offset screen,offset sub2-offset screen,offset sub3-offset screen,offset sub4-offset screen
c1:     push bx 
            push ax
        push ax          
            cmp ah,3 
        ja sret                    
        mov bl,ah  
        mov bh,0  
        add bx,bx 
        call word ptr cs:[offset table-offset screen+bx] 
        call delay
        pop ax
        inc ah
        inc al
        jmp short c1
sret:
        pop ax 
            pop bx 
            iret 
 

delay: ;延时子程序 
        push ax 
        push dx 
        mov dx,1500h 
        mov ax,0 
s3:     sub ax,1 
        sbb dx,0 
        cmp ax,0 
        jne s3 
        cmp dx,0 
        jne s3 
        pop dx 
        pop ax 
        ret 
 
sub1: ;清屏 
push bx 
push cx 
push es 
mov bx,0b800h 
mov es,bx 
mov bx,0 
mov cx,2000 
sub1s:mov byte ptr es:[bx],' ' 
add bx,2 
loop sub1s 
pop es 
pop cx 
pop bx 
ret 

sub2: ;设置前景色 
push bx 
push cx 
push es 
mov bx,0b800h 
mov es,bx 
mov bx,1 
mov cx,2000 
sub2s:and byte ptr es:[bx],11111000b 
or es:[bx],al 
add bx,2 
loop sub2s 

pop es 
pop cx 
pop bx 
ret 
 
sub3: ;设置背景色 
push bx 
push cx 
push es 
mov cl,4 
shl al,cl 
mov bx,0b800h 
mov es,bx 
mov bx,1 
mov cx,2000 
sub3s:and byte ptr es:[bx],10001111b 
or es:[bx],al 
add bx,2 
loop sub3s 
pop es 
pop cx 
pop bx 
ret 
 
sub4: ;向上滚动一行 
    push cx 
        push si 
        push di 
        push es 
        push ds 
     
    mov si,0b800h 
        mov es,si 
        mov ds,si 
        mov si,160 
        mov di,0 
        cld 
        mov cx,24 
sub4s:  push cx 
        mov cx,160 
        rep movsb 
        pop cx 
        loop sub4s 

        mov cx,80 
        mov si,0 
sub4s1: mov byte ptr es:[160*24+si],' ' 
        add si,2 
        loop sub4s1 
    pop ds 
        pop es 
        pop di 
        pop si 
        pop cx 
        ret 
funcend:nop
code ends 
end start 
今天终于把实验16实现,唯一的遗憾要在全屏DOS下能看到效果呵呵!
评论次数(1)  |  浏览次数(880)  |  类型(汇编作业) |  收藏此文  | 

[  younggay   发表于  2009-04-15 18:07  ]

不错,加油。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码