Я собрал его, а затем разобрал, и вот что я получил.Я не запускал его, потому что я знаю лучше, чем запускать случайные фрагменты языка ассемблера, который я нахожу в сети.
Код начинается с перехода к коду печати:
00000000 <main>:
0: e8 0e 00 00 00 call 13 <main+0x13>
Затем следует ASCII для «Hello, World! \ N»:
5: 48 65 6c 6c 6f 2c 20
c: 77 6f 72 6c 64 21 0a
Код, к которому переходили в первой инструкции:
13: 8b 0c 24 mov (%esp),%ecx
16: 89 1c 24 mov %ebx,(%esp)
19: ba 0e 00 00 00 mov $0xe,%edx
1e: 52 push %edx
1f: 51 push %ecx
20: bb 01 00 00 00 mov $0x1,%ebx
25: 53 push %ebx
26: b8 04 00 00 00 mov $0x4,%eax
2b: 83 ec 04 sub $0x4,%esp
2e: cd 80 int $0x80
30: 83 c4 10 add $0x10,%esp
33: 5b pop %ebx
34: 31 c0 xor %eax,%eax
36: c3 ret
37: 90 nop
FWIW, метод, который использовался для вставки вашегокод в файл, foo.S
, затем:
gcc -S foo.S
objdump -D foo.o