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

标签 assembly byte cpu-registers bits

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

真正让我困惑的是你什么时候知道使用一个而不是另一个。显然你想使用最保守的选项,但我怎么知道选择一个字节而不是一个单词?例如 1 个字 = 16 位或 2 个字节。这是否意味着我可以在 1 个单词中放入 16 个字符?所以要保存字母表,我需要声明 2 个单词?

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

围绕这个整个概念来思考是很困难的。如果有人碰巧有我可以查看的任何好的资源或信息,那就太好了。干杯!

最佳答案

一点不是字符。它是单个二进制数字,0 或 1。两位是 00、01、10 或 11。阅读二进制算术(以及与十进制之间的转换以验证您的答案)和数据类型的表示。这是基本的东西,如果没有绝对确定一个字节是什么,它可能包含什么值以及你可能将它用于什么,请不要继续。
word是一种数据类型,在我们的例子中是 16 位或 2 个字节。因此,当我们解释您的问题时,它变为:

For a two byte register can you move a data type larger than two bytes into it because since it's two bytes, it can fit a two byte space?



这是@Ignacio Vazquez-Abrams 提到的不连贯性。

关于assembly - 位字节字和双字 - 何时在汇编中使用什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9475377/

相关文章:

assembly - "mov (%rax),%eax"和 "mov %rax,%eax"有什么区别?

gcc - 从 gcc 输出中提取控制流图

c++ - 参数传递和返回值如何在x86上的C/C++中的汇编级别工作?

python - python 中的字符和字节

assembly - .double 类型的变量是否存储在两个寄存器中?

assembly - 将二进制转换为十进制并在汇编中显示

byte - 在此 MIPS 代码中,哪个字节是从内存中加载的?

c# - 将十六进制字符串转换为数字类型并返回

cpu - 指令指针与程序计数器?

c++ - PIC 寄存器 (%ebx) 有什么作用?