汇编语言CALL指令怎么看FAR还是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等。
参考资料来源:百度百科-汇编语言 (面向机器的程序设计语言
这个主要和两个指令有关call ret
call 一个near过程,只把偏移地址压入堆栈,过程返回时用retn返回
call一个far过程,把偏移地址和段地址入栈,过程返回时用retf返回
在过程中的ret指令根据near和far的不同,分别编译成retn和 retf
retn和retf的机器码是不同的,你也可以不定义过程,直接用retn和retf
汇编语言中LCALL和JMP有什么区别啊?
2、JMP:JMP是无条件转移指令,转移到某执行程序后就不再返到回原处,是一去不回返的。二、程序处理方式不同 1、LCALL:指令在进行流程跳转前会保存返回地址,以便在跳转目标代码中可以使用ret指令返回到call指令的下一条指令处继续执行。执行段内跳转时,只保存EIP;如果是段间跳转,还保存CS。2、...
汇编Call指令问题
执行长调用 CALL,压入堆栈的内容,是其下条指令的地址:1000:0008。在子程序中,pop ax ,将有:AX = 0008。ADD 后,即有:AX = 0010。POP BX,将有:BX = 1000。ADD AX, BX,结果就是 AX = 1010H。
试比较说明CALL指令与JMP指令在操作上有什么不同
call是调用跳转,在执行到ret指令后,会返回到call后继续执行而jmp则是无条件跳转,是不会跳回的
请问大家 汇编语言中 子程序调用指令和跳转指令有什么区别?谢谢_百度...
简单点说,call指令在跳转前保存当前指令地址,而jmp一类的指令不保存当前指令的地址。详细点说:call指令在跳转前会在栈中保存当前的程序计数器(IP)的值(有必要的话还要保存CS),保存完IP的值后,再去执行跳转指令。即相当于:push CS (没有这种指令,有没有这一句还要看调用的类型:far\/near...
单片机中CALL的功能
简单点说,call就是调用子程序。啰嗦点说,call一般分成两步,第一步,把下条指令的地址(即PC指针的内容)推入堆栈,作为子程序的返回地址。第二步,取得子程序的入口地址,跳转到子程序(即设置PC指针指向子程序入口)。
关于汇编call指令的请教
同段可以像第一个跳 或把要跳的全地址(就是CS和IP)存在一个4字节的地址里 si指向地址 call dword ptr [si]或者 mov ax,0x820 push ax mov ax,0 push ax retf
call指令占几个字节
在执行CALL指令时,IP的值先变成CALL指令后的第一个字节的偏移地址,然后才被压入栈。这种说法是正确的。远调用call far是先压入cs,然后再压入ip 近调用call只压入ip 楼上的同学错了,他说的是调用中断的情况,call不保存标志寄存器的。
松下PLC编程梯形图CALL1是什么意思?
CALL是子程序调用指令,CALL 1就是调用编号为1的子程序。在程序中还有SUB 1,就是子程序1的开始,对应的RET,就是这个子程序的结束。也就是当执行CALL 1指令时,就会跳转执行SUB 1到RET之间的程序。望采纳。。。
汇编语言中call dispmsg,call dispcrlf,call dispc分别是什么意思_百 ...
dispmsg、dispcrlf、dispc 是三个子程序,从字面理解是显示 信息子程序、换行回车子程序、显示单个字符子程序。call是调用子程序指令。
执行返回指令时返回的断点是
栈顶数据出栈赋值给ip寄存器。为了能把函数得出的结果返回给其他代码使用,我们需要使用返回指令return,把需要函数需要返回的结果放在return后面就能返回。主程序(调用程序)执行调用指令CALL调用子程序,子程序(被调用程序)执行返回指令RET返回主程序中CALL指令的下条指令处。CALL指令的功能。在汇编语言中,...
乐钩思密: 这个主要和两个指令有关call ret call 一个near过程,只把偏移地址压入堆栈,过程返回时用retn返回 call一个far过程,把偏移地址和段地址入栈,过程返回时用retf返回 在过程中的ret指令根据near和far的不同,分别编译成retn和 retf retn和retf的机器码是不同的,你也可以不定义过程,直接用retn和retf
凉山彝族自治州15734956340: 关于汇编call指令,好糊涂啊.书上仅仅说,执行call指令,计算机做两步工作,1,将当前的ip或 - ?
乐钩思密: 一般都是call指令后面跟一个地址标志,比如s,这时候,系统就会跳转到那个地方执行,不过有一点需要注意,call和jmp是不同的,jmp仅仅是跳过去,就完事了,call还要保存现场,就是把下一条指令的ip或者cs ip入栈保存,然后再跳转,一般call指令后面的语句执行完了,会有个ret指令,就是将栈中的值,就是刚才保存的ip值,再弹出来赋给ip,这些东西在书上都是讲的明明白白的啊.
凉山彝族自治州15734956340: 汇编call的问题 - ?
乐钩思密: 这个问题我刚学习汇编的时候也是搞不清楚,下面我慢慢给你解释: 首先,你要明确有关CS:IP 的一些问题:1. CS:IP存储的是代码的地址,这个地址指向即将执行的代码.2. 那么CS:IP在什么时候指向即将执行的代码呢?举例如下:mov ax,78...
凉山彝族自治州15734956340: 汇编语言,子程序调用 - ?
乐钩思密: 简单点说,call指令在跳转前保存当前指令地址,而jmp一类的指令不保存当前指令的地址. 详细点说: call指令在跳转前会在栈中保存当前的程序计数器(IP)的值(有必要的话还要保存CS),保存完IP的值后,再去执行跳转指令.即相当于:...
凉山彝族自治州15734956340: 汇编语言中中断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 内存单元地址希望对你有帮助!
凉山彝族自治州15734956340: 请问一下汇编语言中call和ret的用法 - ?
乐钩思密: call sub运行完是继续执行call的下一句; 主程序段中的ret是无意义的.一般主程序段会是一个死循环.
凉山彝族自治州15734956340: 汇编语言问题 高手入 call far ptr - ?
乐钩思密: SP = 10H,此后 CALL,即相当于 PUSH 两次.SP = 10H - 4 = 0CH,正确.
凉山彝族自治州15734956340: 汇编语言子程序是如何定义的? - ?
乐钩思密: 这样定义的: 子程序名 PROC NEAR|FAR..RET 子程序名 ENDP 子程序名相当于标号,表示本过程的符号地址.过程有NEAR和FAR两种类型,FAR型的过程可供段间调用,NEAR型过程仅供段内调用. 在一个过程中,至少要有一条返回指...
凉山彝族自治州15734956340: 在汇编语言中标号的类型有NEAR和FAR,变量的类型有? - ?
乐钩思密: NERA,FAR不是标号,是标号的类型,NERA是近标号,段内调用时用,FAR是远汇编语言中,变量和标号都是用户定义的符号地址,标号有两个属性,段基地址、
凉山彝族自治州15734956340: 汇编语言 call怎么用 - ?
乐钩思密: 汇编语言CALL是调用子程序指令,用法如下: CALL 子程序名 参数的传递是通过调用者和被调用者的相互约定实现的. 在51汇编语言中CALL只能实现2K范围内的调用,大于这个限制就需要用到LCALL了. 比如: ORG 0000H LJMP MAIN: ...