ご存じのように、アセンブリでコーディングする必要があります。または、教授は、適切にコーディングまたはリンクする方法についての情報を提供しませんでした。私たちは自分でそれを学ばなければなりませんでした。明日、私は仕事を提出しなければなりません。目的は、n 番目のフィボナッチ数をコンソールに出力することです。
section .data
fmt: db "fib=%d",10,0
section .text
extern _printf
global _main, fib
_main:
mov eax, 10 ; e.g. n=10
mov ebx, 1 ; we know f_0 and f_1
sub eax, ebx ; thats why n--
push eax ; push n
push 0 ; f_0 = 0
push 1 ; f_1 = 1
call fib
push eax ; in eax the result is stored
push fmt
call _printf
mov ebx, 0
mov eax, 1 ; exit(0)
int 0x80
fib:
mov ecx, eax
pop esi
calc:
pop ebx
pop edx
add ebx, edx
mov eax, ebx
push edx
push ebx
sub ecx, 1
cmp ecx, 0
jne calc
push esi
ret
リンカーに苦労した後、ようやくプログラムをアセンブルしてリンクすることができました。しかし、うまくいきません。毎回セグメンテーション違反が発生します。
編集: 修正されたコード - コンソールにテキストが表示されますが、悲しいことに正しい番号が表示されず、常に「fib = 1」が表示され、再びセグメント障害が表示されます。