为什么添加测试指令会导致GNU程序集中的分段错误?

hma*_*tt1 3 c assembly gnu

我无法追踪分段错误.在将我的c程序编译为汇编之后,我正在编辑它并添加一些东西.

我添加了一些代码,包括本节:

.SB1:
         call fib
         jmp     .LBL2
Run Code Online (Sandbox Code Playgroud)

那部分工作正常.但现在我想打电话给测试,也许会跳到另一个标签.现在,我只是在玩它,看看我是否可以学习如何运作(采取婴儿步骤).所以我把代码更改为:

.SB1:
         call fib
         test    %esp, 0xfffffff
         jz      .SB2
         jmp     .LBL2
.SB2:
         jmp     .LBL2
Run Code Online (Sandbox Code Playgroud)

但是现在我遇到了分段错误.谁知道为什么?如果您需要更多信息或希望代码重现,请告诉我.

And*_*ter 5

在AT&T语法中,文字需要以前缀为前缀$.然后,还需要切换操作数:

test    $0xfffffff, %esp
Run Code Online (Sandbox Code Playgroud)

如果没有$前缀,汇编程序会假定存储器地址,并且访问地址0xfffffff很可能超出映射内存,这会导致分段错误.