专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 汇编语言

跳转表AL为何需要左移1位解决方案

发布时间:2010-06-14 15:30:31 文章来源:www.iduyao.cn 采编人员:星星草
跳转表AL为何需要左移1位
根据AL(1<=AL<=8)中的值,跳转到相应的标号(SUB1,SUB2,...,SUB8)处执行各自的过程

Assembly code
数据段
TABLE DW SUB1
      DW SUB2
      DW SUB3
    ...
      DW SUB8
代码段
DEC AL             
SHL AL,1
MOV AH,0
MOV SI,AX
LEA BX,TABLE
JMP WORD PTR[BX+SI]
SUB1:...
     ...
SUB2:...
     ...
SUB8:...

===============================
请教DEC AL 当AL=1时为何这里自减1,为何还要再执行左移1位SHL AL,1

------解决方案--------------------
JMP WORD PTR,
WORD是两字节啊,所以地址索引乘2,SHL
减一就猜不到了,你这程序没头没尾的,全靠猜
------解决方案--------------------
先看table地址表:(假设)
xxxx:0000 sub1
xxxx:0002 sub2
xxxx:0004 sub3
xxxx:0006 sub4
xxxx:0008 sub5
xxxx:000a sub6
xxxx:000c sub7
xxxx:000e sub8

当al=1时
dec al;al=0
shl al,1;al=0
对应sub1地址
。。。
。。。
当al=8时
dec al ;al=7
shl al,1;al=14(0eh)
对应sub8的地址

所以, 只有先dec,再shl,才可找到相应的地址
------解决方案--------------------
shl = *2
------解决方案--------------------
因为一个sub在表中占2个字节,所以把号码乘2得到sub在表中的偏移
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: