位字节字和双字-何时在汇编中使用什么?

问题描述 投票:4回答:3

我正在尝试学习汇编语言(更像是挣扎),并且遇到了字节,字,dword等数据类型。

真正让我困惑的是,您何时知道一个人使用另一个。显然,您想使用最保守的选项,但是我怎么知道在单词上选择一个字节呢?例如1个字= 16位或2个字节。这是否意味着我可以在一个字内容纳16个字符?所以要保存字母,我需要声明2个单词?

寄存器(16位,32位和64位)也一样。我知道在处理较小数据量时,可以使用较小的寄存器,例如alah代替eax。对于16位寄存器,是否可以将大于字的数据类型移入其中,因为它是16位的,因此可以容纳16位字?

将我的脑袋围绕整个概念很难。如果有人碰巧拥有我可以查看的任何良好资源或信息,那将是很好的。干杯!

assembly byte cpu-registers bits
3个回答
4
投票

开始时选择正确的数据宽度可能很困难,但是一旦习惯了,它就会很容易。这里是一些要考虑的问题,首先要提到最重要的考虑因素。

算法是否正确运行?假设您要计算180×247并打印结果。每个操作数都适合一个无符号字节,但乘积则不适合。或者说您想表示一个文件的大小,文件大小很容易达到几兆字节。然后您将需要比16位整数宽的东西来表示大小。

什么是输入/输出格式?如果希望其他代码使用字节数组来调用函数,则必须将数据元素读取为字节;没有别的选择。不过,您可以暂时转换为更大的表示形式以进行处理。

[它将使用多少内存?如果您有十亿个数据库记录,并且每个记录使用一个字节,那么总数据大小将为1 GB。如果每个记录使用一个双字,则总数据大小为4 GB。微小的差异乘以大量的数字将产生巨大的差异。

总而言之,使用什么数据宽度并不重要,只要您可以编写正确的代码,与其他代码进行接口并保持足够小的内存使用量就可以运行程序。因此,使用dword作为默认值不是一个坏主意。


0
投票

一点都不是字符。它是一个单一的二进制数字,0或1。两位分别是00、01、10或11。阅读二进制算术(以及转换为十进制/从十进制转换以验证答案)和数据类型表示。这是基本的东西,在没有绝对确定什么是字节,字节可以包含什么值以及将其用作什么之前,请不要继续。

word是一种数据类型,在本例中为16位或2个字节。因此,当我们解释您的问题时,它将变为:

对于两个字节寄存器,可以移动大于两个个字节放入其中,因为它是两个字节,因此可以容纳两个字节空间?

这是@Ignacio Vazquez-Abrams提到的不一致。


0
投票

我知道这是一个迫在眉睫的时刻,但是我想指出,这是鼓励和指导user99454之类的新手进行汇编的最佳方法,就像Nayuki和aib所做的那样,其他人则不是。说“您的问题对我毫无意义”完全没有帮助,对吗?那为什么大声喊出来?你在学校记得吗?好吧,也许这不是那么幸运。我也是1984年的新手(考虑我是恐龙)!没有书,没有互联网..世界另一端-仅有650x处理器的Atari-非美国。我花了6个月的时间用机器代码编写“ Hello”,但此后不到一个月的时间就编写了闪电般的游戏。我很高兴看到尽可能多的新手,无论使用哪种程序集进行编程。请注意,对于新手来说,受过自学教育的程序员要比那些受过良好训练,经过认证的计算机精英优越得多。如果您相信自己的梦想取决于汇编语言,请不要放弃。这是一个梦幻般的世界,坚定不移的人占了上风。.(只要远离窗户,您可能会跌倒)

© www.soinside.com 2019 - 2024. All rights reserved.