关于汇编call指令的请教

我把程序加载到0x0820:0的地址,然后调用call指令来执行,直接调用call0x0820:0时可以执行,若用寄存器跳转时就不执行,比如:movds,0x0820mo... 我把程序加载到0x0820:0的地址,然后调用call指令来执行,直接调用call 0x0820:0时可以执行,若用寄存器跳转时就不执行,比如:
mov ds,0x0820
mov si,0
call si
或者
mov ds,0x0820
mov si,0
call [si]
都失败了,究竟怎么调用才正确,请高手指教。
展开
 我来答
fastfs
推荐于2017-10-09 · TA获得超过1423个赞
知道大有可为答主
回答量:2659
采纳率:62%
帮助的人:801万
展开全部
同段可以像第一个跳 或把要跳的全地址(就是CS和IP)存在一个4字节的地址里
si指向地址 call dword ptr [si]
或者
mov ax,0x820
push ax
mov ax,0
push ax
retf
追问
不用call指令吗
追答
最后个不用
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2014-11-13 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
直接调用,这些都用过:
CALL PROC   (段内调用)
CALL FAR PROC (段间调用)

间接调用,虽然没有用过,查了一下书,有如下三种格式:
CALL PROC_TABLE[SI] 
CALL AX
CALL BX TASK [SI]

--都失败了,究竟怎么调用才正确,请高手指教。
可参考上述三种格式进行调用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lx136986
2020-11-23
知道答主
回答量:1
采纳率:0%
帮助的人:550
展开全部
CALL DWORD PTR [SI]
不说清楚数据类型,汇编不知道这是什么跳转,段间跳转是双字类型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式