I am writing power function in GNU Assembly x86 on Linux principal-neanderthal 6.8.0-41-generic x86_x64. When i launch i get “segmetantion fault (core dumped)” error.
.code32
.section .data
.section .text
.globl _start
_start:
pushl $3
pushl $2
call power
addl $8, %esp
pushl %eax
pushl $2
pushl $5
call power
addl $8, %esp
popl %ebx
addl %eax, %ebx
movl $1, %eax
int $0x80
.type power, @function
power:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl 8(%ebp), %ebx # HERE IS THE PROBLEM
movl 12(%ebp), %ecx
movl %ebx, -4(%ebp)
power_loop_start:
cmpl $1, %ecx
je end_power
movl -4(%ebp), %eax
imull %ebx, %eax
movl %eax, -4(%ebp)
decl %ecx
jmp power_loop_start
end_power:
movl -4(%ebp), %eax
movl %ebp, %esp
popl %ebp
ret
After debugging in gbd found out that something is wrong in power function at 31 line when i try to load first argument in %ebx register. Also in gdb view %ebp, %eax, %ebx registers are replaced by their x64 variants with r suffix. Would be very thankful for explaining.
6