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
Ok. Таким образом, я использую эту программу для того, чтобы запустить Vigenere Cipher для одного из моих классов, и когда я попробуйте запустить NASM это отлично работает первая частьЯ продолжаю получать сообщение об ошибке при использовании nasm на ассемблере x86 на Ubuntu
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'
Я не знаю, почему это дает мне это, я думал, что это точка экстерном. Также, если вам интересно, что им использовать im работает Ubuntu на 64-битной. Ive попробовал прочитать, как исправить это, но я не могу найти тот, который помогает мне.
редактировать: Теперь я пытаюсь использовать 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, но он все еще говорит мне то же самое, но только в том числе _ с ошибкой –
также как бы связать в библиотеке C к «LD» в командной строке –
Linux ELF-системы не управляют именами с ведущим '_'. Вероятно, вы, вероятно, прав насчет недостающего '-lc'. –