Assembly 装配:分段falut
我在汇编程序at&t中有代码,它添加了两个数字:Assembly 装配:分段falut,assembly,att,Assembly,Att,我在汇编程序at&t中有代码,它添加了两个数字: .code32 .data liczba1: .long 0x00000001,0x00000001,0x00000001,0x00000001 liczba2: .long 0x00000001,0x00000001,0x00000001,0x00000001 .text .global main main: movl $3, %ecx clc petla: cmpl $0, %ecx je osta
.code32
.data
liczba1: .long 0x00000001,0x00000001,0x00000001,0x00000001
liczba2: .long 0x00000001,0x00000001,0x00000001,0x00000001
.text
.global main
main:
movl $3, %ecx
clc
petla:
cmpl $0, %ecx
je ostatnia
movl liczba1(,%ecx,4), %eax
movl liczba2(,%ecx,4), %ebx
adcl %eax,%ebx
pushl %ebx
decl %ecx
jmp petla
ostatnia:
movl liczba1(,%edi,4), %eax
movl liczba2(,%edi,4), %ebx
adcl %eax,%ebx
pushl %ebx
movl $0, %eax
movl $0, %ebx
adcl %eax,%ebx
pushl %ebx
jmp koniec
koniec:
movl $0, %eax
movl $1, %ebx
int $0x80
当我在gdb中运行它时,我得到:
程序接收信号SIGSEGV,分段故障。
0x00000000004000cc,单位为petla()
有人知道,为什么?调试器知道。那么,哪个指令位于0x4000cc?你为什么使用edi而不初始化它?它的PUSH%ebx。我已经解决了这个问题,将edi更改为ECXB,但我认为,问题是如果您对代码做了任何更改,ecx不会减少更新问题的时间。