extern putchar, getchar, printf
global main
SECTION .data
fmt: db “characters = %d", 10,0
SECTION .bss
SECTION .text
global main
main:
xor eax, eax
xor ebx, ebx
start:
call getchar
cmp eax, -1
jle exit
inc ebx;
cmp eax, "A"
jl print
cmp eax, "z"
jg print
cmp eax, "Z"
jle rotup
cmp eax, "a"
jge rotlow
jmp print
rotup:
cmp eax, "M"
jle add13
sub eax, 13
jmp print
rotlow:
cmp eax, "m"
jle add13
sub eax, 13
jmp print
add13:
add eax,13
jmp print
print:
push eax;
call putchar
add esp,4
jmp start
exit:
push ebx
push fmt
call printf
add esp,8
ret
だから私は、私のクラスのいずれかのVigenere暗号を実行するために、このプログラムを使用していると私はNASMを実行しようとすると、それは最初の部分に正常に動作しますUbuntu上でアセンブリ言語x86上でnasmを使用するとエラーが発生する
nasm -f elf cipher.asm
しかし、私がしよう
ld -o cipher cipher.o
それは私に
ciper.o: In function 'start':
cipher.asm:(.text+0x5): undefined reference to 'getchar'
cipher.o: In function 'print':
cipher.asm:(.text+0x40): undefined reference to 'putchar'
cipher.o: IN function 'exit':
cipher.asm:(.text+0x50):undefined reference to 'printf'
を与え続けるためには、私はそれは私がにexternのポイントだと思った私は、このを与える理由を知りません。また、私が64ビット版のUbuntuを使っているのはどういうことでしょうか。 Iveはこれを修正する方法の読書を試みましたが、私はそれを助けるものを見つけることができません。
編集:今私はリンクする代わりに、LDのGCCを使用しようとしていますが、私は
gcc -o output cipher.o
または類似のものを使用する場合、それは私に与え
/usr/bin/ld: i386 architecture of input file 'cipher.o' is incompatible with i386:x86-64
output
その、まだ私に未定義の参照を提供します私は何をするか、リンクする方法を知らないので、コード内でCの関数を使うことができます。
私は_getchar、_putchar、&_printfを使用して試してみましたが、それはまだ私に同じことを伝えますが、ちょうど_エラーで –
もどのように私は「LD」コマンドラインにCライブラリにリンクするなど、 –
LinuxのELFシステムでは、先頭に '_'を付けて名前をマングルしません。あなたは欠けている '-lc'についておそらく正しいでしょう。 –