2017-03-03 3 views
-1

J'utilise la fenêtre 7 et je ne sais pas comment compiler ce code d'assemblage. Dois-je calculer manuellement? Je veux savoir la meilleure façon d'aller plus vite ou de savoir comment calculer ligne par ligne. J'ai besoin de la valeur finale de rax.Comment compiler le code d'assemblage 64bit

start: 
mov $1020, %rax 
mov $4090, %rbx 
mov $2044, %rcx 
xor %rdx, %rdx 
sub %rcx, %rbx 
cmp %rbx, %rax 
jge loopa 
jmp loopb 
loopa: 
cmp $4, %rdx 
jg end 
inc %rdx 
loopb: 
xchg %rax, %rbx 
idiv %rbx 
add %rdx, %rax 
imul %rcx 
jmp loopa 
end: 

Répondre

2

Étant donné que cela est en AT & T syntaxe, vous voulez probablement as et ld du toolchain MinGW, que vous pouvez utiliser pour construire un exécutable sur ce sujet.

Vous devez ajouter un peu de texte standard supplémentaire au début d'exporter le symbole du point d'entrée et de dire l'éditeur de liens que la fonction va dans le segment .text:

.text 
.global start 

Ensuite, vous pouvez monter le fichier et lier:

as filename.as -o filename.o 
ld filename.o -e start -o output.exe 

l'option -e indique l'éditeur de liens quelle fonction sera le point d'entrée de l'exécutable.

(J'ai testé cela sur Linux, mais la syntaxe doit être la même dans l'ensemble des outils MinGW sous Windows)

Maintenant, votre fonction d'assemblage ne réalise aucune IO, et ne même pas correctement résilier, donc Si vous exécutez votre exécutable, vous obtiendrez probablement un segfault. Vous devez l'exécuter dans un débogueur, en ajoutant un point d'arrêt à la fin de la fonction et en inspectant rax lorsque l'exécution arrive.

Une autre option consiste à incorporer ce code dans un bloc asm dans un fichier C et d'effectuer l'E/S dans C. Cependant, si aucune chaîne d'outils n'est installée, vous pouvez accélérer le résultat manuellement.

+0

tout tutoriel sur le point de faire étape par étape pour la compilation. –

+2

@MinKoKo La demande de ressources hors site, comme les tutoriels, est hors-sujet. Utilisez Google pour cela. –

+0

Est-ce que l'esprit downvoter expliquer? –