Assembly “为什么?”;acall“;指令在Atmel 89C2051微控制器中不工作?

Assembly “为什么?”;acall“;指令在Atmel 89C2051微控制器中不工作?,assembly,embedded,microcontroller,firmware,8051,Assembly,Embedded,Microcontroller,Firmware,8051,我试过Keil-µVision和Asem-51,但他们仍然认为这是一个语法错误。这是我的密码: acall subroutine1 . . . subroutine1: . . . ret AT89C2051部件肯定支持ACALL指令(因此声明了,我自己也成功地使用了它) 您在每个汇编程序中看到的确切错误是什么?源代码的其余部分编译正常吗 你能公布给出错误的确切来源吗(或者,如果代码本身是机密的,就举一个小例子来说明问题)?我刚刚找到了答案。在调用子例程之前,必须先执行子例程定义: o

我试过Keil-µVision和Asem-51,但他们仍然认为这是一个语法错误。这是我的密码:

acall subroutine1
.
.
.

subroutine1:
.
.
.
ret

AT89C2051部件肯定支持ACALL指令(因此声明了,我自己也成功地使用了它)

您在每个汇编程序中看到的确切错误是什么?源代码的其余部分编译正常吗


你能公布给出错误的确切来源吗(或者,如果代码本身是机密的,就举一个小例子来说明问题)?

我刚刚找到了答案。在调用子例程之前,必须先执行子例程定义:

   org 0
   sjmp start

subroutine1:
   .
   .
   .
   ret

start:
  .
  .
  .
  acall subroutine1
感谢psmears确认“acall”指令确实适用于AT89C2051


@好吧,如果这对你有帮助的话,你可以投票支持这个答案。谢谢。

您应该能够稍后在源文件中调用子例程。如何做到这一点将取决于您的汇编程序(Keil/Assem-51/etc),但如果有一个“两次通过”汇编选项,则应该做到这一点。。。