汇编语言CALL指令怎么看FAR还是NEAR?看哪里?

作者&投稿:东丁 (若有异议请与网页底部的电邮联系)
汇编语言CALL指令怎么看FAR还是NEAR?看哪里?~

call far(near)地址,默认(不写)near.

如果用户的子程序和主程序在同一个代码段,则使用near,调用发生后,主程序堆栈中只压入ip值。
如果用户的子程序和主程序不在一个代码段,则使用far,调用发生后,主程序堆栈中将压入cs、ip值。
举例:
call 一个near过程,只把偏移地址压入堆栈,过程返回时用retn返回
call一个far过程,把偏移地址和段地址入栈,过程返回时用retf返回
在过程中的ret指令根据near和far的不同,分别编译成retn和 retf
retn和retf的机器码是不同的,你也可以不定义过程,直接用retn和retf

扩展资料:
汇编语言的其他指令:
传送指令
包括通用数据传送指令MOV、条件传送指令CMOVcc、堆栈操作指令PUSH/PUSHA/PUSHAD/POP/POPA/POPAD、交换指令XCHG/XLAT/BSWAP、地址或段描述符选择子传送指令LEA/LDS/LES/LFS/LGS/LSS等。

逻辑运算
这部分指令用于执行算术和逻辑运算,包括加法指令ADD/ADC、减法指令SUB/SBB、加一指令INC、减一指令DEC、比较操作指令CMP、乘法指令MUL/IMUL、除法指令DIV/IDIV、符号扩展指令CBW/CWDE/CDQE、十进制调整指令DAA/DAS/AAA/AAS、逻辑运算指令NOT/AND/OR/XOR/TEST等。
参考资料来源:百度百科-汇编语言 (面向机器的程序设计语言

没写就是默认 NEAR
就跟JMP 一样

call far(near) 地址


关于51单片机中的CALL与JMP指令
CALL 子程序调用指令:CALL 是调用,调用的程序跑完了,通过RET返回调用的后一句,是要压栈的。JMP 是无条件跳转,不会压栈。在使用JMP 或者 CALL进行程序跳转时 如果是仅仅局限在当前页的范围内,则不用修改(A11、A10),直接将目标地址赋值给A9~A0,【对于JMP指令,这样就行了;对于CALL指令还要...

汇编call 指令
call word ptr ?[?]是段内调用,只是先把当前指令的下一条指令的ip压栈,然后将?[?]下的内容给ip,然后继续执行.在压栈时是sp=sp-2,ss:[sp]=压栈的ip值.call dword ptr ?[?]是段间调用,只是先把当前的cs压栈,然后将指令的下一条指令的ip压栈,然后将?[?]下的内容给ip,?[?+2]的...

台达plccall指令怎么使用
如图所示,当X0为ON,运行CALL P0,执行子程序P0,此时当X2为ON,Y0就为ON。当X1为ON,运行CALL P1,此时当X2为ON,Y1就为ON。这个就是两个CALL指令分别调用子程序P0和P1。望采纳。。。

关于汇编指令call和ret的具体细节操作!
这个是关键。每个函数开始一般有push bp、mov bp, sp两条指令,局部变量的分配地址都在bp之下,访问也是通过bp-n,而bp+2(32位汇编中是esp+4)才是栈顶,所以局部变量不会破坏栈顶数据,ret之前有pop bp,则栈顶数据就是call的时候压入堆栈的返回地址,没有什么“寻找返回地址”的活儿要干。

call在c语言当中代表()
1.执行call指令时,有以下2步操作:a).将当前ip或cs和ip压入栈中。b).跳转到标号处。call lable(标号),将当前ip压栈后,转移到标号处执行。call far ptr lable,实现段间转移。将当前cs和ip压栈,转移到far ptr lable标号处执行。call reg16\/mem16(16位寄存器\/2个字节内存),将当前ip压...

计算机组成原理中CALL指令占几个字节,请教高手,请具体解释一下_百度...
计算机组成原理中的指令系统,应该是指80x86的指令系统。CALL指令,共有5种不同的操作数,其典型字节数是5和3,另外还有间接调用,字节数为2~4字节。这个问题,查表即可知道。

C语言调试里面的add,ret,mov,xor,lea,call,是什么意思
ret:return,返回指令,返回主程序 mov:move,数据传送指令,将源操作数放到目的操作数 xor:逻辑异或指令,将两个操作数进行异或逻辑运算,相异而或,当操作数对应位相同时结果为1,不同时为0 lea:装入有效地址指令,将源操作数的有效地址传送至目的操作数保存 call:子程序调用指令,程序运行到此...

汇编.call指令为什么不能实现短转移?
call 指令 是调用子程序指令 转移的话用loopjmp @a+dptr也可以用的ajmp是短转移指令

