【发布时间】:2017-05-18 16:06:01
【问题描述】:
上下文:编写汇编程序。想象一下,您从头开始编写代码,没有工具链支持。你和你面前的电脑是一个人,你会得到 cpu 文档。回到过去。
当你需要用二进制写时,你怎么知道如何在最底层对位进行整形?
例如,将#253(可以是最大为 2^32 的任何值,也可以是十六进制)转换为二进制立即数。我是否有义务从右到左逐个字节地解析它,每次乘以 10(或十六进制为 16))并将结果存储在累加寄存器中?
这是汇编程序在最低级别为形成位流所做的吗? (添加和移位)?
【问题讨论】:
-
汇编程序只是将源代码翻译成输出格式(“Just”在这里过于简单化了)所以你真正的问题是什么?如何将字符串转换为数字?这是一项基本任务,是的,它基本上是通过加法和乘法来完成的。处理溢出、字符集和字符集编码等警告
-
@MargaretBloom 我正在编写一个汇编程序,我主要关心的是如何有效地编写比特流。我还考虑了一个跳转表,以及十六进制转换以加快速度。十进制对于优化很差。
-
我建议你用谷歌搜索“编译器构建教程”,有很多非常好的教程教你需要的东西,例如用于解码值的状态机。甚至汇编器也是某种编译器,它们将汇编编译为机器码
-
请注意,“即时”将二进制转换为十六进制比转换为十进制要容易得多(反之亦然)——这是引入它的原因之一。