Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444

    [ASM-C++] ASM nel DevC++

    Salve, ho un problema di integrazione ASM nel DEV C++.
    Ho provato questo ma non va!!

    (dovrebbe stampare una stringa)

    codice:
    #include <stdio.h>
    
    int main()
    {
        char *var = "asd";
        /*** asm inline nel dev-cpp *****
    
        operand? source, destination
        %register
        $constant value
        [memory] reference
        l, w, b: operand size specification
        ex:
          movb $0x01 , %al
          movw $0x01 , %ax
          movl $0x01 , %eax
    
    
        *********************************/
       __asm__ ("
            movb $0x09,%ah
            movw $0x00401210,%dx    //0x00401210 indirizzo di asd
            int $0x21
        ");
        return 0;
    }
    L'errore è in fase di runtime.
    Il dev è il 4.0.0.0

    grazie per l'aiuto che mi darete
    *********************************
    Andrea
    *********************************

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [ASM-C++] ASM nel DevC++

    Originariamente inviato da Squall1988
    codice:
    #include <stdio.h>
    
    int main()
    {
        char *var = "asd";
        /*** asm inline nel dev-cpp *****
    
        operand? source, destination
        %register
        $constant value
        [memory] reference
        l, w, b: operand size specification
        ex:
          movb $0x01 , %al
          movw $0x01 , %ax
          movl $0x01 , %eax
    
    
        *********************************/
       __asm__ ("
            movb $0x09,%ah
            movw $0x00401210,%dx    //0x00401210 indirizzo di asd
            int $0x21
        ");
        return 0;
    }
    L'errore è in fase di runtime.
    Il dev è il 4.0.0.0

    grazie per l'aiuto che mi darete
    Non puoi utilizzare codice assembler caratteristico del mondo a 16 bit in un sistema Win32 con un compilatore a 32 bit.

    A parte il fatto che non capisco perche' tu utilizzi un indirizzo costante come

    0x00401210

    dato che questo puo' variare da esecuzione in esecuzione, in ogni caso, quell'indirizzo e' a 32 bit e tu lo vuoi assegnare a un registro a 16 (dx).

    La chiamata per la visualizzazione della stringa prevede l'indirizzo "segmentato" (segmentoffset) classico del mondo a 16 bit e che non puoi utilizzare con il compilatore a 32 bit con Win32 (gli indirizzi sono "flat").

    Per fare una prova con il codice a 16 bit, puoi aprire una finestra DOS, eseguire il programma DEBUG e, con questo, assemblare ed eseguire codice.

    Ti ricordo poi che la funzione 9 dell'INT 0x21 (visualizza una stringa) pretende che la stringa sia chiusa dal carattere $
    Per le tue prove con il DEBUG, quindi, la stringa dovra' essere

    asd$

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.