汇编语言中CALL可以用啥代替
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言中CALL可以用啥代替相关的知识,希望对你有一定的参考价值。
汇编语言中CALL可以使用invoke伪指令代替;INVOKE 的语法如下: INVOKE expression [,arguments]expression 既可以是一个函数名也可以是一个函数指针。参数由逗号隔开。
INVOKE是编译器支持的伪指令,会检查参数。
CALL会直接去栈里取参, INVOKE最后也会变成 PUSH PUSH ... CALL 的形式。 参考技术A 可以使用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 参考技术B 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指令可以调用, 但你必须要先讲子程序放到指定位置, 还有别的吗? 参考技术C call address的含义: push cs:ip jmp address 所以可以写成push 和jmp结合的形式。masm32汇编中,可以使用invoke伪指令代替。invoke一般用于带参数的函数(API)。本回答被提问者采纳 参考技术D CALL是调用子程序. ACALL 是短调用;LCALL是长调用.占的指令周期和调用的距离有区别.
而JMP是跳转,用法不一样.
【提问】Win32汇编的教材用啥好,初学
另制作网页,HTML的教材 CSS javaspcript
这些用什么好,实践中,查漏补缺
1.先看,王爽《汇编语言》 ,适合初学者,讲得浅显易懂。
2.再看,《80X86汇编语言程序设计教程》,这本书很好。讲得系统全面。
或者看,IBM-PC汇编语言程序设计(第2版)
3.如果最想做点实用的,最后看,罗云彬的《windows32环境下汇编语言设计》,这本书,现在 第三版,叫做《琢石成器》,很好的,电子工业出版社。 参考技术A 汇编语言实用教程 基于32win
以上是关于汇编语言中CALL可以用啥代替的主要内容,如果未能解决你的问题,请参考以下文章