J'ai écrit un petit programme d'assemblage qui obtient et un fichier d'entrée, un fichier de sortie et un paramètre alternatif (soit -a ou -l). Maintenant, je veux distinguer dans le programme si l'utilisateur a passé un -a ou -l. Je sais que je peux passer le paramètre dans,% eax comme par exemple suit:assembler - Transmettre le paramètre et l'utiliser dans le programme
movl 16(%ebp),%eax
Mais maintenant, je ne sais pas comment comparer% eax avec -a ou avec -l pour vérifier ce paramètre a été passé. Le programme s'exécute sur un système d'exploitation Linux 32 bits.
Quelqu'un peut-il me donner un indice s'il vous plaît?
Merci à l'avance,
enne
EDIT: Je x86-processeur. Voici quelques parties pertinentes du code
.section .data
#######PROGRAM CODE###
.section .text
#STACK POSITIONS
.equ ST_SIZE_RESERVE, 8
.equ ST_FD_IN, 0
.equ ST_FD_OUT, 4
.equ ST_ARGC, 8 #Number of arguments
.equ ST_ARGV_0, 12 #Name of program
.equ ST_ARGV_1, 16 #Input file name
.equ ST_ARGV_2, 20 #Output file name
.equ ST_ARGV_3, 24 #-a or -l or nothing
.equ ST_EXIT_CODE, 28 #Exit code
.globl _start
_start:
###INITIALIZE PROGRAM###
subl $ST_SIZE_RESERVE, %esp #Allocate space for our pointers on the stack
movl %esp, %ebp
### Set standard error code 0
movl $0, %ebx
movl %ebx, ST_EXIT_CODE(%ebp)
movl ST_ARGV_3(%ebp),%eax #eax contains now the alternative paramter
Cela dépend-OS. Par exemple. sous Windows, vous devez appeler 'GetCommandLineW()' ou 'GetCommandLineA()' Win32 pour obtenir la ligne de commande, puis l'analyser. – atzz
Montre ce que tu as dans la mesure où la solution exacte dépend fortement de ton environnement d'exécution, mais cela impliquera une sorte de comparaison de chaînes. – user786653
De quel système d'exploitation s'agit-il? AFAIK Linux 32 bits ne garantit pas le contenu de '% ebp' et sur mon système c'est 0. Vouliez-vous dire'% esp' ou s'agit-il d'un autre système (ou avez-vous oublié un code de démarrage)? – user786653