Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly resb是否创建指针或未初始化的变量?_Assembly_Nasm - Fatal编程技术网

Assembly resb是否创建指针或未初始化的变量?

Assembly resb是否创建指针或未初始化的变量?,assembly,nasm,Assembly,Nasm,“var resb 1”是否声明指针或1字节的未初始化变量?它的c等价物是什么?指令在BSS节中保留指定的存储字节数,在您的情况下为1字节。通过在resb之前写入var,可以将符号var设置为位于该存储的开头。这几乎等同于写作 static char var; 在C.中,请注意,所有现代操作系统上的BSS都保证为零初始化。有些人称之为“未初始化”,但我认为这是一个令人困惑的术语。谢谢……像这样的小事情会增加困惑,很难找到答案。那么为什么我需要写[var]来访问内容?@BijayShrestha

“var resb 1”是否声明指针或1字节的未初始化变量?它的c等价物是什么?

指令在BSS节中保留指定的存储字节数,在您的情况下为1字节。通过在
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
(模符号装饰)。