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$