何时需要在程序集中指定操作数的大小



我刚开始在大学学习汇编(x86,NASM(,我真的很困惑它是如何工作的。在我有很多关于它的问题中,这一直困扰着我

何时需要指定操作数的大小?有规则吗?例如:

segment  data use32 class=data
a  db 10
b  dw 40
segment  code use32 class=code
start:
mov  AX, [b]
div  BYTE [a]

在这里,我们将div操作码中操作数的大小指定为BYTE。如果我删除BYTE部分,我会得到一个错误,所以我们需要指定它。

segment  data use32 class=data
a  db 10
b  dw 40
segment  code use32 class=code
start:
mov  AH, 2
mul  AH

在这里,我们不需要指定操作数2的大小。它只是起作用。

那么我什么时候必须指定尺寸呢?它是否简单到:当我在内存中声明了一个变量时,指定它的大小?考虑到上述例子,我倾向于这样认为,但通过我在大会的短暂经历,我发现它往往违背了我关于事情应该如何运作的逻辑。

此外,在告诉我何时需要指定尺寸后,你能告诉我为什么我们需要这样做吗?当我们需要做的时候,为什么我们需要做呢?我的意思是,我们已经声明了变量,所以变量的类型应该对程序可见,不是吗?为什么我们需要指定大小,否则就会出错?

如果可以从您指定的其他内容推断操作数大小,则无需指定操作数大小。例如,mov只适用于两个大小相同的操作数,而AX是一个字大小的寄存器,因此在mov AX, [b]中,可以推断[b]必须是字大小的。但是您只为div指定了一个操作数,所以您必须告诉它[a]的大小,因为它没有任何信息可以推断它。

相关内容

  • 没有找到相关文章

最新更新