Assembly 从六角到基3的组件转换

Assembly 从六角到基3的组件转换,assembly,Assembly,我想将数字从十六进制(基数16)转换为三进制(基数3), 一个简单的解决方案是转换每个数字,如十六进制->十进制->二进制->三进制, 对于这个问题是否有更有效的(=意味着更少的代码)?取决于您所说的“二进制”是什么意思。如果你的意思是-CPU的内部表示,那绝对是正确的方向。在任何数字系统中,将数字转换为字符串都涉及整数运算,而使用数字的字符串表示法进行转换非常麻烦 如果你指的是二进制字符串,一个包含字符“0”和“1”的字符串,那你就大错特错了 无论如何,正确的算法包括: 将数字从十六进制字符

我想将数字从十六进制(基数16)转换为三进制(基数3),
一个简单的解决方案是转换每个数字,如十六进制->十进制->二进制->三进制,

对于这个问题是否有更有效的(=意味着更少的代码)?

取决于您所说的“二进制”是什么意思。如果你的意思是-CPU的内部表示,那绝对是正确的方向。在任何数字系统中,将数字转换为字符串都涉及整数运算,而使用数字的字符串表示法进行转换非常麻烦

如果你指的是二进制字符串,一个包含字符“0”和“1”的字符串,那你就大错特错了

无论如何,正确的算法包括:

  • 将数字从十六进制字符串转换为整数(如果是编译时常量,则汇编程序将)
  • 在循环中将所述整数除以三,直到达到零
  • 存储每个除法的剩余部分-这是三进制数字
  • 将三进制数字转换为ASCII码
  • 输出

要将以m为基数的数字转换为以n为基数的数字:

  • 将原始基m数转换为整数。这很简单(主要是一个“value=value+digit*base”循环)
  • 将该整数转换为基数n。这很简单(它主要是一个“digit=value%base;value=value/base”循环)

在某些情况下(例如十六进制和整数之间的转换),使用移位和掩码,而不是乘法、除法和模运算,可以很容易地优化计算。

hex->binary非常简单(除非十六进制值是字符串,否则它是不可操作的,但即使这样,它也非常简单)。十六进制->二进制->三进制。@PaulR这是一个字符串,你能解释一下这个过程吗?每个十六进制字符直接映射到4个二进制位。0->0000,1->0001,…,9->1001,A->1010,…,F->1111。因此,如果字符串是137f,那么它将变成0001 0011 0111 1111。可能先在HLL中执行(例如C)以获得正确的逻辑,然后将其转换为asm?