2017-07-06 3 views
0

Je suis nouveau en langage assembleur, donc je suis les tutoriel de pcasm de Dr.Paul Carter ( http://pacman128.github.io/pcasm/ ).Sur linux ubuntu 16 32bit, tutoriel langage assembleur DrPaulcarter, erreur de référence non définie

fichier Exactement pdf (http://pacman128.github.io/static/pcasm-book.pdf) en page 33, et de ce site en page 23 du livre

, j'ai téléchargé Linux Exemple (http://pacman128.github.io/static/linux-ex.zip)

et à l'entrée de la borne i

  1. nasm -f coff first.asm
  2. gcc -c driver.c
  3. nasm -f coff asm_io.o
  4. gcc -o first driver.o first.o asm_io.o

Mais il est revenu, il

enter image description here

Où est le problème?

(commande de -lc Screenshot est peu importe, s'il n'y a pas -lc, il est revenu la même chose)

+1

Linux utilise ELF ('nasm -f elf32') pas COFF, je suis surpris que même travaillé. De plus, nous n'utilisons pas de soulignement principal, donc supprimez-les. De plus, 'nasm -f coff asm_io.o' devrait bien sûr être' asm_io.asm' pas '.o' (copier coller l'erreur?) – Jester

+0

@Jester Merci asm_io.asm est de ma faute, je vais essayer votre avis – touchingtwist

+2

Utilisez cut & coller pour inclure la sortie de la commande pas une capture d'écran. –

Répondre

1

Pour Linux asm_io ne fonctionne pas avec 64 bits. Vous devez créer des programmes 32 bits. Compilez C fichiers en 32 bits en utilisant l'option -m32. Vous devez également assembler asm_io.asm avec une définition spéciale -d ELF_TYPE pour que cela fonctionne sur Linux. N'utilisez pas coff. Les commandes comme cela devrait fonctionner:

nasm -f elf -d ELF_TYPE asm_io.asm 
nasm -f elf first.asm 
gcc -m32 -c driver.c 
gcc -m32 -o first driver.o first.o asm_io.o 

Si vous êtes vraiment sur Linux 32 bits, vous serez en mesure d'omettre -m32

1

je trouve que l'erreur est de asm_io.asm. Vous devriez modifier asm_io.asm ou vérifier les lignes define.