D'erreur lorsque vous essayez d'exécuter .fichier asm sur MSNA sur Ubuntu
Je suis sur ubuntu 64 bits et en essayant de lancer une .fichier asm sur MSNA. Mais elle renvoie cette erreur lorsque j'essaie d'exécuter le code suivant. Ce Iḿ essayer de faire est de créer un fichier exécutable par la compilation (ou assemblage) fichier de l'objet à partir de la source
$ nasm -f elf hello.asm
, et puis après avoir créé le fichier hello.o
est la production de fichier exécutable à partir du fichier de l'objet par l'invocation de l'éditeur de liens
$ ld -s -o hello hello.o
Ce sera de construire, finalement, bonjour exécutable.
Je suis en suivant ce tutoriel http://www.faqs.org/docs/Linux-HOWTO/Assembly-HOWTO.html
Erreur:
architecture i386 de fichier d'entrée " bonjour.o' est incompatible avec i386:x86-64 sortie
Code:
section .data ;section declaration
msg db "Hello, world!",0xa ;our dear string
len equ $ - msg ;length of our dear string
section .text ;section declaration
;we must export the entry point to the ELF linker or
global _start ;loader. They conventionally recognize _start as their
;entry point. Use ld -e foo to override the default.
_start:
;write our string to stdout
mov edx,len ;third argument: message length
mov ecx,msg ;second argument: pointer to message to write
mov ebx,1 ;first argument: file handle (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
;and exit
mov ebx,0 ;first syscall argument: exit code
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
Vous devez vous connecter pour publier un commentaire.
Cela ressemble, il peut être un simple décalage entre ce qui est produit par
nasm
et celd
essaie de faire:En d'autres termes,
nasm
a produit de 32 bits fichier objethello.o
etld
veut prendre et apporter une 64 bits fichier exécutable.La
nasm -hf
commande devrait vous donner les formats de sortie disponibles:Je vois que ton liés tutoriel vous demande d'exécuter:
Essayez d'utiliser:
au lieu de cela, et vous pouvez trouver
ld
cesse de se plaindre du fichier d'entrée.%rax
,%rbx
etc. doivent être effacées avant l'appel système).Vous devez dire à l'éditeur de liens pour produire un i386 fichier de sortie, puisque vous avez écrit i386 assemblée:
nasm
pour créer x86-64 sortie. Faire un ou de l'autre, pas les deux! (Je vous suggère fortement de créeri386
de sortie, ce qui signifie en invoquantnasm
que ce que vous avez fait, et en invoquantld
de cette façon, puisque vous êtes en train d'écrire i386 assembleur et non x86-64).Comment compiler, lien, et d'exécuter une msna application sur Ubuntu 64 bits.
Installer msna:
Enregistrer un fichier avec le nom du fichier
hello.asm
:Le compiler:
Lien:
Exécuter
Ça marche!!! Que faire maintenant? Demander à ce que votre favori compilateur de générer le code assembleur qu'il aurait été normalement transmis pour être converti en code machine. Recherche Google: "convertir en php/java/python/c++ programme à l'assemblée"
Point de vue: Avec tous les gens aujourd'hui essayer de détruire et de se débarrasser de l'informatique pour le grand public, il est impératif que nous enseignent les nouveaux étudiants les concepts de la façon de construire un objectif général de machine de turing à partir de principes de base, sur la place grâce à le métal nu, puis, enfin, les monteurs et les langages de programmation.
Comment l'apprentissage de l'assemblée de l'aide dans la programmation?
99% des programmes d'ordinateur sont 10 à 100 fois plus lent que ce qu'ils pourraient optimisé pour être seulement parce que les programmeurs ne sais pas ce que les retards sont contraints par leur favori de haut niveau compilateur ou l'interpréteur.
Une compréhension approfondie de la pile complète ici signifie que vous pouvez forcer votre des programmes qui a convoité la propriété de ne prendre que des nanosecondes pour faire le travail à la main. Temps == de l'argent. Donc, cette connaissance de la façon de fuir tout ce qui prend plus de temps que quelques nanosecondes pour achever de gagner du temps, et donc de l'argent.
https://softwareengineering.stackexchange.com/questions/156722/how-does-learning-assembly-aid-in-programming