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 有人能告诉我这是为什么吗?(汇编x86 NASM)_Assembly_Parameters_X86_Segmentation Fault - Fatal编程技术网

Assembly 有人能告诉我这是为什么吗?(汇编x86 NASM)

Assembly 有人能告诉我这是为什么吗?(汇编x86 NASM),assembly,parameters,x86,segmentation-fault,Assembly,Parameters,X86,Segmentation Fault,谁能给我解释一下这是为什么?如果我卸下mov[eax],ebx不会出现故障。但是我需要将新值保存到[ebp+8]。我做错了什么?如何将新的减去值保存到该地址 enter 0,0 mov eax,[ebp+8] call print_nl call print_int cmp edx,99 je DontUpdate

谁能给我解释一下这是为什么?如果我卸下
mov[eax],ebx
不会出现故障。但是我需要将新值保存到
[ebp+8]
。我做错了什么?如何将新的减去值保存到该地址

     enter 0,0
                mov eax,[ebp+8]
                call print_nl
                call print_int
                cmp edx,99
                je DontUpdate
                jne Update
                        DontUpdate:
                                leave
                                ret

                Update:
                cmp edi, 5
                jz NoScore
                jnz Score


                        NoScore:


                                mov ebx,eax
   sub ebx,1
                                mov eax,[ebp+8]

                                mov [eax],ebx
                        ;       mov [score],eax
                                mov eax,printScore
                                call print_string
                                mov eax,ebx
                                call print_int
                                mov edi,0
                                pusha
                                popa
                                leave
                                ret

您正在从调用方传递无效指针(NULL或已损坏)

mov eax,[ebp+8]
更新


根据您的评论,我假设您传递的是值而不是指针。除非您在调用函数和变量声明的地方发布代码,否则没有人可以从您提供的信息中确定。

因为您没有任何注释???,我想知道的几乎是如何将ebx保存到[ebp+8]地址。我的语法是错误的还是什么?语法是正确的,但调用方传递了错误的值。既然你没有显示足够的代码,你就不能多说了。但是有一些工具被发明出来了,叫做
调试器
,在这种情况下很有帮助。这只是我代码的一部分,我不想粘贴几百行代码。这也可能是,它指向某个值,但这并不意味着该值是有效的指针。既然你说这就是SIGSEGV发生的地方,这就是问题所在。你可以和我争论,但不能和你的操作系统争论现在,我的[ebp+8]是我的全局变量[score]的值,在这个例子中,score=5。你能解释一下为什么那不是一个有效的指针吗?在我看来,主要是,mov eax,[score]然后按eax,然后调用发布在我水晶球上方的函数,我的水晶球在洗衣房里,所以我不能看你没有提供的代码。提供我们无法帮助您的SSCE。不要发上百行,只发相关部分,包括声明和电话。我根据你之前的评论更新了我的答案。你查过了吗?