汇编语言中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可以用啥代替的主要内容,如果未能解决你的问题,请参考以下文章

汇编语言一般用啥编译器编辑?

汇编是用啥软件编的?

用intel8086/8088汇编语言写的程序用啥编译器编译最好啊?

汇编语言的编程用啥集成开发工具

【提问】Win32汇编的教材用啥好,初学

汇编语言中的call是啥意思?