. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->直接定址表
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  哈哈,独立完成实验16.没有参考书上的代码,调式成功,贴上来炫一下  [已解决] 回复[ 2次 ]   点击[ 318次 ]  
gift925
[帖 主]   [ 发表时间:2009-09-04 20:12 ]   [引用]   [回复]   [ top ] 
荣誉值: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


函数命名很干净吧!一看就知道。还有些英文注释。因为是独立完成,所以跟书上的代码还是很不一样滴。当然,我承认我看了他的文字提示。
wsrf
[第1楼]   [ 回复时间:2009-09-10 09:11 ]   [引用]   [回复]   [ top ] 
荣誉值:33
信誉值:0
注册日期:2008-10-16 10:01
支持一下。
gift925
[第2楼]   [ 回复时间:2009-09-14 12:22 ]   [引用]   [回复]   [ top ] 
荣誉值:22
信誉值:12
注册日期:2009-08-28 00:17
此贴由 贴主 于 [ 2009-09-14 12:22 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(wsrf):2分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved