Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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
NASM X86_64来自C的全局变量_C_Assembly_Nasm - Fatal编程技术网

NASM X86_64来自C的全局变量

NASM X86_64来自C的全局变量,c,assembly,nasm,C,Assembly,Nasm,我对X86_64上的NASM程序集一无所知。我想在asm程序中访问变量toto并增加其值。到目前为止,我正在做以下工作: C程序: #include <stdio.h> #include <inttypes.h> int64_t toto; extern void modifytoto(void); int main() { toto=0; modifytoto(); printf("toto = %d \n",toto); retur

我对X86_64上的NASM程序集一无所知。我想在asm程序中访问变量toto并增加其值。到目前为止,我正在做以下工作:

C程序:

#include <stdio.h>
#include <inttypes.h>

int64_t toto;
extern void modifytoto(void);

int main() {
    toto=0;
    modifytoto();
    printf("toto = %d \n",toto);
    return 0;
}
我不能使用toto作为modifytoto()的参数,因为这应该在更复杂的程序中使用,我不想修改参数

我正在装配以下命令

nasm -f elf64 -o mix_asm.o kernel3.asm
我得到的信息是:

kernel3.asm:7: error: symbol `toto' undefined

我的代码有什么问题吗?

你需要把这行

extern toto

在使用
toto
告诉NASM
toto
是一个外部符号之前的某个地方。这就像在C中一样:如果你不通过声明
toto

来告诉它,编译器不知道toto应该是什么,为什么你认为'mov toto,rax'会增加toto的值?mov覆盖toto值,其值变为1,但不再是1。尝试添加toto,1Cool,asm说明只是为了表明我的目的,但你是对的。谢谢为什么AddToto,1给我这个消息?操作码和密码的组合无效operands@syf编写
添加DWORD PTR toto,1
,然后阅读手册,然后再回来询问更多问题。非常感谢!最后,我写了mov-rax,1 add[toto],rax,还可以
extern toto