关于汇编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]
都失败了,究竟怎么调用才正确,请高手指教。 展开
mov ds,0x0820
mov si,0
call si
或者
mov ds,0x0820
mov si,0
call [si]
都失败了,究竟怎么调用才正确,请高手指教。 展开
3个回答
展开全部
同段可以像第一个跳 或把要跳的全地址(就是CS和IP)存在一个4字节的地址里
si指向地址 call dword ptr [si]
或者
mov ax,0x820
push ax
mov ax,0
push ax
retf
si指向地址 call dword ptr [si]
或者
mov ax,0x820
push ax
mov ax,0
push ax
retf
追问
不用call指令吗
追答
最后个不用
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接调用,这些都用过:
CALL PROC (段内调用)
CALL FAR PROC (段间调用)
间接调用,虽然没有用过,查了一下书,有如下三种格式:
CALL PROC_TABLE[SI]
CALL AX
CALL BX TASK [SI]
--都失败了,究竟怎么调用才正确,请高手指教。
可参考上述三种格式进行调用。
CALL PROC (段内调用)
CALL FAR PROC (段间调用)
间接调用,虽然没有用过,查了一下书,有如下三种格式:
CALL PROC_TABLE[SI]
CALL AX
CALL BX TASK [SI]
--都失败了,究竟怎么调用才正确,请高手指教。
可参考上述三种格式进行调用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CALL DWORD PTR [SI]
不说清楚数据类型,汇编不知道这是什么跳转,段间跳转是双字类型
不说清楚数据类型,汇编不知道这是什么跳转,段间跳转是双字类型
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询