大白鲨 发表于 2014-4-19 15:28:20

这程序有问题吗,实验16习题

;编写子程序实现功能1,清屏2,设置前景色 3,设置背景色 4,向上滚动一行
assume cs:code
code segment

start: mov ax,cs
           mov ds,ax
           mov si,offset int7
           mov ax,0
           mov es,ax
           mov di,200h
          
           mov cx,offset int7ch-offset int7
           cld
           rep movsb
          
           mov ax,0
           mov es,ax
           mov word ptr es:,200h
           mov word ptr es:,0
          
           mov ah,2    ;ah传递执行子程序的序号0:清屏   1:设置前景色   2:设置背景色   3:向上滚动一行
           mov al,2    ;al存储颜色       
           int 7ch
                mov ax,4c00h
                int 21h
                ORG 200H
               
        int7:jmp short s0
    a dw fun1,fun2,fun3,fun4
        s0:push bx
           cmp ah,3
           ja s5
           mov bl,ah
           mov bh,0
           add bx,bx
           call word ptr a
           s5:pop bx
              nop
                  iret                  
   fun1:push bx   ;    清屏
                push es
                push cx
                mov bx,0b800h
                mov es,bx
                mov bx,0
                mov cx,2000
          s:mov byte ptr es:,' '
          add bx,2
                loop s
                pop cx
                pop es
                pop bx
                ret
               
   fun2:push bx   ;   设置前景色
                push es
                push cx
                mov bx,0b800h
                mov es,bx
                mov bx,1
                mov cx,2000
       s1:and byte ptr es:,11111000b
          or es:,al
                add bx,2
                loop s1
                pop cx
                pop es
                pop bx
                ret
               
fun3:        push bx   ;   设置背景色
                push es
                push cx
                shl al,1
                shl al,1
                shl al,1
                shl al,1
               
                mov bx,0b800h
                mov es,bx
                mov bx,1
                mov cx,2000
       s2:and byte ptr es:,10001111b
          or es:,al
                add bx,2
                loop s2
                pop cx
                pop es
                pop bx
                ret
               
fun4: push di   ;向上滚动一行
                push es
                push cx
                push si
                push ds
                mov di,0b800h
          mov es,di
                mov ds,di
                mov di,0
                mov si,160
                mov cx,24
        s3: push cx
          mov cx,160
          cld
          rep movsb
          pop cx
          loop s3
          
          mov si,0
          mov cx,80
       s4:mov byte ptr es:,' '
          add si,2
          loop s4
          
                pop ds
                pop di
                pop cx
                pop es
                pop bx
                ret
int7ch:nop
code ends
end start


页: [1]
查看完整版本: 这程序有问题吗,实验16习题