gpt4 book ai didi

assembly - 什么时候需要在汇编中指定操作数的大小?

转载 作者:行者123 更新时间:2023-12-01 23:45:04 24 4
gpt4 key购买 nike

我刚开始在大学学习 Assembly(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 的大小。它只是工作。

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

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

最佳答案

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

关于assembly - 什么时候需要在汇编中指定操作数的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64324864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com