. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->直接定址表
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验16。完成  [待解决] 回复[ 2次 ]   点击[ 539次 ]  
liuquanhao7232
[帖 主]   [ 发表时间:2010-08-18 10:58 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:0
注册日期:2010-07-12 08:47
好吧,我承认我没有独立完成。参考了论坛才成功。

assume cs:code
code segment
setscreen:      jmp short set
              table dw sub1,sub2,sub3,sub4
                set:push bx
                    cmp ah,3
                    ja sret
                    mov bl,ah
                    mov bh,0
                    add bx,bx
                    call word ptr table[bx]
               sret:pop bx
                    iret
                    
               sub1:push es
                    push cx
                    push bx
                    mov bx,0b800h
                    mov es,bx
                    mov bx,0
                    mov cx,2000
              sub1s:mov byte ptr es:[bx],' '
                    add bx,2
                    loop sub1s
                    pop bx
                    pop cx
                    pop es
                    ret
                    
               sub2:push bx
                    push cx
                    push es
                    mov bx,0b800h
                    mov es,bx
                    mov bx,1
                    mov cx,2000
              sub2s:and byte ptr es:[bx],11111000b
                    or byte ptr es:[bx],al
                    add bx,2
                    loop sub2s
                    pop es
                    pop cx
                    pop bx
                    ret
                    
               sub3:push bx
                    push cx
                    push es
                    mov bx,0b800h
                    mov es,bx
                    mov bx,1
                    mov cl,4
                    shl al,cl
                    mov cx,2000
              sub3s:and byte ptr es:[bx],10001111b
                    or byte ptr es:[bx],al
                    add bx,2
                    loop sub3s
                    pop es
                    pop cx
                    pop bx
                    ret
                    
               sub4:push si
                    push di
                    push bx
                    push cx
                    push es
                    push ds
                    mov bx,0b800h
                    mov ds,bx
                    mov es,bx
                    mov si,160
                    mov di,0
                    mov cx,24
                    cld
              sub4s:push cx
                    mov cx,160
                    rep movsb
                    pop cx
                    loop sub4s
                    mov cx,80
                    mov si,0
             sub4s1:mov byte ptr es:[160*24+si],' '
                    add si,2
                    loop sub4s1
                    pop ds
                    pop es
                    pop cx
                    pop bx
                    pop bx
                    pop di
                    pop si
                    ret
       setscreenend:nop
    start:          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
                    cli
                    mov word ptr es:[7ch*4],0
                    mov word ptr es:[7ch*4+2],20h
                    sti
                    mov ax,4c00h
                    int 21h
                    
          
code ends
end start
theta
[第1楼]   [ 回复时间:2010-08-29 18:28 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-15 13:03
有个疑问,楼主程序的安装地址为0:200h怎么修改向量表项修改为 mov word ptr es:[7ch*4], 0    mov word ptr es:[7ch*4+2],20h ??
theta
[第2楼]   [ 回复时间:2010-08-29 21:24 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-08-15 13:03
看了另一个贴在,终于明白0000:200h和0020:0000是表示同个地址,对不起啦
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved