. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->直接定址表
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  让我晕乎了一天的实验16,哎。。  [待解决] 回复[ 5次 ]   点击[ 584次 ]  
ldlihuanfa
[帖 主]   [ 发表时间:2010-03-12 12:22 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53
看了半天别人的帖子的,才发现其实不复杂,
assume cs:code 

stack segment 
        db 128 dup (0) 
stack ends 

code segment 
                 
                 
               
        setscreen: 
                jmp short set 
                table dw sub1+200h, sub2+200h, sub3+200h, sub4+200h  这里
        set: 
                push bx 
                cmp ah, 3 
                ja sret 
                mov bl, ah 
                mov bh, 0 
                add bx, bx 
                call word ptr table[bx+200h]   这里
        sret: 
                pop bx 
                iret 
     
        sub1: 
                push bx 
                push cx 
                push es 
                 
                mov bx, 0b800h 
                mov es, bx 
                mov bx, 0 
                mov cx, 2000 
        s1: 
                mov byte ptr es:[bx], ' ' 
                add bx, 2 
                loop s1 
                 
                pop es 
                pop cx 
                pop bx 
                ret 
         
        
        sub2: 
                push bx 
                push cx 
                push es 
                 
                mov bx, 0b800h 
                mov es, bx 
                mov bx, 1 
                mov cx, 2000 
        s2: 
                and byte ptr es:[bx], 11111000b 
                or es:[bx], al 
                add bx, 2 
                loop s2 
                 
                pop es 
                pop cx 
                pop bx 
                ret 

        
        sub3: 
                push bx 
                push cx 
                push es 
                 
                mov cl, 4 
                shl al, cl 
                 
                mov bx, 0b800h 
                mov es, bx 
                mov bx, 1 
                mov cx, 2000 
        s3: 
                and byte ptr es:[bx], 10001111b 
                or es:[bx], al 
                add bx, 2 
                loop s3 
                 
                pop es 
                pop cx 
                pop bx 
                ret 

        
        sub4: 
                push cx 
                push di 
                push si 
                push ds 
                push es 
                 
                mov si, 0b800h 
                mov ds, si 
                mov es, si 
                mov si, 160             
                mov di, 0               
                cld                 
                 
        s4: 
                push cx 
                mov cl, 160                
                rep movsb 
                pop cx 
                loop s4 
                 
                mov cx, 80                 
                mov si, 0 
        s42: 
                mov byte ptr es:[160*24+si], ' ' 
                add si, 2 
                loop s42 
                 
                pop es 
                pop ds 
                pop si 
                pop di 
                pop cx 
                ret 
        setscreenend: 
                nop 
                 
        start: 
                mov ax, stack 
                mov ss, ax 
                mov sp, 128 
                 
               
                mov ax, cs 
                mov ds, ax 
                mov si, offset setscreen        
                 
                mov ax, 0 
                mov es, ax 
                mov di, 200h                                
                 
                mov cx, offset setscreenend - offset setscreen        
                cld                                        
                rep movsb 
                 
                
                
                mov ax, 0 
                mov es, ax 
                mov word ptr es:[7ch*4], 200h 
                mov word ptr es:[7ch*4+2], 0h
            
                 
                mov ax, 4c00h 
                int 21h 
         
        
                 
code ends 
end start
qing_liang
[第1楼]   [ 回复时间:2010-03-23 17:13 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-05 21:32
怎么运行了什么都没有啊,不用从键盘上输1,2,3,4,吗?还是这个程序什么都不显示啊,
qing_liang
[第2楼]   [ 回复时间:2010-03-24 15:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-05 21:32
回复:[贴 主]
------------------
assume cs:code  

stack segment  
        db 128 dup (0)  
stack ends  

code segment  
                  
                  
                
        setscreen:  
                jmp short set  
                table dw sub1+200h, sub2+200h, sub3+200h, sub4+200h  这里 
        set:  
                push bx 
 
                cmp ah, 3  
                ja sret  
                mov bl, ah  
                mov bh, 0  
                add bx, bx  
                call word ptr table[bx+200h]   这里 
        sret:  
                pop bx  
                iret  
      
        sub1:  
                push bx  
                push cx  
                push es  
                  
                mov bx, 0b800h  
                mov es, bx  
                mov bx, 0  
                mov cx, 2000  
        s1:  
                mov byte ptr es:[bx], ' '  
                add bx, 2  
                loop s1  
                  
                pop es  
                pop cx  
                pop bx  
                ret  
          
         
        sub2:  
                push bx  
                push cx  
                push es  
                  
                mov bx, 0b800h  
                mov es, bx  
                mov bx, 1  
                mov cx, 2000  
        s2:  
                and byte ptr es:[bx], 11111000b  
                or es:[bx], al  
                add bx, 2  
                loop s2  
                  
                pop es  
                pop cx  
                pop bx  
                ret  

         
        sub3:  
                push bx  
                push cx  
                push es  
                  
                mov cl, 4  
                shl al, cl  
                  
                mov bx, 0b800h  
                mov es, bx  
                mov bx, 1  
                mov cx, 2000  
        s3:  
                and byte ptr es:[bx], 10001111b  
                or es:[bx], al  
                add bx, 2  
                loop s3  
                  
                pop es  
                pop cx  
                pop bx  
                ret  

         
        sub4:  
                push cx  
                push di  
                push si  
                push ds  
                push es  
                  
                mov si, 0b800h  
                mov ds, si  
                mov es, si  
                mov si, 160              
                mov di, 0                
                cld                  
                  
        s4:  
                push cx  
                mov cl, 160                 
                rep movsb  
                pop cx  
                loop s4  
                  
                mov cx, 80                  
                mov si, 0  
        s42:  
                mov byte ptr es:[160*24+si], ' '  
                add si, 2  
                loop s42  
                  
                pop es  
                pop ds  
                pop si  
                pop di  
                pop cx  
                ret  
        setscreenend:  
                nop  
                  
        start:  
                mov ax, stack  
                mov ss, ax  
                mov sp, 128  
                  
                
                mov ax, cs  
                mov ds, ax  
                mov si, offset setscreen         
                  
                mov ax, 0  
                mov es, ax  
                mov di, 200h                                 
                  
                mov cx, offset setscreenend - offset setscreen         
                cld                                         
                rep movsb  
                  
                 
                 
                mov ax, 0  
                mov es, ax  
                mov word ptr es:[7ch*4], 200h  
                mov word ptr es:[7ch*4+2], 0h 
             
                int 7ch
                mov ax, 4c00h  
                int 21h  
          
         
                  
code ends  
end start
qing_liang
[第3楼]   [ 回复时间:2010-03-24 15:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-05 21:32
回复:[贴 主]
------------------
assume cs:code  

stack segment  
        db 128 dup (0)  
stack ends  

code segment  
                  
                  
                
        setscreen:  
                jmp short set  
                table dw sub1+200h, sub2+200h, sub3+200h, sub4+200h  这里 
        set:  
                push bx 
 
                cmp ah, 3  
                ja sret  
                mov bl, ah  
                mov bh, 0  
                add bx, bx  
                call word ptr table[bx+200h]   这里 
        sret:  
                pop bx  
                iret  
      
        sub1:  
                push bx  
                push cx  
                push es  
                  
                mov bx, 0b800h  
                mov es, bx  
                mov bx, 0  
                mov cx, 2000  
        s1:  
                mov byte ptr es:[bx], ' '  
                add bx, 2  
                loop s1  
                  
                pop es  
                pop cx  
                pop bx  
                ret  
          
         
        sub2:  
                push bx  
                push cx  
                push es  
                  
                mov bx, 0b800h  
                mov es, bx  
                mov bx, 1  
                mov cx, 2000  
        s2:  
                and byte ptr es:[bx], 11111000b  
                or es:[bx], al  
                add bx, 2  
                loop s2  
                  
                pop es  
                pop cx  
                pop bx  
                ret  

         
        sub3:  
                push bx  
                push cx  
                push es  
                  
                mov cl, 4  
                shl al, cl  
                  
                mov bx, 0b800h  
                mov es, bx  
                mov bx, 1  
                mov cx, 2000  
        s3:  
                and byte ptr es:[bx], 10001111b  
                or es:[bx], al  
                add bx, 2  
                loop s3  
                  
                pop es  
                pop cx  
                pop bx  
                ret  

         
        sub4:  
                push cx  
                push di  
                push si  
                push ds  
                push es  
                  
                mov si, 0b800h  
                mov ds, si  
                mov es, si  
                mov si, 160              
                mov di, 0                
                cld                  
                  
        s4:  
                push cx  
                mov cl, 160                 
                rep movsb  
                pop cx  
                loop s4  
                  
                mov cx, 80                  
                mov si, 0  
        s42:  
                mov byte ptr es:[160*24+si], ' '  
                add si, 2  
                loop s42  
                  
                pop es  
                pop ds  
                pop si  
                pop di  
                pop cx  
                ret  
        setscreenend:  
                nop  
                  
        start:  
                mov ax, stack  
                mov ss, ax  
                mov sp, 128  
                  
                
                mov ax, cs  
                mov ds, ax  
                mov si, offset setscreen         
                  
                mov ax, 0  
                mov es, ax  
                mov di, 200h                                 
                  
                mov cx, offset setscreenend - offset setscreen         
                cld                                         
                rep movsb  
                  
                 
                 
                mov ax, 0  
                mov es, ax  
                mov word ptr es:[7ch*4], 200h  
                mov word ptr es:[7ch*4+2], 0h 
             
                int 7ch
                mov ax, 4c00h  
                int 21h  
          
         
                  
code ends  
end start
ldlihuanfa
[第4楼]   [ 回复时间:2010-03-27 11:38 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53
这只是一个int7ch中断安装程序而己,哎。。楼上的兄弟还得好好看看书。
安装好了之后,你可以调用int 7ch完成里面的功能
随便写一个简单程序来测试这个int7ch是否能正常运行,完成里面的功能
ldlihuanfa
[第5楼]   [ 回复时间:2010-03-27 11:39 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53
其实就是和书上的程序一样,就是我写了‘这里“的地方有一点不同。。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved