意思:指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
举一个例子来说明吧.比如你要编一个延时50毫秒的子程序,那么步骤如下:1、查看一下你的硬件环境,比如晶振大小,CPU型号,不用CPU指令的机器周期是不一样的。
2、计算延时需要的机器周期。比如采用12M晶振,CPU采用通用8051,那么一个机器周期为1US,50毫秒为50*1000=50000US,需要的机器周期=50000/1=50000。
3、试编程,如下:
程序代码指令时间 总共时间
DELAY50MS: 2 2
MOV R7,#A 1 1
DELAY1:
MOV R6,#B 1 1*A
DJNZ R6,$ 2 2*B*A
DJNZ R7,DELAY1 2 2*A
RET 2 2
所以总时间=2+1+A+2*A*B+2*A+2=5+3A+2AB
4、凑数求A、B
根据2、3得到如下式子:
50000=5+3A+2AB
可以有很多种结果,不过最好是以A尽可能小,B尽可能大为原则,当然不能大于255.
我现在凑出A=110,B=225;那么总延时时间=5+3*110+2*110*225=49835。还差165US
5、补齐不够时间
再加一个小循环就OK了,呵呵如下:
MOV R6,#C
DJNZ R6,$
会算了吧,2*C+1=165;所以C=82。
现在完整的延时程序出来了,如下:
DELAY50MS: 2 2
MOV R7,#110 1 1
DELAY1:
MOV R6,#225 1 1*110
DJNZ R6,$ 2 2*225*110
DJNZ R7,DELAY1 2 2*110
MOV R6,#821 1
DJNZ R6,$22*82
RET 2 2
很圆满:总的时间50000微妙,也就是50毫秒。这种方式编程,在该硬件环境下可以保证最大误差为1微妙。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)