. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->直接定址表
主题 : :  求人解答。  [待解决] 回复[ 7次 ]   点击[ 540次 ]  
yc2010
[帖 主] [ 发表时间:2010-09-06 08:48 ] 
荣誉值:2
信誉值:0
注册日期:2010-03-03 23:27
table:  dw sub1,sub2,sub3,sub4

set:    push ax

        push bx

 

        cmp ah,3

        ja sret

        mov bl,ah

        mov bh,0

        add bx,bx                ----------->这里为什么要bx*2

        

        call word ptr table[bx]

 

sret:   pop bx

        pop ax

        ret
------------------------------------------------
我的理解是:table[bx]是内存单元(表示的是字节),而dw定义的table中调用sub1,sub2,sub3,sub4,
这4个子程序是字,1个字=2个字节,所以要add bx,bx   ,是不是这样理解的?
vsoft
[第7楼] [ 回复时间:2019-02-20 12:29 ] 
荣誉值:0
信誉值:2
注册日期:2011-11-27 16:20
table:  dw sub1,sub2,sub3,sub4 
因为这里面定义的字型数据,而非字节型,因此sub1所在内存偏移地址为0,sub2所在内存偏移地址为2,sub3所在内存偏移地址为4,sub4所在内存偏移地址为6。而bx中的商是由0/30,30/30,60/30等得到的,也即0,1,2等,那么用商去寻找偏移地址就会导致ds[0], ds[1],ds[2],真正应该寻找的是ds[0],ds[2],ds[4],所以add命令来使得商加倍。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved