I am trying to calculate factorial of 30 using x86_64 assembly on Linux. Here's my code:

```
.global _start

.text
_start:
mov %RCX, 1 # counter
mov %RAX, 1 # factorial result
loop:
mul %RCX
inc %RCX
cmp %RCX, n
jle loop

.data
n: .byte 30

```

I am converting it using these two commands:

```
as file.s
ldd file.s -o a
```

However when running the executable `a`, segmention fault is raised. checking with gdb it seems that it is raised right at the first instruction after `_start`. Where am I wrong?

@farooqkz it's been forever since I worked with asm. I could be totally wrong. Shouldn't the first instruction be `mov $1, %rcx`? Since it looks like you're using AT&T syntax.

Sign in to participate in the conversation
CleverLibre Social

CleverLibre Social is an inclusive social instance for open discussion, learning, and community.
All cultures welcome.
Hate speech and harassment strictly forbidden.