Non puoi utilizzare codice assembler caratteristico del mondo a 16 bit in un sistema Win32 con un compilatore a 32 bit.Originariamente inviato da Squall1988
L'errore è in fase di runtime.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; }
Il dev è il 4.0.0.0
grazie per l'aiuto che mi darete![]()
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$