“汇编call”的命令解析是什么?

“汇编call”的命令解析是什么?,第1张

不同的CPU可能有不同的规定。下面只说常见的简单CPU的指令

常见的CPU的CALL指令(“调用”指令)的功能,就是以下两点:

(1)将下一条指令的所在地址(即当时程序计数器PC的内容)入栈,

(2)并将子程序的起始地址送入PC(于是CPU的下一条指令就会转去执行子程序)搜握信。

而子程序结尾处通常都要编写一条RET指令(“返回”指令),RET指令的功能就是一条:

从栈中取出一条数据送入PC。

从上面叙述可以看出,正常情况下,RET指令从栈中取出的一条数据,也就是当初被CALL指令所入栈的下一条指令的所在地址。

因此,RET指令后,CPU的下一条指令就回去执行当初的CALL指令的下一条了。

至于其他 *** 作,如sweetsugar123兄皮肆所说的“保护寄存器现场”等等,一般并非CALL指令的功能,而是需要程序员自行在子程序内编写程序实现的。这些 *** 作通常也需要用到堆栈。基于堆栈的“后进先出”性质,这些 *** 世轮作可以不干扰CALL和RET指令的“保存返回地址”的功能。

意思:指REMOTE CALL、游戏CALL,指一种注入外部EXE程序从外部调用函数的技术。找CALL一般使用OD等工具,而CALL的使用一般需要编写复杂的汇编代码。

call指令的用法

1、call+标号

这个指令蚂凯是先将call+标号的下一条语句的IP放入栈中,然后使当前的IP+16位位移。

jmp有个指令格式是:jmp near ptr标号,这里的call唯一这种jmp多的一步就是多了一次入栈 *** 作;

call far ptr+标号

这个指令是先将call指令的下一个指令的代码段地址入栈,再把call下一条指令的偏移地址入栈,然后使其跳到标号所在处。

jmp指令的:jmp far ptr标号,这种jmp的使用是在段间转移的,这种call和jmp的区别就是多了两次入栈的 *** 作;

3、call+16位寄存器

这个指令先将call的下一条指令的IP入栈,然后再以ax为IP的代码处

jmp指令:jmp+16位寄存器,这里的call唯一比jmp多的一步就是多了枣胡一步入栈 *** 作;

扩展资料:

VB关键字(调用)

用于将程序的执行交给其他的代码段,通常是一个子例程,同时保存必要的信息,从而使被调用段执行完毕后返回到调用点继续执行。

描述

将控制权传递给Sub过程或Function过程。

语法

[Call]name[argumentlist]

Call语句语法有以下部分:

部分描述

Call可选关键字。如果指定此关闷岩唤键字,则必须用括号把argumentlist括起来。例如:

Call MyProc(0)

name必选。要调用的过程名。

argumentlist可选。传递给过程的变量、数组或表达式列表,用逗号分隔每一项。

说明

在调用过程时,不必使用Call关键字。然而,如果使用Call关键字调用要求参数的过程,则必须用括号将argumentlist括起来。如果省略Call关键字,那么必须也同时省略argumentlist参数两边的括号。使用Call语法调用内部函数或使用用户自定义函数,函数返回值都会被放弃。

参考资料:

百度百科——call


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12383548.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存