Hola buenas, tengo un problema al ensamblar un programa escrito en ensamblador con sintaxis de AT&T en un ordenador Linux de 64 bits.
El problema es que al ensamblar con:
gcc -nostartfiles -g -o power power.s
Me da estos errores:
power.s: Assembler messages:
power.s:10: Error: operand type mismatch for `push'
power.s:17: Error: operand type mismatch for `pop'
power.s:24: Error: operand type mismatch for `push'
power.s:45: Error: operand type mismatch for `pop'
Si pongo
pushb,
pushw,
pushl o
pushq no se soluciona el problema.
A ver si me podéis ayudar.
Este es mi programa fuente:
.section .data
.section .text
.globl _start
_start:
push $3
push $2
call power
add $8, %esp
push %eax
push $2
push $5
call power
add $8, %esp
pop %ebx
add %eax, %ebx
mov $1, %eax
int $0x80
.type power, @function
power:
push %ebp
mov %esp, %ebp
sub $4, %esp
mov 8(%ebp), %ebx
mov 12(%ebp), %ecx
mov %ebx, -4(%ebp)
power_loop_start:
cmp $1, %ecx
je end_power
mov -4(%ebp), %eax
imul %ebx, %eax
mov %eax,-4(%ebp)
dec %ecx
jmp power_loop_start
end_power:
mov -4(%ebp), %eax
mov %ebp, %esp
pop %ebp
ret