Assembly 寄存器/内存中存储的值是地址还是内容?

Assembly 寄存器/内存中存储的值是地址还是内容?,assembly,x86-16,Assembly,X86 16,我不能理解这一点。我的概念刚从50%变为0。 mov eax,23h做什么?它是否将值23h存储到eax寄存器或地址23h(在eax中)?它是否应该在eax中存储23个十六进制的值 如果。数据包含 我们的指示包括 mov ax, value 这有什么用?将230存储在ax中,或者获取值的地址并将其存储在ax中? 最后,如果我们写这段代码呢 mov ax, [value] 哪个汇编程序?在MASM/TASMmov ax中,值被编译为mov ax,[],在NASM中它将编译为mov ax,,即

我不能理解这一点。我的概念刚从50%变为0。
mov eax,23h
做什么?它是否将值23h存储到
eax
寄存器或地址23h(在
eax
中)?它是否应该在
eax
中存储23个十六进制的值

如果。数据包含

我们的指示包括

mov ax, value 
这有什么用?将230存储在
ax
中,或者获取值的地址并将其存储在
ax
中?
最后,如果我们写这段代码呢

mov ax, [value]

哪个汇编程序?在MASM/TASM
mov ax中,值
被编译为
mov ax,[]
,在NASM中它将编译为
mov ax,
,即ax=number。(由于地址也是数字,所以
23h
值和
23h
地址之间没有区别)
mov ax,[值]
在所有常见的汇编程序中都是这样说的,它将从内存中提取值
230
,并将其存储到
ax
(如果
ds
指向数据段)。请使用MASM程序!MASM语法不一致,根据寄存器中是否有地址(
mov-eax,[ebx]
)或是否使用符号地址(
mov-eax,value
),内存提取的写入方式不同。您仍然可以使用MASM
mov eax,[value]
编写代码,以使像我这样的人更容易阅读,他们喜欢在源代码中用方括号明显标记所有内存访问,因为这些括号将被忽略。要在MASM中加载symbol
value
的地址本身,您必须使用
OFFSET
关键字,如:
mov eax,OFFSET value
,这与NASM不同,NASM需要
[]
围绕内存访问。此外,MASM正在努力跟踪特定符号的“类型”,也就是说,
inc value
将编译为
inc word ptr[value]
value
被定义为
value dw 1
时,它将编译为
inc byte ptr[value]
当您使用
value db 1,0
来定义它时,但我强烈反对利用MASM的这种行为,通常当你需要写一些ASM的时候,你需要它是因为你想直接用机器语言交谈,而不是用一些高级的类型和东西的闲聊,所以这些从编译器自动推断而不是报告带有歧义的错误对我来说很烦人。我更喜欢精确和明确的源代码,如
inc word ptr[value]
,明确说明程序员修改整个
word
内存内容的意图(无论
符号是如何定义的)。
mov ax, [value]