Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    I/o assembler & gcc error

    Salve raga, ho di nuovo problemi con l'assembler e l'input output, non capisco perchè non mi permette di fare piu di una chiamata alle mie funzioni.... Io compilo tutto con as e linco con ld , perchè gcc mi da questo errore :

    codice:
    /usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crt1.o: In function `_start':
    (.text+0x18): undefined reference to `main'
    collect2: ld returned 1 exit status

    Il file che mi da problemi è il seguente :

    codice:
     
    .include "Utility_PES"
    
    
    _main : 
    	call input
    	mov %al, %ah
    	call input 
    	call output
    	mov %ah, %al
    	call output
    	call exit
    il File utility è :

    codice:
     
    
    .section .data 
    
    
    #definizioni costanti
    
    .equ SYS_EXIT,  1
    .equ SYS_READ, 3
    .equ SYS_WRITE, 4
    
    .equ STDIN,  0
    .equ STDOUT, 1
    .equ STDERR, 2
    
    
    .equ SYSTEM_CALL_LINUX,0x80
    
    #definizione varianbili
    
    	msg :	
    		.ascii  "0"
    	end_msg : 
    
    var_b : .byte 0 
    
    .section  .text 
    
    
    
    output : 
    				#Salvo lo stato dei registri prima della chiamata 
    
    	push %eax 				# salvo anche questo perchè ci potrebbero essere dei dati nel registri ax ah che possono servire 
    	push %ebx
    	push %ecx
    	push %edx
    	mov %al, msg  		# muovo il byte contenuto nel registro al nella posizione di memoria msg
    
    	# formato system call 
    	
    	xor %eax,%eax 				# pulisco i registro Setto a zero  	
    
    	movl $SYS_WRITE, %eax		 	# system_call da chiamare 
    	movl $STDOUT, %ebx			# file di uscita standard 
    	movl $msg , %ecx				# Muovo dall'indirizzo msg nel registro ecx
    	movl $1, %edx 				# size stringa 
    	int $SYSTEM_CALL_LINUX
    
    						#ripristino lo stato dei registri aalo stadio precedente  
    	pop %edx
    	pop %ecx
    	pop %ebx
    	pop %eax
    
    	ret 					#RITORNO AL PROGRAMMA PRINCIPALE
    
    
    
    #funzione scritta dal professore "crea una nuova linea
    newline:
    	 PUSH  %AX
    
             MOV   $0x0D,%AL
    
             CALL  output
    
             MOV   $0x0A,%AL
    
             CALL  output
    
             POP   %AX
    
             RET
    
    input : 
    	push %ebx
    	push %ecx
    	push %edx
    
    	mov %ah, var_b
    	xor %eax, %eax	
    	
    	movl $SYS_READ, %eax		 	# system_call da chiamare 
    	movl $STDIN, %ebx			# file di entrata standard 
    	movl $msg , %ecx			# Muovo dall'indirizzo msg nel registro ecx
    	movl $1, %edx 				# size stringa 
    	int $SYSTEM_CALL_LINUX
    	
    	mov msg, %al							#ripristino lo stato dei registri allo stadio precedente 
    	mov var_b , %ah	
    	pop %edx
    	pop %ecx
    	pop %ebx
    
    	ret  
    
    exit : 
    	movl $SYS_EXIT, %eax
    	movl $0, %ebx
    	int $SYSTEM_CALL_LINUX
    
    
    .global _main
    La chiamate ad exit sono obbligato a farla perchè se metto il ret nel programma principale va in crash...

    Qualche idea????

  2. #2
    Nel primo file, metti:
    codice:
    .global _main
    Prova a vedere se funziona.
    Oppure cambia il nome da _main a main.


  3. #3
    Non è cambiato niente... E poi la direttiva include mette il contenuto di quel file nell'altro quindi il global era sempre presente!!

    Forse c'è qualche errore nel codice ma io non riesco a vederlo ( credo nell'input)... Programmo da poco in assembler quindi o avuto tanti problemi anche per fare un codice cosi semplice!!!

    HELP HELP

  4. #4
    Ho capito che se chiamo in sequenza più di una input lei continua a leggere dal file anche i caratteri successivi e per questo che la seconda input non va... Avete qualche idea di come posso evitare questo?? Tipo svuotando le posizioni successive del file?? O c'è qualche metodo migliore per fare l'input??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.