上下文:编写汇编程序。想象一下,您从头开始编写代码,没有工具链支持。你独自一人在你面前的电脑,你得到了cpu文档。回到过去。
当你需要用二进制写入时,你怎么知道如何在最低级别对这些位进行整形?
例如,将#253(可以是任何值,最多2 ^ 32,也可以是十六进制)转换为二进制立即数。我是否有义务从右到左每字节解析一次,每次乘以10(或16为十六进制))并将结果存储在累加寄存器中?
这是汇编程序在最低级别执行的操作,以形成位流吗? (添加和转移)?
答案 0 :(得分:0)
是的,您逐个阅读字符2,5和3(或者如果这是硬件所做的那样一次读取多个,然后逐个查看它们)。
然后你可以将ASCII字符转换成十进制数字(通过减去字符0的ASCII代码,即十进制48)并将数字乘以10的适当幂(或任何基数)。
将其作为((0 + 2)* 10 + 5)* 10 + 3既简单又方便。
乘以10不需要涉及实际的乘法,这可能是一个慢的操作(或者CPU甚至可能没有乘法指令),但可以作为移位和加法的组合来执行,例如, 2 * 10 = 2 * 8 + 2 * 2 =(2个左移3个位置)+(2个左移1个位置)。
如果没有人编写代码来为您执行此操作,则必须编写它。传统的CPU不包含用于解析和从文本转换为数字的逻辑或相反的方式。它们只提供简单的构建块(相对简单的指令),您可以从中构建所有内容。