Assembly 尺寸规格的规则是什么?

Assembly 尺寸规格的规则是什么?,assembly,nasm,Assembly,Nasm,即使我已经指定了变量的大小,我也不明白为什么在使用操作时要再次指定 segment .bss _n resd 1 _m resd 1 segment .text mov **dword**[_n], 10 你能帮我一下吗 mov **dword**[_n], 10 汇编程序需要知道为一个操作保留的内存量,并使用左手操作数 mov al,[_n] should be ok even if [_n] is a dword 但是 除非使用dword,否则不会告诉汇编程序大小 一段时间后,在a

即使我已经指定了变量的大小,我也不明白为什么在使用操作时要再次指定

segment .bss
_n resd 1
_m resd 1

segment .text
mov **dword**[_n], 10 
你能帮我一下吗

mov **dword**[_n], 10
汇编程序需要知道为一个操作保留的内存量,并使用左手操作数

mov al,[_n] should be ok even if [_n] is a dword
但是

除非使用dword,否则不会告诉汇编程序大小

一段时间后,在asm程序中指定大小成为第二天性

也可用于将dword切分为字和字节,al将使用dword[\n]中的最低字节加载

你也可以做mov word,500000,然后得到一个奇怪的数字,因为它太大了

但是mov-word[\n],eax将失败,因为eax被视为dword


asm可能有点奇怪

在许多其他汇编程序中,您不必再次指定大小。这是NASM的设计选择。见:

NASM在设计上选择不记住您声明的变量类型。虽然MASM在看到
var dw 0
时会记住,您将var声明为字长变量,然后能够在指令
mov var,2
的大小中填充歧义,但NASM除了符号var的起始位置外,不会刻意记住任何关于它的内容,因此您必须显式地对
mov word[var]进行编码,2


这样做的原因是,他们的设计目标之一是,您应该能够查看一行NASM代码,并且仍然能够准确地知道它将生成什么机器代码(如果可能)。如果您只是在没有类型说明符的情况下执行了
mov[\n],10
,如果不返回
\n
最初定义的位置,您将不知道将生成什么。你的意思是告诉我左手操作数是用来指定大小的?但是,这没有意义,因为'mov[\n],10'中'[\n]'的大小已经在segment.bss.IMO中定义。如果未指定大小,则助理应将申报大小作为默认值。我不明白为什么您必须始终手动指定它。毕竟,用大小声明变量有什么意义?Nasm有健忘症。你不喜欢吗?使用Masm。您已经定义了_n的大小,而不是[_n]。底线是:如果您希望委员会会议成为一名社会工作者,如果您希望解决方案,请接受边界并成为一名程序员。非常感谢。我不知道Nasm不记得变量的大小。
mov [_n], 10