Assembly resb是否创建指针或未初始化的变量?
“var resb 1”是否声明指针或1字节的未初始化变量?它的c等价物是什么?指令在BSS节中保留指定的存储字节数,在您的情况下为1字节。通过在Assembly resb是否创建指针或未初始化的变量?,assembly,nasm,Assembly,Nasm,“var resb 1”是否声明指针或1字节的未初始化变量?它的c等价物是什么?指令在BSS节中保留指定的存储字节数,在您的情况下为1字节。通过在resb之前写入var,可以将符号var设置为位于该存储的开头。这几乎等同于写作 static char var; 在C.中,请注意,所有现代操作系统上的BSS都保证为零初始化。有些人称之为“未初始化”,但我认为这是一个令人困惑的术语。谢谢……像这样的小事情会增加困惑,很难找到答案。那么为什么我需要写[var]来访问内容?@BijayShrestha
resb
之前写入var
,可以将符号var
设置为位于该存储的开头。这几乎等同于写作
static char var;
在C.中,请注意,所有现代操作系统上的BSS都保证为零初始化。有些人称之为“未初始化”,但我认为这是一个令人困惑的术语。谢谢……像这样的小事情会增加困惑,很难找到答案。那么为什么我需要写[var]来访问内容?@BijayShrestha,因为在nasm语法中,所有内存引用都使用方括号。没有
偏移量
关键字var
始终是符号的值(即缓冲区的地址),而[var]
始终是该地址处的值。但这不意味着var是指向[val]处的值的指针,因为它存储了地址。因此,如果我说[var]与*var相同,是否正确?MASM正好相反:mov-al,var
是一个负载,您需要mov-edi,OFFSET-var
将地址用作立即数。我喜欢NASM,因为你不必查找符号的定义来确定它是一个等式常数还是一个标签来确定mov edi,symbol
是mov r32,imm32
还是mov r32,r/m32
@Ped7g我的意思是如果你用C写static char varContent
,然后C编译器准确地发出varContent resb 1
(模符号装饰)。