从十六进制转换为二进制

时间:2015-10-05 00:28:39

标签: assembly mips

如果我被告知$a0 = "ABcd1234"我将如何制作

$v0 = 1010 1011 1100 1101 0001 0010 0011 0100   

我已经编写了一个程序来检查$ a0 regsiter是否有有效字符,但我很难将其转换为二进制文件。我是否只创建两个数组,一个用于十六进制值,另一个包含每个数据的相应二进制数?如果我这样做,我将如何转换它们然后将这么大的值存储到$ v0

1 个答案:

答案 0 :(得分:0)

当你破坏了二进制文件时,很明显你知道每个十六进制数字是4位。因此,只需编写将单个数字转换为4位的代码,然后将它们一个接一个地移入目标寄存器。您可以将其组合到检查代码中,例如:

out=0
foreach(x in string)
{
    if (x < '0') goto invalid;
    if (x < '9' + 1) { value = x - '0'; goto valid; }
    if (x < 'A') goto invalid;
    if (x < 'F' + 1) { value = x - 'A' + 10; goto valid; }
    if (x < 'a') goto invalid;
    if (x < 'f' + 1) { value = x - 'a' + 10; goto valid; }
    goto invalid;

valid:
    out = (out << 4) | value;
}

请参阅code in operation

相关问题