打印

高手请进

[复制链接]
2442|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xh2008|  楼主 | 2009-3-23 08:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pro1:
...
call table+80h
...
table:
...

pro2:
...
temp equ 20h
...
ldi  temp,08h
call talbe+temp*10h
...
talbe:
...
pro1编译后地址是对的,而pro2是错的,为什么?如果我想用pro2来实现地址调用,如何实现?请发表高见!!!!!!!!!
沙发
warm_ice| | 2009-3-23 11:27 | 只看该作者

这样

高手不敢当,只是经验稍多一些.呵呵.

CALL *****   指令中的"*****"是立即数,不是变量.

call talbe+temp*10h    此处的temp等于20H,而不是RAM区20H的值08H.即,实际上会调用table+20h*10h

看来你是想做散转的程序,您可以做散转表格来查表实现,即散转程序.

使用特权

评论回复
板凳
xh2008|  楼主 | 2009-3-23 14:49 | 只看该作者

继续

我是有十几个表要查询,如果做成散表,我每次就得比较temp中的值,然后再查表,需要花费很长时间;我想能通过寄存器方式实现,不就节省很多时间吗?!

使用特权

评论回复
地板
warm_ice| | 2009-3-23 16:32 | 只看该作者

这样

不会的,把temp值做为散转表的偏移量即可,例如散转表在300H,如temp等于5H,则跳到305H,305H写成CALL TABLE5即可.

使用特权

评论回复
5
xh2008|  楼主 | 2009-3-24 10:09 | 只看该作者

再探

散转表在300H,如temp等于5H,我需要跳到350H,temp中的变量影响3x0中的x,即编译后CALL 0350H,有没有可能实现?再谢!

使用特权

评论回复
6
warm_ice| | 2009-3-24 11:11 | 只看该作者

呵呵,这样

再稍微解释一下:您可能有10几个表,每个表的位置没什么规律,这时需要将这10几个表的地址再做成一个表,这个表就是散转表,散转表假设以300H开始,则以temp值为查表的顺序(即偏移量),例如查第5个表,即temp等于5,这时查表跳到305H,305H这个地址写上指令CALL 350H  或是 JMP  350H即可

使用特权

评论回复
7
xh2008|  楼主 | 2009-3-25 09:50 | 只看该作者

谢谢

i see by another way。不过还是谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

55

帖子

0

粉丝