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

我的博客

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

[2009-04-15 12:08] 实验16

ASSUME CS:CODES
CODES SEGMENT

START:
    MOV AH,3;功能号
    MOV AL,01000010B;前景色,背景色的颜色设置
    
    MOV BX,0B800H
    MOV ES,BX 
       
    MOV DI,0
    MOV SI,0
    MOV CX,2000
PRINT:
    MOV BYTE PTR ES:[DI],CL
    MOV ES:[DI+1],00100100B
    ADD DI,2
    INC SI
    LOOP PRINT 
    
    CALL SETSCREEN
    MOV AH,4CH
    INT 21h
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    
;SetScreen:
           ;JMP SHORT SET
           ;TABLE DW SUB1,SUB2,SUB3,SUB4
;SET:
        ;PUSH BX        ;000F
        ;CMP AH,3
        ;JA SRET;0013 0b
        ;
        ;MOV BL,AH
        ;MOV BH,0
        ;ADD BX,BX
        ;CALL WORD PTR TABLE[BX];001c        
;SRET:
        ;POP BX
        ;RET
;;;;;方法二
SetScreen:
        CMP AH,0
        JE DO1
        CMP AH,1
        JE DO2
        CMP AH,2
        JE DO3
        CMP AH,3
        JE DO4
        JMP SHORT SRET
DO1:
        CALL SUB1
        JMP SHORT SRET
DO2:
        CALL SUB2
        JMP SHORT SRET
DO3:
        CALL SUB3
        JMP SHORT SRET
DO4:
        CALL SUB4
SRET:
        RET
        
;清屏:将显存中当前屏幕中的字符设为空格符
SUB1:
        PUSH BX
        PUSH CX
        PUSH ES
        
        MOV BX,0B800H
        MOV ES,BX
        
        MOV BX,0
        MOV CX,2000;25行*80个字符
SetNull:
          MOV BYTE PTR ES:[BX],' '
          ADD BX,2
          LOOP SetNull
          
          POP ES
          POP CX
          POP BX
          RET
;设置前景色:设置显存中处于奇地址的属性字节的第0,1,2位
SUB2:
        PUSH BX
        PUSH CX
        PUSH ES
        ;;;;
        MOV BX,0B800H
        MOV ES,BX
        
        MOV BX,1
        MOV CX,2000
SETFRONTCLR:
        AND BYTE PTR ES:[BX],10001111B
        OR  ES:[BX],AL
        ADD BX,2
        LOOP SETFRONTCLR
        
        POP ES
        POP CX
        POP BX        
        RET 
        ;;;;;
;设置背景色:设置显存中当前屏幕中处于奇地址的第4,5,6位
SUB3:
        PUSH BX
        PUSH CX
        PUSH ES
        
        MOV BX,0B800H
        MOV ES,BX
        
        MOV BX,1
        MOV CX,2000
SETBKCLR:
        AND BYTE PTR ES:[BX],10001111B
        OR ES:[BX],AL
        ADD BX,2
        LOOP SETBKCLR
        POP ES
        POP CX
        POP BX
        RET
        
;向上滚动一行:一次将第N+1行的内容复制到第N行处;最后一行为空
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;一共复制24行
ROLLABV:
        PUSH CX
        MOV CX,160;每行80个字符,一个字符占2个字节
        REP MOVSB
        POP CX
        LOOP ROLLABV
        
        MOV CX,80
    MOV SI,0
ROLLLST:
         MOV BYTE PTR [160*24+SI],' '
         ADD SI,2
         LOOP ROLLLST
         
        POP DS
        POP ES
        POP DI
        POP SI
        POP CX
        RET
CODES ENDS
    END START
评论次数(1)  |  浏览次数(649)  |  类型(汇编作业) |  收藏此文  | 

[  tomato   发表于  2009-04-17 15:26  ]

MOV BX,0B800H 
    MOV ES,BX  
        
    MOV DI,0 
    MOV SI,0 
    MOV CX,2000 
PRINT: 
    MOV BYTE PTR ES:[DI],CL 
    MOV ES:[DI+1],00100100B 
    ADD DI,2 
    INC SI 
    LOOP PRINT
这段代码看不明白是干嘛的!请博主指教!

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