zoukankan      html  css  js  c++  java
  • 实验十六_编写包含多个功能子程序的中断例程

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

    分析:
    首先:搭建框架:
            
            int 7ch例程安装

            设置中断向量表
            
            程序返回
    int7:
            寄存器入栈

            入口地址直接定值,sub 1、2、3、4

            寄存器出栈
    int7end:nop

    其次:编写测试程序测试上述功能,前提是先加载int 7ch例程。
        可以直接在debug中通过设置al和ah的值然后掉用int 7ch来实现。

    补充:
    向上滚动代码实现分析:
            第n+1(n从1开始)行的字符一个个覆盖第n行的字符,反复循环,循环次数80*24(屏幕行数减一)

    完整程序如下:

    assume cs:code 
    code segment 
    start:  mov ax,cs 
            mov ds,ax 
            mov si,offset int7;ds:si指向源地址 
            mov ax,0 
            mov es,ax 
            mov di,200h;es:si指向目的地址 
            mov cx,offset int7end - offset int7 
            cld 
            rep movsb 
             
            mov es:[7CH*4],200h 
            mov es:[7CH*4+2],0 
    
            mov ax,4c00h 
            int 21h 
             
    int7:   push bx 
            jmp short begin 
            dw sub1-int7+200h, sub2-int7+200h, sub3-int7+200h, sub4-int7+200h;有无offset操作符皆可,这里为了程序看起来简洁,先略去 
      begin:cmp ah,3 
            ja int7ret 
            mov bl,ah 
            add bl,bl 
            mov bh,0 
    
            call cs:[bx+203h];push bx,jmp short begin占三个机器码 
             
    int7ret:POP bx 
            mov ax,4c00h 
            int 21h 
    ;---------------------------------------------------         
    sub1:   push ax 
            push cx 
            push es 
            push di 
             
            mov ax,0b800h 
            mov es,ax 
            mov di,0 
            mov cx,2000 
    sub1_s:mov byte ptr es:[di],' ' 
            add di,2 
            loop sub1_s 
             
            pop di 
            pop es 
            pop cx 
            pop ax 
            ret 
    ;---------------------------------------------------         
    sub2:   push ax 
            push cx 
            push es 
            push di 
    
            mov cx,0b800h 
            mov es,cx 
            mov di,1 
            mov cx,2000 
    sub2_s:and byte ptr es:[di],11111000B 
            or byte ptr es:[di],al 
            add di,2 
            loop sub2_s 
    
            pop di 
            pop es 
            pop cx 
            pop ax 
            ret 
    ;------------------------------------------------- 
    sub3:   push ax 
            push cx 
            push es 
            push di 
    
            mov cx,0b800h;注意这里不能用ax,因为al用来传递参数,当然也可以使用,不过要采取其他的手段,就显得麻烦了 
            mov es,cx 
            mov di,1 
            mov cl,4 
            shl al,cl 
            mov cx,2000 
    sub3_s:and byte ptr es:[di],10001111B 
            or byte ptr es:[di],al 
            add di,2 
            loop sub3_s 
    
            pop di 
            pop es 
            pop cx 
            pop ax 
            ret 
    ;---------------------------------------------------- 
    sub4:   push ax 
            push cx 
            push es 
            push di 
      
            mov ax,0b800h 
            mov es,ax 
            mov di,0 
            mov cx,80*24 
    sub4_s:mov al,es:[di+160] 
            mov es:[di],al 
            add di,2 
            loop sub4_s 
    
            pop di 
            pop es 
            pop cx 
            pop ax 
            ret 
    ;------------------------------------------------------ 
    int7end:nop 
    code ends 
    end start 


     

  • 相关阅读:
    HDU 1069 Monkey and Banana
    HDU 1029 Ignatius and the Princess IV
    HDU 1024 Max Sum Plus Plus
    Gym100923H Por Costel and the Match
    Codeforces 682C Alyona and the Tree
    Codeforces 449B Jzzhu and Cities
    Codeforces (ccpc-wannafly camp day2) L. Por Costel and the Semipalindromes
    Codeforces 598D (ccpc-wannafly camp day1) Igor In the Museum
    Codeforces 1167c(ccpc wannafly camp day1) News Distribution 并查集模板
    快乐数问题
  • 原文地址:https://www.cnblogs.com/xpjiang/p/4524427.html
Copyright © 2011-2022 走看看