use*_*545 5 assembly byte bits cpu-registers
我正在尝试学习汇编(更像是在挣扎),并且遇到了字节、字、双字等数据类型。
真正让我困惑的是你什么时候知道使用一个而不是另一个。显然您想使用最保守的选项,但我怎么知道选择一个字节而不是一个字呢?例如 1 个字 = 16 位或 2 个字节。这是否意味着我可以在 1 个单词中放入 16 个字符?所以为了保存字母表,我需要声明 2 个单词?
寄存器(16 位、32 位和 64 位)也是如此。我知道您可以使用较小的寄存器,例如al和 ,ah而不是eax在操作较小尺寸的数据时。对于 16 位寄存器,您能否将比字大的数据类型移入其中,因为它是 16 位,因此可以容纳 16 位字?
围绕这整个概念我很困难。如果有人碰巧有我可以查看的任何好的资源或信息,那就太好了。干杯!
选择要使用的正确数据宽度一开始可能很难,但是一旦习惯了它就会很容易。这里有一些需要考虑的问题,首先提到最重要的考虑因素。
算法会正确运行吗?假设您想计算 180 × 247 并打印结果。每个操作数都适合一个无符号字节,但乘积不适合。或者说你想表示一个文件的大小,它很容易有几兆字节大。然后您将需要比 16 位整数更宽的东西来表示大小。
输入/输出格式是什么?如果您希望其他代码使用字节数组调用您的函数,那么您必须将数据元素作为字节读取;没有其他选择。不过,您可以暂时转换为更广泛的表示进行处理。
它将使用多少内存?如果您有 10 亿条数据库记录并且每条记录使用一个字节,那么总数据大小将为 1 GB。如果每条记录使用一个双字,则总数据大小为 4 GB。当乘以巨大的数字时,微小的差异会产生巨大的差异。
总而言之,您使用什么数据宽度并不重要,只要您可以编写正确的代码、与其他代码接口并保持足够小的内存使用量以运行您的程序即可。因此,使用 dword 作为默认值并不是一个坏主意。