Programma in assembly att intel 80x86 per menù automobile

di il
1 risposte

Programma in assembly att intel 80x86 per menù automobile

Salve a tutti, dopo molti tentativi XD, alla fine sono riuscito a terminare un programma, che mi visualizzi un menù automobile, per visualizzare lo stato dell'olio, delle freccie eccetera, purtroppo vorrei aggiungere un tocco di classe che però nn mi riesce, quando arrivo al makefile. in poche parole queste le specifiche.

Il programma potrà essere avviato in due modalità:
-) utente (lanciando solo il nome dell’eseguibile da riga di comando)
-) supervisor (lanciando il nome dell’eseguibile seguito dal codice 2244).
Se avviato in modalità utente, il programma dovrà visualizzare, una riga alla volta, il seguente
menù, partendo dalla prima riga e scorrendo sulle altre premendo il tasto freccia-giù/freccia-
su+invio (un freccia-giù+invio da messaggio di riga 6 corrisponde alla visualizzazione del
messaggio riga 1):

• Setting automobile:
• Data: 15/06/2014
• Ora: 15:32
• Blocco automatico porte: ON
• Back-home: ON
• Check olio
Se avviato in modalità supervisor, il programma dovrà visualizzare la riga 1 nel seguente modo:
“Setting automobile (supervisor)”, e poter visualizzare anche le seguenti righe:
• Frecce direzione
• Reset pressione gomme

Ad ogni voce visualizzata, premendo i tasti freccia-destra+invio si potrà entrare nel sottomenù
corrispondente, nel quale verrà visualizzato lo stato attuale del setting e data la possibilità di
impostazione. Ad esempio, una volta visualizzato il menù “Blocco automatico porte: ON”,
premendo il tasto freccia-destra+invio, si dovrà permettere il cambiamento del setting ON, tramite i
tasti fraccia-giù o freccia-su+invio.

In particolare, si dovrà permettere il setting dei sottomenù 4 e 5, con possibilità di impostazione
ON/OFF come nell’esempio sopra. I sottomenù 2, 3, 6, non dovranno essere implementati in questo
elaborato. All’interno di un sottomenù, il solo inserimento di invio da tastiera corrisponde al ritorno
al menù principale.

Se avviato in modalità supervisor, il sottomenù “Frecce direzione” dovrà visualizzare il numero dei
lampeggi modalità autostrada (3 per default) con possibilità di variazione (valore minimo 2, valore
massimo 5) tramite tastiera (valori inseriti fuori range corrispondono al setting del max/min valore).
Nel sottomenù “Reset pressione gomme”, inserendo il carattere freccia-destra seguito+invio, il
menù dovrà restituire il messaggio “Pressione gomme resettata” e tornare al menù principale.

ok fin qui tutto bene il programma simulato e provato funziona, l unica cosa che vorrei aggiungere è l 'aggiornamento di data e ora ad ogni avvio

io ho provato a prendere il file c per l ora e dopo opportune modifiche per rientrare nelle mie necessità convertirlo con gcc, il problema sorge quando provo a compilarlo insieme al resto.

ecco il file convertito, ne metto uno ma è simile anche per la data
.section .rodata
.LC0:
.string "3. Ora: %d:%d:%d\n"
.text
.globl tim
.type tim, @function
tim:
.LFB0:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
pushl %ebx
andl $-16, %esp
subl $32, %esp
leal 24(%esp), %eax
movl %eax, (%esp)
.cfi_offset 3, -12
call time
leal 24(%esp), %eax
movl %eax, (%esp)
call localtime
movl %eax, 28(%esp)
movl 28(%esp), %eax
movl (%eax), %ebx
movl 28(%esp), %eax
movl 4(%eax), %ecx
movl 28(%esp), %eax
movl 8(%eax), %edx
movl $.LC0, %eax
movl %ebx, 12(%esp)
movl %ecx, 8(%esp)
movl %edx, 4(%esp)
movl %eax, (%esp)
call printf
movl $0, %eax
movl -4(%ebp), %ebx
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
.cfi_restore 3
ret
.cfi_endproc

ecco quindi la mia domanda sapreste dirmi come fare per un programma interamente in assembly at&t intel 80x86 per aggiornare l ora ad ogni avvio? grazie infinite a chi risponderà. Purtroppo ho provato ma nn riesci a darne fuori

1 Risposte

  • Re: Programma in assembly att intel 80x86 per menù automobile

    Ciao
    mi vengono in mente 3 tecniche.
    1) ti scrivi un programma sempre attivo in modalita kernel che ti visualizzi ogni x tempo la data e l'ora. ma ha lo svantaggio che ogni applicazione che eseguiresti lo utilizzerebbe.
    2) ti devi riscrivere la funzione che usi più frequentemente usando la tecnica degli handling interrupt cosa che ti richiederebbe parecchio tempo.
    potresti riscriverti la printf cosi da creare il minor casino possibile e di solito e la funzione più usata.
    3) crei una funzione che legga e visualizzi la data e l'ora
    3.1) chiami questa funzione dopo ogni operazione che fai.
    consiglio
    crei una funzione che legga e visualizzi la data e l'ora
    e la richiami solo ad inizio di ogni opzione (il che è la cosa più sensata da fare secondo me!)
    per quanto riguarda il posizionamento.
    devi usare le sys call che gestiscono il cursore.
    che sotto linux non conosco.
    spero di averti dato qualche buona idea per risolvere il tuo problema
Devi accedere o registrarti per scrivere nel forum
1 risposte