Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: C + asm();

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    37

    C + asm();

    Salve! Vorrei fare una funzione che stampa un determinato carattere di un determinato colore. Non riesco però a scrivere l'assembly in modo che il progamma lo legga correttamente.
    Codice PHP:
    #include <stdio.h>
    void cprintc(charchar);

    int main()
    {
        
    cprintc('a'0x60);
        
    getchar();
    }

    void cprintc(char chchar f)
    {
         
    /*asm("MOV CX, 1\
              MOV BL, col\
              MOV AL, ch\
              MOV AH, 09\
              int 10");
         */
         
    asm("mov $1, %cx\n\
              mov $9,  %ah\n\
              mov ch, %al\n\
              mov f, %bl\n\
              int $10"
         
    );

    [Linker error] undefined reference to `ch'
    [Linker error] undefined reference to `f'


    Idem se metto '$ch' e '$f' anziche 'ch' e 'f'


    La funzione ASM è questa:
    http://www.giobe2000.it/tutorial/Liv.../Bios10_09.htm

  2. #2
    L'esatto uso dei blocchi asm dipende dal compilatore che stai usando... Inoltre, tieni conto che le chiamate BIOS per l'output grafico non si usano dai tempi del DOS.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ma con quale compilatore lavori? Con quale sistema operativo?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    37
    Scusate, avevo dimenticato i dettagli
    Le istruzioni sono dell'8086, lavoro su win7 a 32 bit e quelle istruzioni sul debug.exe mi funzionano... Uso Dev-cpp (non picchiatemi, ho formattato il pc e non ho visual studio)
    Se no come potrei scrivere la funzione? Dovrebbe stampare un carattere con un determinato colore di sfondo (del dos essendo in console) e di un colore per il carattere...

  5. #5
    Originariamente inviato da matti96
    Dovrebbe stampare un carattere con un determinato colore di sfondo (del dos essendo in console) e di un colore per il carattere...
    Ma sotto DOS o in modalità CONSOLE sotto Windows? Sono due cose diverse. Nel secondo caso ti basta una chiamata alla SetConsoleTextAttribute (http://msdn.microsoft.com/en-us/libr...sktop/ms686047).

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    37
    No no, niente api, deve essere multi-platform... Infatti non credo che l'asm vada bene

  7. #7
    Originariamente inviato da matti96
    Le istruzioni sono dell'8086, lavoro su win7 a 32 bit e quelle istruzioni sul debug.exe mi funzionano...
    In debug.exe se non ricordo male crei eseguibili com che vengono eseguiti da NTVDM, ovvero un layer di compatibilità per programmi per DOS. Come ti è stato detto, se vuoi scrivere un'applicazione console per Windows le API da usare sono quelle che ti sono state suggerite - dato che appunto, quelle chiamate alle routine del BIOS era roba che si poteva usare in DOS in modalità reale.
    No no, niente api, deve essere multi-platform... Infatti non credo che l'asm vada bene
    Lo standard C non definisce nulla per colorare l'output, o usi le API specifiche della piattaforma (API di console su Windows, sequenze di escape VT100 su sistemi UNIX-like, eventualmente wrappate dietro funzioni "agnostiche"), oppure ti affidi ad una libreria portabile che astragga questi problemi (un classico sono le varie ncurses/pdcurses, anche se offrono molto più di quanto non ti serva).
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Chiarisci un po' le cose ...

    Perché scrivi codice in assembly? Per un esercizio scolastico? Per tentare di fare funzionare comunque il codice (Win/Linux) ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    37
    Sto scrivendo una libreria portatile e vorrei mettere cprintf e non è un problema ma mi serve fare cputc quindi devo gestire tutto io,quindi credo che devo scrivere a basso livello...

  10. #10
    Il punto è che il "basso livello" delle chiamate BIOS non è supportato dai sistemi operativi attuali, dato che le "console software" non sono gestite dal BIOS (e comunque non è consentito a programmi in usermode di fare chiamate BIOS). Devi usare API specifiche di piattaforma, implementando una funzione per impostare colore di primo piano e sfondo in modo diverso a seconda del sistema operativo su cui compili (basta qualche #ifdef).
    Amaro C++, il gusto pieno dell'undefined behavior.

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.