dsc*_*atz 5 x86 assembly gnu-assembler segmentation-fault att
我正在尝试组装一小段 x86 代码。我在 32 位机器上,我编写了以下代码。它应该只是将值添加到 eax 中然后返回。我意识到不会有任何输出。当我编译这个使用
gcc main.S -o main
它编译没有错误。但是当我运行它时会出现段错误(gdb 声称它在第一条 movl 指令上出现段错误)。main.S 中有以下代码。我究竟做错了什么?
.text
.globl main
main:
pushl %ebp
movl %esp, %ebp
movl 0, %eax
addl $3, %eax
addl $3, %eax
leave
ret
Run Code Online (Sandbox Code Playgroud)
不是你的第一个,而是你的第二个 movl
movl 0,%eax
Run Code Online (Sandbox Code Playgroud)
那是来自具有绝对地址的内存源操作数的负载,0这当然是段错误。
使用mov $0, %eax为MOV,立即到寄存器中。(或专门为零,xor %eax, %eax以更有效地将寄存器清零。)
| 归档时间: |
|
| 查看次数: |
444 次 |
| 最近记录: |