首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-04-05 
跳转表AL为何需要左移1位根据AL(1AL8)中的值,跳转到相应的标号(SUB1,SUB2,...,SUB8)处执行各自的过程A

跳转表AL为何需要左移1位
根据AL(1<=AL<=8)中的值,跳转到相应的标号(SUB1,SUB2,...,SUB8)处执行各自的过程

Assembly code
数据段TABLE DW SUB1      DW SUB2      DW SUB3    ...      DW SUB8代码段DEC AL             SHL AL,1MOV AH,0MOV SI,AXLEA BX,TABLEJMP 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在表中的偏移

热点排行