zoukankan      html  css  js  c++  java
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程

    汇编语言 实验16 编写包含多个功能子程序的中断例程


    实验要求

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

    参考程序

    ;安装一个新的int7ch终端例程,为显示输出提供如下功能子程序
    ;入口参数:
        ;ah传递功能号
        ;al传递颜色值
    assume cs:code
    code segment
    start:
        mov bx,cs
        mov ds,bx
        mov si,offset int7ch
        mov bx,0
        mov es,bx
        mov di,200h
        mov cx,offset int7ch_end-offset int7ch
        cld
        rep movsb
        cli
        mov word ptr es:[7ch*4],200h
        mov word ptr es:[7ch*4+2],0
        sti
    
        mov ah,2
        mov al,2
        int 7ch
    
        mov ax,4c00h
        int 21h
        ORG 200H
    ;中断例程
    int7ch:
        push ax
        push bx
        jmp begin
        table dw sub0,sub1,sub2,sub3
    begin:
        cmp ah,3
        ja sret
        add bl,ah
        mov bh,0
        add bx,bx
        call word ptr table[bx]
    sret:
        pop ax
        pop bx
        iret
    
    ;清屏
    sub0:
        push bx
        push es
        push ds
        push di
        push si
        push cx
        mov bx,0b800h
        mov es,bx
        mov ds,bx
        mov si,160
        mov di,0
        mov cx,24
        cld
    sub0s:
        push cx
        mov cx,160
        movsb
        mov cx,80
        mov si,0
        pop cx              ;
        loop sub0s          ;
    sub0ss:
        mov word ptr es:[si][160*24],' '
        add si,2
        loop sub0ss
        pop cx
        pop si
        pop di
        pop ds
        pop es
        pop bx
        ret
    ;改变前景色
    sub1:
        push ax
        push bx
        push es
        push cx
        push di
        mov bx,0b800h
        mov es,bx
        mov di,1
        mov cx,2000
    sub1s:
        and byte ptr es:[di],11111000b
        or es:[di],al
        add di,2
        loop sub1s
        pop di
        pop cx
        pop es
        pop bx
        pop ax
        ret
    ;改变背景色  
    sub2:
        push bx
        push es
        push cx
        mov cl,4    ;al的取值范围是0-7,只占前4个字节
        shl al,cl   ;但是背景色是第4-6位,所以无法重合,需要左移4位
        mov bx,0b800h
        mov es,bx
        mov bx,1
        mov cx,2000
    sub2s:
        and byte ptr es:[bx],10001111b
        or es:[bx],al
        add bx,2
        loop sub2s
        pop cx
        pop es
        pop bx
        ret
    ;向上滚动一行
    sub3:
        push bx
        push es
        push ds
        push di
        push si
        push cx
        mov bx,0b800h
        mov es,bx
        mov ds,bx
        mov di,0
        mov si,160
        cld
        mov cx,24
    sub3s:
        push cx
        mov di,0
        mov si,160
        mov cx,160
        rep movsb
        pop cx
        loop sub3s
    sub3ss:
        mov byte ptr [160*24+si],' '    ;
        add si,2
        loop sub3ss;最后一行清空
        pop cx
        pop si
        pop di
        pop ds
        pop es
        pop bx
        ret
    
    int7ch_end:
        nop
    code ends
    end start

    中间又断了那么多天,今天是七月十号,就当做暑假第一天吧。
    2017年7月10日17:26:42
    
  • 相关阅读:
    转:浅谈深度学习(Deep Learning)的基本思想和方法
    随记:我们需要怎样的数学教育?
    转 :hlda文献学习笔记
    转:关于Latent Dirichlet Allocation及Hierarchical LDA模型的必读文章和相关代码
    推荐算法相关总结表(包括DM)
    转 自己动手写推荐系统
    求熵 python 代码
    特征值与特征向量
    转: 谱聚类
    链接数据库
  • 原文地址:https://www.cnblogs.com/litlife/p/7512768.html
Copyright © 2011-2022 走看看