首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用C语言打印汇编代码中的整数值

如何用C语言打印汇编代码中的整数值
EN

Stack Overflow用户
提问于 2018-09-03 12:12:52
回答 1查看 385关注 0票数 0

我已经在6502汇编中写了一个计算斐波那契数的函数。我在C中调用该函数,然后将这两个文件编译成6502的单个二进制文件。但我得到的输出是不同的。10的斐波那契数是55,但输出为2649。它计算0到10范围内的数字而不是整数的斐波那契数。例如,0的斐波那契数是257,1的斐波纳奇数是258,10的斐波那契数是2649,依此类推。为什么我会得到这样的输出。

我的C代码:"main.c“

代码语言:javascript
复制
#include<stdio.h>

int fib();

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

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

我的6502代码:“fier.s”

代码语言:javascript
复制
 fib:
    //calculates fibonacci

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-03 12:19:54

您遗漏了fib.s的代码。

很可能是编译器期望一个16位的返回值,而你却把垃圾(或之前的斐波那契数)留在了高8位(另一个寄存器)。在%#x处打印以使其更明显(0xhilo),而不是使用无符号十进制得到的256*hi + lo

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

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52143062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档