. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->直接定址表
主题 : :  实验16,有谁能解释的更清楚些啊?  [待解决] 回复[ 6次 ]   点击[ 722次 ]  
abcdwzxy
[帖 主] [ 发表时间:2009-07-04 10:12 ] 
荣誉值:0
信誉值:3
注册日期:2009-03-13 16:19
我在做实验16的时候遇到了一个和大家一样的问题,就是在用call word ptr table[bx]这句代买调用相关子程序时,不能进行正确的定位,以致发生错误!在论坛里面来看了很多相关度解释,还是觉得很迷茫啊,小弟愚钝的紧,请高人不吝赐教,帮帮小弟,给个更为清楚易懂的解释,在这里先谢谢了!

代码如下:
assume cs:code 

code segment 
start:mov ax,cs 
      mov ds,ax 
      mov si,offset setscreen   

      mov ax,0 
      mov es,ax 
      mov di,200h 

      mov cx,offset setend-offset setscreen 
      cld       
      rep movsb  

       mov word ptr es:[7ch*4],200h 
      mov word ptr es:[7ch*4+2],0           设置中断向量表(好像这个地方也有问题)

      
      mov ax,4c00h 
      int 21h 

setscreen:jmp short set 
table dw sub1,sub2,sub3,sub4    (这个地方也是有问题)
  set:push bx 
      cmp ah,3  
      ja setiret 
      mov bl,ah 
      mov bh,0 
      add bx,bx  
      call word ptr table[bx]   (这句代码不能进行正确的定位,但我知道这句话是直接定址表的精髓所在,要怎样修改呢?)  
setiret:pop bx 
        iret 



 sub1:push ax 
      push cx 
      push es 
      push bx 
       
      mov bx,0 
      mov ax,0b800h 
      mov es,ax 
      mov cx,2000 
sub1s:mov byte ptr es:[bx],' ' 
      add bx,2 
      loop sub1s 

      pop bx 
      pop es 
      pop cx 
      pop ax 
      ret 

 sub2:push bx 
      push es 
      push cx 

      mov bx,0b800h 
      mov es,bx 
      mov bx,1 
      mov cx,2000  
sub2s:and byte ptr es:[bx],11111000b 
      or es:[bx],al         
      add bx,2 
      loop sub2s 

      pop cx 
      pop es 
      pop bx 
      ret 


 sub3:push bx 
      push es 
      push cx 

      mov cl,4 
      shl al,cl      
      mov bx,0b800h 
      mov es,bx 
      mov bx,1 
      mov cx,20000 
sub3s:and byte ptr es:[bx],10001111b 
      or es:[bx],al    
      add bx,2 
      loop sub3s 

      pop cx 
      pop es 
      pop bx 
      ret 
       
 sub4:push ds 
      push es 
      push di 
      push si 
      push ax 
      push cx 
      push bx 

      mov bx,0 
      mov ax,0b800h 
      mov es,ax 
      mov di,0        
      mov ds,ax 
      mov si,160      

      cld             
      mov cx,24 
sub4s:push cx 
      mov cx,160      
      rep movsb      
       
      pop cx 
      loop sub4s 
      ret 

setend:nop 
code ends 
end start
abcdwzxy
[第3楼] [ 回复时间:2009-07-08 13:11 ] 
荣誉值:0
信誉值:3
注册日期:2009-03-13 16:19
这里这么多高手,还有没有更好更详细的解释啊!
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved