【问题标题】:Assembler in C using functionsC中的汇编程序使用函数
【发布时间】:2010-12-24 12:24:25
【问题描述】:

大家好, 我正在尝试根据一些指令集在 C 中设计一个汇编程序。 我想阅读一个包含指令的汇编语言文件。在十六进制文件中有十六进制数据、整数数据和负整数数据。我需要将该数据转换为 8 位十六进制数据,其中 6 位表示十六进制数据,其余 2 位将是操作码。 例如 ; 最不发达国家 0x1000 输出:00100000(ldc的操作码为00) 最不发达国家 -3; 输出:fffffd00(+3 的 6 位 2s 补码)。

我正在尝试 ltoa 将整数转换为十六进制,但它提供字符串作为输出,所以我无法附加 0s 。 请建议紧急l

【问题讨论】:

  • 为什么不能将 0 附加到字符串?另外,我建议查看 sscanf() 和 sprintf() 函数(或变体),在这样的项目中,它们可能会成为你最好的朋友

标签: c function using assembly


【解决方案1】:

您似乎将位与半字节混淆了。一个十六进制数字代表 4 位。操作码可以存储一个 24 位常量,6 个半字节。使用 strtol() 从字符串中读取值并将其左移 8。或者使用操作码。

【讨论】:

  • 谢谢,但我需要读取数据并转换成 8 位十六进制数据,其中 6 位代表实际数据,两个 LSB 代表操作码。
  • 您需要考虑如何将 0x1000 (4096) 存储为 6 位 (2^6 = 64)。至少需要 13 位。不存在具有 2 位操作码的机器,它只允许 4 条指令。我只能假设您混淆了位和字节。一个字节需要两个十六进制数字。 en.wikipedia.org/wiki/Nibble
猜你喜欢
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多