• 汇编题目:编写包含多个功能子程序的中断例程


    安装一个新的int  7ch中断例程,为显示输出提供如下的功能子程序。

    (1)清屏。
    (2)设置前景色。
    (3)设置背景色。
    (4)向上滚动一行

    (一)用ah寄存器传递功能号:0表示清屏,1表示设置前景色,2表示设置背景色,3表示向上滚动一行;

    (二)对于2、3号功能,用al传递颜色值,(al)∈{0,1,2,3,4,5,6,7}。

    代码如下:

    ;功能:安装一个新的int7ch中断例程,实现一个子程序 setScreen ,提供如下功能:
    ; (1)清屏。
    ; (2)设置前景色。
    ; (3)设置背景色。
    ; (4)向上滚动一行
    
    ; 入口参数说明:
    ; (1)每个子程序用 ah 寄存器传递功能号:
    ; (2)对于2、3号功能,用al传送颜色值,
    
    assume cs:code,ds:data
      data segment  
        err db '   ~~~~~ ah args is error! ~~~~~','$'
        init dw 10 dup(0)
      data ends
        
    code segment
        start:
        mov ax,data
        mov ds,ax
        mov ax,0
        mov es,ax
        mov ax,es:[7ch*4]
        mov init[0],ax
        mov ax,es:[7ch*4+2]
        mov init[1],ax
        
        mov es:[7ch*4],offset setScreen
        mov es:[7ch*4+2],cs
        
        
        
        
        mov ax,102h
        int 7ch
        ;call breakPoint
        mov ax,201h
        int 7ch
        ;call breakPoint
        mov ax,300h
        int 7ch
        ;call breakPoint
        mov ax,0h
        int 7ch
        mov ax,400h
        int 7ch
        
        
        mov ax,0
        mov es,ax
        mov ax,data
        mov ds,ax
        mov ax,init[0]
        mov es:[7ch*4],ax
        mov ax,init[1]
        mov es:[7ch*4+2],ax
        
        ok: mov ax,4c00h
        int 21h
        
        
    setScreen:
        jmp short setmain
        list dw sub0,sub1,sub2,sub3
        
        setmain:
        cmp ah,3
        ja subErr
        mov bl,ah
        mov bh,0
        shl bx,1
        call word ptr list[bx]
        iret
        
        sub0:    ;清屏
        mov cx,0b800h
        mov es,cx
        mov cx,2000
        mov bx,0
        sub0s:
        mov byte ptr es:[bx],' '
        add bx,2
        loop sub0s
        ret
        
        sub1:    ;设置前景色。
        mov cx,0b800h
        mov es,cx
        mov cx,2000
        mov bx,1
        sub1s:
        and byte ptr es:[bx],11111000b
        or es:[bx],al
        add bx,2
        loop sub1s
        ret
        
        sub2:    ;设置背景色。
        mov cx,0b800h
        mov es,cx
        mov cx,2000
        mov bx,1
        shl al,1
        shl al,1
        shl al,1
        shl al,1
        sub2s:
        and byte ptr es:[bx],10001111b
        or es:[bx],al
        add bx,2
        loop sub2s
        ret
        
        sub3:    ;向上滚动一行
        mov cx,0b800h
        mov es,cx
        mov ds,cx
        mov di,0
        mov si,160
        cli
        mov cx,24
        sub3s:
        push cx
        mov cx,160
        rep movsb
        pop cx
        loop sub3s
        mov cx,160
        mov bx,0
        sub3s1:
        mov byte ptr es:3840[bx],' '
        add bx,2
        loop sub3s1
        ret
        
        
        subErr:    ;显示错误信息
        mov ax,data
        mov ds,ax
        mov ah,9
        mov dx,offset err
        int 21h
        jmp ok
        
        
        
    breakPoint:    ;设置断点,用于调试
        pushf
        pop bx
        or bh,3
        push bx
        popf
        ret
        
        code ends
     end start
  • 相关阅读:
    Java ee第七周作业
    Java ee第六周作业
    Java ee第五周作业
    Java ee第四周作业
    Java ee第三周作业
    第二周作业-web后台应用开发与xml
    Java ee第一周的作业
    在团队项目中我对自己的总结
    两人合作,黄金点游戏
    c语言实现wc功能
  • 原文地址:https://www.cnblogs.com/mq0036/p/5163181.html
Copyright © 2020-2023  润新知