我正在努力学习汇编(更像是在苦苦挣扎),我遇到了字节、单词、双字等数据类型。
真正让我困惑的是,你什么时候知道使用其中一个而不是另一个。显然,您希望使用最保守的选项,但我如何知道选择一个字节而不是一个单词?例如1个字= 16位或2字节。这是否意味着我可以在1个单词中容纳16个字符?因此,为了保存字母表,我需要声明2个单词?
寄存器(16位、32位和64位)也是如此。我知道,当您处理较小大小的数据时,可以使用较小的寄存器,如al
和ah
,而不是eax
。对于16位寄存器,您是否可以将大于一个字的数据类型移入其中,因为由于它是16位的,它可以容纳一个16位的字?
理解整个概念是很困难的。如果任何人碰巧有任何好的资源或信息,我可以查看,那将是很好的。干杯!
发布于 2012-02-28 04:17:44
一开始,选择正确的数据宽度可能很难,但一旦您习惯了,就会很容易。这里有一些需要考虑的问题,首先要提到的是最重要的考虑因素。
说你想计算180×247并打印结果。每个操作数都适合一个无符号字节,但乘积不适合,或者说你想表示一个文件的大小,它很容易就有很多兆字节大小。然后,您将需要比16位整数更宽的值来表示大小。
输入/输出格式是什么?如果您希望其他代码使用字节数组调用您的函数,那么您必须以字节的形式读取数据元素;没有其他选择。不过,您可以临时转换为更宽的表示以进行处理。
如果你有十亿条数据库记录,每条记录使用一个字节,那么总的数据大小将是1 GB。如果每条记录都使用dword,则总数据大小为4 GB。微小的差异乘以巨大的数字会产生巨大的差异。
总而言之,您使用的数据宽度实际上并不重要,只要您能够编写正确的代码,与其他代码交互,并保持足够小的内存使用量,就可以运行您的程序。因此,使用dword作为默认值并不是一个坏主意。
发布于 2012-02-28 04:20:54
位不是字符。它是一个单独的二进制数字,0或1。两位是00,01,10或11。阅读二进制算术(以及与十进制之间的转换以验证您的答案)和数据类型的表示。这是基本的东西,如果不完全确定一个字节是什么,它可能包含什么值,以及你可能会用它做什么,就不要继续下去。
word
是一种数据类型,在本例中为16位或2字节。因此,当我们解释你的问题时,它变成了:
对于双字节寄存器,您可以将大于双字节的数据类型移动到其中吗?因为它是双字节,所以它可以容纳双字节空间?
这就是@Ignacio Vazquez-艾布拉姆斯提到的不连贯。
https://stackoverflow.com/questions/9475377
复制相似问题