汇编语言CALL指令都将什么压入堆栈?INT指令呢?
CALL指令段内调用将指令指针IP入栈,段间调用先入栈段基址Cs,再入栈IP。CALL调用RET返回再讲地址弹出,相关变量值改变。而INT指令要先将FLAGS(状态标志位)入栈,再将CS入栈,再将Ip入栈,然后还要将相关寄存器值入栈,IRET返回后,相关寄存器的值不发生变化。不知我有没有将CALL和INT指令内容给你...

谁能帮我具体解释三菱PLC CALL指令的具体用法 好人一生平安
解释三菱PLC CALL指令的具体用法如下下:连接时使用呼叫,调用P1后跳过主程序,先执行P1子程序,调用后返回主程序。P1作为指针存在。如果调用未接通,则不执行调用,直接执行主程序。调用程序可以嵌套,见下图。一个子例程可以调用另一个子例程。如图所示:PLC CALL 简介:CALL通常指REMOTE CALL、游戏CALL,...

元宝山区13315518792: 汇编 定义过程时,near和far有什么作用? -
养枫补肺: 这个主要和两个指令有关call ret call 一个near过程,只把偏移地址压入堆栈,过程返回时用retn返回 call一个far过程,把偏移地址和段地址入栈,过程返回时用retf返回 在过程中的ret指令根据near和far的不同,分别编译成retn和 retf retn和retf的机器码是不同的,你也可以不定义过程,直接用retn和retf

元宝山区13315518792: 关于汇编call指令,好糊涂啊.书上仅仅说,执行call指令,计算机做两步工作,1,将当前的ip或 -
养枫补肺: 一般都是call指令后面跟一个地址标志,比如s,这时候,系统就会跳转到那个地方执行,不过有一点需要注意,call和jmp是不同的,jmp仅仅是跳过去,就完事了,call还要保存现场,就是把下一条指令的ip或者cs ip入栈保存,然后再跳转,一般call指令后面的语句执行完了,会有个ret指令,就是将栈中的值,就是刚才保存的ip值,再弹出来赋给ip,这些东西在书上都是讲的明明白白的啊.

元宝山区13315518792: 汇编call的问题 -
养枫补肺: 这个问题我刚学习汇编的时候也是搞不清楚,下面我慢慢给你解释: 首先,你要明确有关CS:IP 的一些问题:1. CS:IP存储的是代码的地址,这个地址指向即将执行的代码.2. 那么CS:IP在什么时候指向即将执行的代码呢?举例如下:mov ax,78...

元宝山区13315518792: 汇编语言,子程序调用 -
养枫补肺: 简单点说,call指令在跳转前保存当前指令地址,而jmp一类的指令不保存当前指令的地址. 详细点说: call指令在跳转前会在栈中保存当前的程序计数器(IP)的值(有必要的话还要保存CS),保存完IP的值后,再去执行跳转指令.即相当于:...

元宝山区13315518792: 汇编语言中中断INT和子程序调用CALL保护现场时分别压入堆栈的是什么? -
养枫补肺: 中断INT过程: 1.取得中断类型码 2.把标志位压入栈中 3.把CS压入栈中 4.把IP压入栈中 5.更改CS和IP,转到中断程序CALL:将当前IP或者CS和IP压入栈中,到底是把IP还是IP和CS压入栈中.就要看CALL后到底是一个字还是2个字的,如果是一个字的,就只把IP压入栈中,例如CALL AX;如果是两个字,就先把CS压入有栈中,再把IP压入栈中,例如CALL dword ptr 内存单元地址希望对你有帮助!

元宝山区13315518792: 请问一下汇编语言中call和ret的用法 -
养枫补肺: call sub运行完是继续执行call的下一句; 主程序段中的ret是无意义的.一般主程序段会是一个死循环.

元宝山区13315518792: 汇编语言问题 高手入 call far ptr -
养枫补肺: SP = 10H,此后 CALL,即相当于 PUSH 两次.SP = 10H - 4 = 0CH,正确.

元宝山区13315518792: 汇编语言子程序是如何定义的? -
养枫补肺: 这样定义的: 子程序名 PROC NEAR|FAR..RET 子程序名 ENDP 子程序名相当于标号,表示本过程的符号地址.过程有NEAR和FAR两种类型,FAR型的过程可供段间调用,NEAR型过程仅供段内调用. 在一个过程中,至少要有一条返回指...

元宝山区13315518792: 在汇编语言中标号的类型有NEAR和FAR,变量的类型有? -
养枫补肺: NERA,FAR不是标号,是标号的类型,NERA是近标号,段内调用时用,FAR是远汇编语言中,变量和标号都是用户定义的符号地址,标号有两个属性,段基地址、

元宝山区13315518792: 汇编语言 call怎么用 -
养枫补肺: 汇编语言CALL是调用子程序指令,用法如下: CALL 子程序名 参数的传递是通过调用者和被调用者的相互约定实现的. 在51汇编语言中CALL只能实现2K范围内的调用,大于这个限制就需要用到LCALL了. 比如: ORG 0000H LJMP MAIN: ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网