百度
360搜索
搜狗搜索

汇编指令call,“汇编call”的命令解析是什么?详细介绍

本文目录一览: “汇编call”的命令解析是什么?

不同的CPU可能有不同的规定。下面只说常见的简单CPU的指令。
常见的CPU的CALL指令(“调用”指令)的功能,就是以下两点:
(1)将下一条指令的所在地址(即当时程序计数器PC的内容)入栈,
(2)并将子程序的起始地址送入PC(于是CPU的下一条指令就会转去执行子程序)。
而子程序结尾处通常都要编写一条RET指令(“返回”指令),RET指令的功能就是一条:
从栈中取出一条数据送入PC。
从上面叙述可以看出,正常情况下,RET指令从栈中取出的一条数据,也就是当初被CALL指令所入栈的下一条指令的所在地址。
因此,RET指令后,CPU的下一条指令就回去执行当初的CALL指令的下一条了。
至于其他操作,如sweetsugar123兄所说的“保护寄存器现场”等等,一般并非CALL指令的功能,而是需要程序员自行在子程序内编写程序实现的。这些操作通常也需要用到堆栈。基于堆栈的“后进先出”性质,这些操作可以不干扰CALL和RET指令的“保存返回地址”的功能。

汇编程序设计中 ACALL与LCALL有什么不同啊

分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:

如题发
解析:

LCALL和ACALL
它们的区别是送给CPU的子程序地址的格式不同。
CALL是通常意义的助记符,如果程序

员不考虑跳转语句的编码即代码占用几个字节时可以使用它LCALL指令使用的是
16位数据格式子程序可以在64K程序存储器空间的任何地方ACALL指令使用11位格
式子程序必须与ACALL指令的下一条指令在同一个2K字节的块里
在所有的情况下程序员都是以相同的方法对汇编程序指定子程序地址一个表或一
个16位的常数汇编程序将按正确的格式把地址送给指令

汇编语言两个call指令之间如何换行

输入回车符。汇编语言两个call指令之间换行的步骤方式为:首先需要在汇编语言的两个指令当中输入回车符,然后在输入之后让光标位置回到第2行起首,最后再加入两部分的内容即可实现换行。在c语言当中\n表示换行,\n的ASCII码是10,所以上边赋值改成c=10,然后按照字符输出c也可以换行。

汇编偏移

Call指令主要实现对一个函数的调用。Jmp指令主要实现地址的调转。

Call指令和Jmp指令的区别  
    1:Call指令和Jmp指令的机器码不同。

2:Call指令会对当前指令的下一条指令的地址进行压栈操作,来实现函数的返回。

Call指令的二进制形态(机器码)

Call --- e8/ ff15(但是其他比如 call eax 等是不相同的)

E8 xxxxxxxx 其中xxxxxxxx是偏移地址

计算方法:目标地址-当前地址-5 = 偏移地址

Ff15 xxxxxxxx 其中xxxxxxxx是绝对地址(FF15会对当前的这个绝对地址解*号,也就是绝对地址[目标地址])

Jmp ---e9 /ff25

E9 xxxxxxxx其中xxxxxxxx是偏移地址

计算方法:目标地址-当前地址-5 = 偏移地址

Ff25 xxxxxxxx其中xxxxxxxx是绝对地址(FF15会对当前的这个绝对地址解*号,也就是绝对地址[目标地址])

2:X64

E8 xxxxxxxx 其中xxxxxxxx是偏移地址

计算方法:目标地址-当前地址-5 = 偏移地址

Ff15 xxxxxxxx 其中xxxxxxxx是相对地址(FF15会对当前的这个相对地址解*号,也就是相对地址[目标地址])

Ff25 xxxxxxxx其中xxxxxxxx是相对地址(FF15会对当前的这个相对地址解*号,也就是相对地址[目标地址])

汇编语言 call怎么用

51单片机汇编中没有CALL,只有ACALL和LCALL
sub:
mov eax,1
call sub
调用子程序时用
当你想调用子程序时
例如 CALL xx
下一步就执行子程序xx了
汇编语言CALL是调用子程序指令,用法如下:
CALL 子程序名
参数的传递是通过调用者和被调用者的相互约定实现的。
在51汇编语言中CALL只能实现2K范围内的调用,大于这个限制就需要用到LCALL了。
比如:
ORG 0000H
LJMP MAIN:
MAIN:
MOV SP,#7FH
CALL INIT
LOOP:
JNB RI,$
CLR RI
MOV A,SBUF
MOV SBUF,A
JB TI,$
CLR TI
SJMP LOOP
INIT:
MOV TMOD,#20H ;定时器1做波特率发生器
MOV TH1,#0FDH ;波特率9600bps
MOV TL1,#0FDH
MOV SCON,#50H ;串口工作方式1,运行接受
SETB TR1
RET
END

汇编call 指令

call
word
ptr
?[?]是段内调用,只是先把当前指令的下一条指令的ip压栈,然后将?[?]下的内容给ip,然后继续执行.
在压栈时是sp=sp-2,ss:[sp]=压栈的ip值.
call
dword
ptr
?[?]是段间调用,只是先把当前的cs压栈,然后将指令的下一条指令的ip压栈,然后将?[?]下的内容给ip,
?[?+2]的内容给cs,然后继续执行.
这里是sp=sp-2;ss:[sp]=压栈的cs,然后sp=sp-2;ss:[sp]=压栈的ip.
希望对你有用.
call指令是调用子程序,后面紧跟的应该是子程序名或者过程名。

汇编语言中的call是什么意思

