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 ,是不是这样理解的?
------------------------------------------------
mov bl,ah
mov bh,0
add bx,bx ----------->这里为什么要bx*2 2个问题
call word ptr table[bx]
----------------------------------
ah是8位寄存器(字节),用来传送子程序编号。
bx是16位寄存器(字),已经是word了,为什么还要add bx,bx呢?
还有就是add bx,bx的话,那不就是dd(双字)了吗?
2个问题怎么就是没个人能解答下。 |