跳转表AL为何需要左移1位

OICQshenshi 2012-02-11 02:31:52
根据AL(1<=AL<=8)中的值,跳转到相应的标号(SUB1,SUB2,...,SUB8)处执行各自的过程

数据段
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
...全文
175 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lactoferrin 2012-02-11
  • 打赏
  • 举报
回复
因为一个sub在表中占2个字节,所以把号码乘2得到sub在表中的偏移
OICQshenshi 2012-02-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 masmaster 的回复:]

先看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地址
。。。
。……
[/Quote]
就是这样硬推理吗,还以为有什么公式规则之类的呢
WJN92 2012-02-11
  • 打赏
  • 举报
回复
shl = *2
masmaster 2012-02-11
  • 打赏
  • 举报
回复
先看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,才可找到相应的地址
Guilty 2012-02-11
  • 打赏
  • 举报
回复
JMP WORD PTR,
WORD是两字节啊,所以地址索引乘2,SHL
减一就猜不到了,你这程序没头没尾的,全靠猜

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