鱼C论坛

 找回密码
 立即注册
查看: 2852|回复: 1

[汇编作业] 实验16

[复制链接]
发表于 2020-3-20 17:51:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume cs:code

code segment
start:
                mov ax,cs
                mov ds,ax
                mov si,offset do0
                mov ax,0
                mov es,ax
                mov di,200h                ;将do0写到0:200处
                mov cx,offset do0end-offset do0
                cld
                rep movsb
                
                ;设置中断向量表
                mov ax,0                                        
                mov es,ax                                                ;将es指向中断向量表
                mov word ptr es:[7ch*4],200h        ;发生7ch中断时跳转到0:200处执行
                mov word ptr es:[7ch*4+2],0
                
                mov ax,4c00h
                int 21h
                
                
;(1)清屏
;(2)设置前景色
;(3)设置背景色
;(4)向上滚动一行                
;参数:
;ah:功能号,0清屏,1设置前景色,2设置背景色,3向上滚动一行
;针对1,2号功能,用al传递颜色值,0<=al<=7
do0:        jmp short set
table: dw 200h+offset sub1-offset do0,200h+offset sub2-offset do0,200h+offset sub3-offset do0,200h+offset sub4-offset do0 

set:        
                cmp ah,3
                ja sret 
                
                push es
                push si
                push ax
                push cx
                push bx
                push di
                
                mov cx,0B800H
                mov es,cx
                mov si,0        
                add ah,ah                                        ;word两字节,ah*2
                mov cx,0
                mov cl,ah
                mov bx,200h+offset table-offset do0
                add bx,cx
                call word ptr cs:[bx]                ;调用对应的功能子程序
                
                pop di
                pop bx
                pop cx
                pop ax
                pop si
                pop es
                
sret:        iret
                
sub1:
                mov ax,0020H        ;' '                
                mov cx,80*25                ;每页80*25个字符
        s0:        mov es:[si],ax
                add si,2
                loop s0
                ret
                
sub2:
                mov cx,80*25                ;每页80*25个字符
                cmp al,1
                jb rsub2
                cmp al,7
                ja rsub2
                
        s1:        
                mov bh,es:[si+1]
                and bh,11111000b        ;前景色清零
                or bh,al
                mov es:[si+1],bh
                add si,2
                loop s1
rsub2:        ret 
                
sub3:
                mov cx,80*25                ;每页80*25个字符
                cmp al,1
                jb rsub3
                cmp al,7
                ja rsub3
                shl al,1
                shl al,1
                shl al,1
                shl al,1
                
        s2:        
                mov bh,es:[si+1]
                and bh,10001111b        ;被景色清零

                or bh,al
                mov es:[si+1],bh
                add si,2
                loop s2
rsub3:        ret 

sub4:
                mov cx,80*24        
                mov di,160
        s3:        
                mov ax,es:[di]
                mov es:[si],ax
                add si,2
                add di,2
                loop s3
                
                mov cx,80                        ;清空最后一行
                mov bh,20H
        s4:        mov es:[si],bh
                add si,2
                loop s4
                ret

do0end: nop                

code ends
end start

心情不太好,感觉有点乱糟糟的,懒得改了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-20 17:51:43 | 显示全部楼层
测试程序
assume cs:code 

code segment
start:
                ;设置前景色为2  ok
                mov al,2
                mov ah,1
                int 7ch
                call delay
                ;设置背景色 4
                mov al,4
                mov ah,2
                int 7ch
                call delay        
                
                ;向上滚动一行
                mov ah,3
                int 7ch
                call delay
                
                ;清屏
                mov ah,0
                int 7ch
                call delay

                
                mov ax,4c00h
                int 21h
        
        
        
delay:        push ax
                push dx
                mov dx,10h
                mov ax,0
                
s1:                sub ax,1
                sbb dx,0
                jne s1
                
                cmp dx,0
                jne s1
                pop dx
                pop ax
                ret
        


code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 11:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表