call指令  CALL(LCALL)指令执行时,进行两步操作:   (1)将程序当前执行的位置IP压入堆栈中;   (2)转移到调用的子程序。   (CALL近调用,LCALL远调用,   CALL 寻址2K空间范围   LCALL 寻址64K空间范围)   CALL与RET结合使用,当CALL调用的子程序运行到RET命令时,压入堆栈的IP弹出,跳出子程序,开始执行CALL的下一条语句。   例:   main: setb p1.0;   lcall delay;   clr p1.0;   lcall delay;   ajmp main;   delay: mov r7,#250;   d1: mov r6,#250;   d2: djnz r6,d2;   djnz r7,d1;   ret ;   end;   当执行LCALL时,把该语句的IP(或者说PC)压入堆栈,开始进入子程序DELAY,当执行到RET时,堆栈中的IP出栈,LCALL的继续执行下一条语句。   一般来说,执行一条CALL指令相当于执行一条PUSH指令加一条JMP指令
CALL(LCALL)指令执行时,进行两步操作:   (1)将程序当前执行的位置IP压入堆栈中;   (2)转移到调用的子程序。
汇编语言中的call是什么意思
是“调用子程序”的意思。
意思:指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

微机原理与汇编语言中的指令JMP、CALL的区别

(1)
JMP
L1
L1:表示的是L1-(当前指针+1)
(2)
CALL
L2
L2
;表示的是L1-(当前指针+1)
将程序压栈入内存
汇编语言中,JMP是无条件转移指令,CALL是子程序调用指令。
指令JMP、CALL的区别在于,JMP指令控制程序直接跳转到目标地址执行程序,程序总是顺序执行,指令本身无堆栈操作过程。CALL指令跳转到指定目标地址执行子程序,执行完子程序后,会返回CALL指令的下一条指令处执行程序,执行CALL指令有堆栈操作过程。
举例如下:
JMP
NEAR
NEXT;跳转到NEXT执行程序
......
NEXT:
;目标地址,程序将从这里向下执行
......
CALL
NEXT;调用从地址NEXT开始的子程序
NOP
;子程序结束后返回到这里,然后向下继续执行程序
......
NEXT:
;子程序目标地址,程序将从这里向下执行
RET
;子程序返回指令,子程序执行到此结束,返回CALL指令的下一条指令处

阅读更多 >>>  linux常用的性能调优命令

汇编语言中CALL可以用什么代替

可以使用push 和jmp结合的形式代替。
汇编语言CALL是调用子程序指令,用法如下:
CALL 子程序名
参数的传递是通过调用者和被调用者的相互约定实现的。
在51汇编语言中CALL只能实现2K范围内的调用,大于这个限制就需要用到LCALL了。
比如:
ORG 0000H
LJMP MAIN:
MAIN:
MOV SP,#7FH
CALL INIT
LOOP:
JNB RI,$
CLR RI
MOV A,SBUF
MOV SBUF,A
JB TI,$
CLR TI
SJMP LOOP
INIT:
MOV TMOD,#20H ;定时器1做波特率发生器
MOV TH1,#0FDH ;波特率9600bps
MOV TL1,#0FDH
MOV SCON,#50H ;串口工作方式1,运行接受
SETB TR1
RET
END
call就相当于jmp指令
王爽汇编上给的解释就是
(1) 将当前的ip或cs和ip压入栈中;
(2) jmp到要转移的目的地址
所以可以用jmp代替call, 无非麻烦点, 在返回的时候, 堆栈对不齐就很容易导致程序崩溃.
====================================
masm6.0以上版本有个invoke伪指令, 和call的意思差不多, 也是调用函数和过程, 在编译之后会被编译器翻译为push和call指令, 如果使用6.0以上版本就用这个伪指令吧
=======================================
永夜怀空 你说的是call far ptr指令还是int指令, call far指令和call 指令本质没区别, 无非是多一条push cs指令, int指令可以调用, 但你必须要先讲子程序放到指定位置, 还有别的吗?
call address的含义: push cs:ip jmp address 所以可以写成push 和jmp结合的形式。masm32汇编中,可以使用invoke伪指令代替。invoke一般用于带参数的函数(API)。
CALL是调用子程序. ACALL 是短调用;LCALL是长调用.占的指令周期和调用的距离有区别.
而JMP是跳转,用法不一样.
楼主的提问,正确的答案,应该是:宏指令。
  汇编语言中CALL可以使用invoke伪指令代替;
  INVOKE 的语法如下: INVOKE expression [,arguments]expression 既可以是一个函数名也可以是一个函数指针。参数由逗号隔开。
  INVOKE是编译器支持的伪指令,会检查参数。
  CALL会直接去栈里取参, INVOKE最后也会变成 PUSH PUSH ... CALL 的形式。

汇编语言CALL指令都将什么压入堆栈?INT指令呢?

首先指令寄存器在16/32/64位下分别是IP,EIP,RIP,标志寄存器是FLAGS,EFLAGS,RFLAGS
下面都以32位为例
CALL将下一条指令的CS:EIP压入堆栈
INT要看是什么模式,还有是否更改CPL,行为比较复杂,反正最后压入堆栈的三个是EFLAGS,CS和下一条指令的EIP
具体可以参考Intel或AMD的文档
CALL指令段内调用将指令指针IP入栈,段间调用先入栈段基址Cs,再入栈IP。CALL调用RET返回再讲地址弹出,相关变量值改变。而INT指令要先将FLAGS(状态标志位)入栈,再将CS入栈,再将Ip入栈,然后还要将相关寄存器值入栈,IRET返回后,相关寄存器的值不发生变化。不知我有没有将CALL和INT指令内容给你讲明白,不明白再问哈

网站数据信息

"汇编指令call,“汇编call”的命令解析是什么?"浏览人数已经达到20次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:汇编指令call,“汇编call”的命令解析是什么?的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!