尺寸规格有哪些规则?

时间:2013-05-17 00:47:24

标签: assembly nasm

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

segment .bss
_n resd 1
_m resd 1

segment .text
mov **dword**[_n], 10 

你能帮我一把吗?

2 个答案:

答案 0 :(得分:1)

在许多其他装配工中,您不必再次指定尺寸。这是NASM的设计选择。见section 2.2.3 of the manual

  

NASM根据设计选择不记住您声明的变量类型。虽然MASM在看到var dw 0时会记得你将var声明为一个字大小的变量,然后能够填写指令mov var,2大小的模糊性,NASM会故意记住除了它开始的位置之外没有任何关于符号var的内容,所以你必须明确地编码mov word [var],2

原因之一是,他们的设计目标之一是您应该能够查看单行NASM代码,并且仍然可以准确地告诉它将生成哪些机器代码(如果可能)。如果您刚刚在没有类型说明符的情况下执行mov [_n],10,那么在不参考最初定义_n的位置的情况下,您将无法知道将生成什么。

答案 1 :(得分:0)

mov **dword**[_n], 10

汇编程序需要知道为操作保留的内存量并使用左侧操作数

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

mov [_n], 10

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

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

将dword切换成字和字节也很有用,al将加载dword中的最低字节[_n]

你也可以做单词[_n],500000并获得一个奇怪的数字,因为它太大了

但是mov word [_n],eax会失败,因为eax被认为是dword

asm可能有点古怪