PDA

Visualizza la versione completa : [Assembly] creazione men˙ in assembly per intel 80x86 at&t


rich94
07-08-2014, 23:10
Buongiorno a tutti, spero possiate aiutarmi, devo fare un programma im assembly che dopo aver lanciato l'eseguibile, visualizzi un men¨, questo Ú quello che "sono riuscito a fare"


Men¨ cruscotto
1. Setting automobile:
2. Data: 15/06/2014
3. Ora: 15:32
4. Blocco automatico porte: ON
5. Back-home: ON
6. Check olio
7. Frecce direzione
8. Reset pressione gomme


invece quello che si deve vedere Ŕ questo:

Men¨ cruscotto
1. Setting automobile:

//poi premendo freccia gi¨ + invio deve spostarsi di rigas in riga(ecco associare la parte del tasto non so proprio come farla)

Men¨ cruscotto
2. Data: 15/06/2014 visualizzandone per˛ sempre una alla volta,

ecco io ho sviluppato il programma in 1 main e 8 funzioni (sottoprogrammi) per facilitarmi nel caso avessi riscontrato dei problemi

ecco il main


.section .data
menu:
.ascii " Men¨ cruscotto\n"

menu_len:
.long . -menu # lunghezza della stringa in byte

.section .text

.global _start

_start:

movl $4, %eax # 4 corrisponde alla system call "write"
movl $1, %ebx # stampa nello standard output (schermo)
leal menu, %ecx # puntatore char a ci˛ che si vuole stampare

movl menu_len, %edx # copia del contenuto della variabile. carica la lunghezza della variabile

int $0x80 # system call (int sarebbe "interaction"); con 0x80 si lancia una interaction generale
# dichiarata (in base ai valori caricati precedentemente nei registri)


call setting
jmp exit
call data
jmp exit
call ora
jmp exit
call porte
jmp exit
call home
jmp exit
call olio
jmp exit
call frecce
jmp exit
call reset
exit:
xorl %eax, %eax
inc %eax
xorl %ebx, %ebx
int $0x80


---------------------------------------

//sottoprogramma per le righe, ne posto solo uno perchŔ gli altri sono uguali a parte le etichette e sull'ultimo quello per la riga reset alla fine ho messo l'istruzione ret per uscire dal programma

.section .data

set:
.ascii "1. Setting automobile:\n"

set_len:
.long . -set # lunghezza della stringa in byte

.section .text

.global setting
.type setting, @function

setting:
movl $4, %eax # 4 corrisponde alla system call "write"
movl $1, %ebx # stampa nello standard output (schermo)
leal set, %ecx # puntatore char a ci˛ che si vuole stampare

movl set_len, %edx # copia del contenuto della variabile. carica la lunghezza della variabile

int $0x80 # system call (int sarebbe "interaction"); con 0x80 si lancia una interaction generale
# dichiarata (in base ai valori caricati precedentemente nei registri)
Il programma deve perˇ visualizzare all'avvio solo la prima riga e permettere di spostarsi da una riga all'altra con la combinazione di tasti (freccia gi˙ + invio) visualizzando perˇ solo la riga selezionata

Spero si capisca. Grazie per l'attenzione

Loading