Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Assembly: exe/com

    Qualcuno mi sa spiegare come tradurre questo sorgente di un file *.com in uno *.exe?

    Schermo_colorato.COM:
    codice:
    MAIN SEGMENT
         ASSUME CS:MAIN,DS:MAIN,SS:MAIN,ES:MAIN
         ORG 100h
    START:
         MOV AX,0A000h
         MOV ES,AX
         
         MOV AX,0013h
         INT 10h
         
         MOV AL,03
         XOR DI,DI
         MOV CX,64000
         REP STOSB
         
         XOR AX,AX
         INT 16h
    
         MOV AX,0003h
         INT 10h
    
         INT 20h
    MAIN ENDS
    END START
    IO ho provato così:

    Schermo_colorato.EXE
    codice:
    .MODEL small
    .STACK 100h
    
    .CODE
    START:
         MOV AX,0A000h
         MOV ES,AX
         
         MOV AX,0013h
         INT 10h
         
         MOV AL,03
         XOR DI,DI
         MOV CX,64000
         REP STOSB
         
         XOR AX,AX
         INT 16h
    
         MOV AX,0003h
         INT 10h
    
         MOV AH,4CH
         INT 21h
    END START
    Il file .com funziona perfettamente, cioè passa in modalità grafica, colora lo schermo, attende un tasto e torna alla modalità testo,il .exe invece non mi cambia modalità grafica e si limita a visualizzare il prompt per la pressione di un tasto.
    Non so proprio che fare, forse è un problema di segmenti..?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il formato di un file Exe è piu' complesso perche' prevede delle informazioni in piu' dedicate alla possibilita' di rilocare in memoria il codice.

    *Non puoi* rinominare semplicemente il file com, ma devi farlo fare ad un tool apposito.

    da questa pagina

    http://www.ericphelps.com/favorites/utilities.html

    mi sembra che si possa scaricare un tool del genere (c2e) ma non l'ho mai provato ...

  3. #3
    Ma io non ho mai parlato di RINOMINARE il file.com in file.exe! Chiedevo appunto che modifiche dovevo apporate al sorgente per poi compilare il tutto come eseguibile .exe con TASM. Mi interessava sapere come modificare le istruzioni per adattarle al formato .exe, ecco.

  4. #4
    Mi correggo, anche il secondo listato in effetti funziona, almeno come l'ho scritto qui. Il problema è quando aggiungo all'inizio del sorgente la direttiva ".386" per poter utilizzare i registri a 32 bit(eax, ebx..): la compilazione e il linkaggio vano lisci, ma al momento dell'esecuzione non funziona correttamente, come ho detto nel primo post.
    Eppure io sto proprio utilizzando un 386 portatile(no, non adesso!).. forse l'emulazione di un 386 non funziona se la si utilizza proprio su un 386? Mi servono proprio quei registri a 32 bit!

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286
    codice:
    .MODEL small
    .STACK 100h
    
    .CODE
    START:
         MOV AX,0A000h
         MOV ES,AX
         
         MOV AX,0013h
         INT 10h
         
         MOV AL,03
         XOR DI,DI
         MOV CX,64000
         REP STOSB
         
         XOR AX,AX
         INT 16h
    
         MOV AX,0003h
         INT 10h
    
         MOV AH,4CH
         INT 21h
    END START
    Ho assemblato il tuo codice con tasm e l'applicativo.exe funziona perfettamente. colora lo schermo e ritorna dopo la pressione del tasto.

    Perché ti servono i registri a 32 bit?

  6. #6
    I 32bit mi servivano per una questione di velocità: utilizzando il registro eax posso per esempio caricare 4 byte in memoria video alla volta invece che 2 byte alla volta se utilizzo il registro ax, il che si traduce in una routine con velocità praticamente DOPPIA. Il sorgente che avevo allegato funzionava correttamente anche a me, il problema sorgeva quando aggiungevo all'inizio del listato la riga
    codice:
    .386
    che da quello che ho capito serve per poter utilizzare i registri a 32bit tipo eax, che sono stati introdotti appunto a partire dalla serie di microprocessori 386(ed io ho proprio montato un 386 nel computer col quale faccio e avvio questo programmino). Il sorgente potrebbe essere riscritto così(ed è quello che appunto a me non funziona!)
    codice:
    .386
    .MODEL small
    .STACK 100h
    
    .CODE
    START:
         MOV AX,0A000h
         MOV ES,AX
         
         MOV AX,0013h
         INT 10h
         
         MOV EAX,03030303h
         XOR DI,DI
         MOV CX,16000
         REP STOSD
         
         XOR AX,AX
         INT 16h
    
         MOV AX,0003h
         INT 10h
    
         MOV AH,4CH
         INT 21h
    END START
    Come avevo detto all'inizio, quando avvio l'eseguibile il sistema non passa alla modalità grafica, non si colora lo schermo, ma si limita ad attendere la pressione del tasto ed esce. Mi chiedo cosa ci sia di sbagliato nel codice...

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286
    Ho provato a compilarlo per la modalità protetta con tasm32, ma mi crea un conflitto al momento dell'esecuzione. Non ho avuto tempo di vederci chiaro, comunque ho inizializzato così:

    .386
    .MODEL FLAT, STDCALL

    .CODE
    START:
    ; ...eccetera, eccetera...
    END START

    Se trovi la solizione postala, potrebbe interessare.

  8. #8
    Ehm.. io ho aperto questa discussione proprio perchè non la trovavo. Quindi:

    Se QUALCUNO trova la soluzione la posti, potrebbe interessare(a me).

    Io continuo a cercare..

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    A parte il fatto che mi sembra che il titolo di questo post debba essere cambiato (non devi tradurre nulla ... semmai devi utilizzare i registri a 32 bit nel tuo codice ...), vorrei capire in quale modalita' esegui il codice (che sia COM o EXE) ...

    Lo fai in una finestra DOS ?

  10. #10
    Sì, il titolo andrebbe cambiato.
    Ti spiego: io sto utilizzando questi programmi su di un 386 portatile, avviato in modalità DOS da floppy(perchè l'hard disk non funziona). Utilizzo la versione del DOS contenuta in windows 98.
    Il problema credo sia proprio nel codice, non nella configurazione.

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.