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

我的博客

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

[2009-10-17 01:52] 实验16

;编程:实现一个子程序setscreen,为显示输出提供如下功能:
;(1) 清屏。
;(2) 设置前景色。
;(3) 设置背景色。
;(4) 向上滚动一行。
;
;入口参数说明:
;(1) 用 ah 寄存器传递功能号:0 表示清屏,1表示设置前景色,2表示设置背景色,3 表示向上滚动一行;
;(2) 对于2、3号功能,用 al 传送颜色值,(al) ∈{0,1,2,3,4,5,6,7}


;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;通用中断安装程序 被安装开始标志install结束标志installend
;安装程序
assume cs:code
code segment
start:
mov ax,cs
mov ds,ax
mov si,offset install
mov ax,0
mov es,ax
mov di,200h
mov cx,offset installend-offset install
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
;
install:
setscreen:
jmp short set

table dw sub1-setscreen+200h,offset sub2-offset setscreen+200h,offset sub3-offset setscreen+200h,offset sub4-offset setscreen+200h



set:

push bx

cmp ah,3
ja sret
mov bl,ah
mov bh,0
add bx,bx   ;根据AH中的功能号,计算出对应子程序在TABLE表中的偏移


call word ptr cs:[bx+offset table-offset setscreen+200h]  ;teble段减去程序开始的位移加上200H,这样就定位了

sret:
pop bx
iret

;功能子程序1:清屏
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 ;sub1 ends

;功能子程序2:设置前景色
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 ;sub2 ends

;功能子程序3:设置背景色
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 sub2s

        pop es
        pop cx
        pop bx
        ret ; sub3 ends

;功能子程序4:向上滚动一行
sub4:        push cx
        push si
        push di
        push es
        push ds

        mov si,0b800h
        mov es,si
        mov ds,si
        mov si,160                        ;ds:si指向第n+1行
        mov di,0                        ;es:di指向第n行
        cld
        mov cx,24;共复制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 ;sub4 ends

installend:nop
code ends
end start
评论次数(0)  |  浏览次数(618)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码