繁体   English   中英

如何从C中的汇编代码打印整数值

[英]How to print integer value from assembly code in C

我已经在6502程序集中编写了一个计算斐波那契数的函数。 我正在C中调用该函数,然后将这两个文件都编译为6502的单个二进制文件。但是我得到的输出是不同的。 斐波那契10为55,但输出2649。它计算数字的斐波那契而不是0到10范围之间的整数。例如,斐波那契0为257,对于1为258,对于10为2649,并且以此类推。 为什么我得到这样的输出。

我的C代码:“ main.c”

#include<stdio.h>

int fib();

int main() {
  unsigned int p = fib();
  printf("%u\n",p);
  return 0;
}

当fib()是6502汇编中的外部函数时,它与C代码链接在一起。

我的6502代码:“ fib.s”

 fib:
    //calculates fibonacci

然后使用cl65 -t sim6502 main.c fib.s -o fib编译两个文件

您省略了fib.s的代码。

最有可能的是,编译器期望的返回值为16位,并且您会将高8位(另一个寄存器)中的垃圾内容(或之前的斐波那契数)保留下来。 %#x处打印以使其更加明显( 0xhilo ),而不是使用无符号十进制获得的256*hi + lo

C要求int至少为16位,因此将return类型声明为int肯定会告诉编译器两个6502寄存器具有有意义的值。

如果函数仅在一个6502寄存器中返回8位整数,则将返回值声明为uint8_tunsigned char

否则,将您的asm修复为返回16位int (检查编译器生成的asm,以了解调用约定使用了哪些寄存器。我个人并不知道6502,只是它具有8位寄存器。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM