Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
793d2e7
messa a posto un indentazione ed un commento che mi iero dimenticato
Jun 29, 2016
7bd1d43
open files aggiustato
NoeMurr Jul 4, 2016
0aced23
Merge branch 'da_salvare' of https://github.com/NoeMurr/asmProject201…
NoeMurr Jul 4, 2016
3756552
apertura file
Jul 4, 2016
a30e4d9
apertura file
Jul 4, 2016
74999ae
aggiustato open_files
Jul 4, 2016
47aca47
aggiustato open_files
Jul 4, 2016
571cd1d
aggiustato open_files
Jul 4, 2016
a8626a0
apposto length
NoeMurr Jul 4, 2016
4ba4f80
sextex
mirkomorati Jul 4, 2016
0a10580
apposto length
NoeMurr Jul 4, 2016
1bc9645
no stdout si stderr
NoeMurr Jul 4, 2016
8c19680
aggiornato tex
mirkomorati Jul 4, 2016
49d7b68
Merge branch 'da_salvare' of https://github.com/NoeMurr/asmProject201…
mirkomorati Jul 4, 2016
bc3343d
finiti files in tex
mirkomorati Jul 4, 2016
97596f0
aggiustati alcuni commenti
NoeMurr Jul 4, 2016
7f3335c
aggiunto diagramma del main
NoeMurr Jul 7, 2016
c07759b
Merge branch 'da_salvare' of https://github.com/NoeMurr/asmProject201…
NoeMurr Jul 7, 2016
3931555
texxing
mirkomorati Jul 8, 2016
d80371e
aggiunto file scelte progettuali
NoeMurr Jul 10, 2016
90e9d8e
Merge branch 'da_salvare' of https://github.com/NoeMurr/asmProject201…
NoeMurr Jul 10, 2016
fc4001c
aggiornato file scelte progettuali, scusa i milioni di errori grammat…
NoeMurr Jul 10, 2016
4fb8fce
aggiornato file scelte progettuali, scusa i milioni di errori grammat…
NoeMurr Jul 10, 2016
1840aa1
sistemati i .s, fatto il pdf e ora mangio. amen.
mirkomorati Jul 10, 2016
63d6c1a
aggiunti hyperref, attendo feedback
mirkomorati Jul 10, 2016
cfef8a5
update
mirkomorati Jul 10, 2016
19c9ef9
basta
mirkomorati Jul 10, 2016
194e74d
il makefile.
mirkomorati Jul 10, 2016
49c01f6
fatto il tgz
mirkomorati Jul 10, 2016
66281ab
Delete README.md
mirkomorati Nov 30, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added DEFINITIVO/asm_morati_mirko_murr_noè.tgz
Binary file not shown.
Binary file not shown.
46 changes: 46 additions & 0 deletions DEFINITIVO/asm_morati_mirko_murr_noè/src/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Progetto Assembly 2016
# File: open_files.s
# Autori: Noè Murr, Mirko Morati
#
# Descrizione: Makefile per il progetto assembly

AS:=as
ASFLAGS:=-gstabs --32
LD:=ld
LDFLAGS:=-m elf_i386
BINNAME=elaborato
OBJ= main.o open_files.o read_line.o check.o write_line.o itoa.o atoi.o close_files.o
HEADERS=syscall.inc
RM=rm -rf
ECHO=/bin/echo

.PHONY: all run clean rebuild help

%.o: %.s $(HEADERS)
@$(ECHO) -n "Compiling $< "
@$(AS) -c -o $@ $< $(ASFLAGS)
@$(ECHO) "[ ok ]"

$(BINNAME): $(OBJ)
@$(ECHO) -n "Linking $(BINNAME) "
@$(LD) -o $@ $^ $(LDFLAGS)
@$(ECHO) "[ ok ]"

all: $(BINNAME)

debug: ASFLAGS += -g
debug: LDFLAGS += -g
debug: $(BINNAME)

run: $(BINNAME)
@$(ECHO) "Running $(BINNAME)"
@./$(BINNAME)

clean:
@$(ECHO) -n "Cleaning sources "
@$(RM) *.o
@$(RM) $(BINNAME)
@$(ECHO) "[ ok ]"


rebuild: clean $(BINNAME)
43 changes: 43 additions & 0 deletions DEFINITIVO/asm_morati_mirko_murr_noè/src/atoi.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Progetto Assembly 2016
# File: atoi.s
# Autori: Alessandro Righi, Noè Murr, Mirko Morati
#
# Descrizione: Funzione che converte una stringa in intero.

.section .text
.globl _atoi
.type _atoi, @function

# Funzione che converte una stringa di input in numero
# Prototipo C-style:
# uint32_t atoi(const char *string);
# Parametri di input:
# EDI - Stringa da convertire
# Parametri di output:
# EAX - Valore convertito

_atoi:
xorl %eax, %eax # azzero il registro EAX per contenere il risultato
xorl %ebx, %ebx # azzero EBX
movl $10, %ecx # sposto 10 in ECX che conterrà il valore moltiplicativo

_atoi_loop:
xorl %ebx, %ebx
movb (%edi), %bl # sposto un byte dalla stringa in BL
subb $48, %bl # sottraggo il valore ASCII dello 0 a BL
# per avere un valore intero

cmpb $0, %bl # Se il numero è minore di 0
jl _atoi_end # allora esco dal ciclo
cmpb $10, %bl # Se il numero è maggiore o uguale a 10
jge _atoi_end # esco dal ciclo

mull %ecx # altrimenti moltiplico EAX per 10
# (10 messo precedentemente in ECX)
addl %ebx, %eax # aggiungo a EAX il valore attuale
incl %edi # incremento EDI

jmp _atoi_loop # rieseguo il ciclo

_atoi_end:
ret
106 changes: 106 additions & 0 deletions DEFINITIVO/asm_morati_mirko_murr_noè/src/check.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# Progetto Assembly 2016
# File: check.s
# Autori: Noè Murr, Mirko Morati
#
# Descrizione: Funzione che controlla le variabili
# init, reset, rpm e setta le variabili alm, mod e numb

.section .data

.section .text
.globl _check
.type _check, @function

_check:
pushl %ebp
movl %esp, %ebp

# Caso init == 0: alm = 0; mod = 0; numb = 0;
cmpl $0, init
je _init_0

# Caso SG: alm = 0; mod = 1; numb = reset == 1 ? 0 : numb + 1;
cmpl $2000, rpm
jl _sg

# Caso OPT: alm = 0; mod = 2; numb = reset == 1 ? 0 : numb + 1;
cmpl $4000, rpm
jle _opt

# Caso FG: alm = numb >= 15? 1 : 0; mod = 3; numb = reset == 1 ? 0 : numb + 1;
_fg:
# Salviamo la nuova modalita' in %eax e controlliamo reset
movl $3, %eax
cmpl $1, reset
je _reset_numb

# Se la nuova modalità non è la stessa si resetta il numero di secondi
cmpl $3, mod
jne _reset_numb

incl numb
movl %eax, mod

# Se il numero di secondi è maggiore o uguale a 15 viene alzata l'allarme
cmpl $15, numb
jge _set_alm

jmp _end_check

_opt:
movl $2, %eax
cmpl $1, reset
je _reset_numb

cmpl $2, mod
jne _reset_numb

incl numb
movl %eax, mod

jmp _end_check

_sg:
movl $1, %eax
cmpl $1, reset
je _reset_numb

cmpl $1, mod
jne _reset_numb

incl numb
movl %eax, mod

jmp _end_check

_reset_numb:
movl %eax, mod
movl $0, numb
movl $0, alm

jmp _end_check

_set_alm:
movl $1, alm


jmp _end_check

_init_0:
movl $0, alm
movl $0, numb
movl $0, mod

_end_check:

# Se il numero di secondi supera i 99 allora dobbiamo ricominciare il conteggio
cmpl $99, numb
jg _numb_overflow
movl %ebp, %esp
popl %ebp

ret

_numb_overflow:
movl $0, numb
jmp _end_check
32 changes: 32 additions & 0 deletions DEFINITIVO/asm_morati_mirko_murr_noè/src/close_files.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Progetto Assembly 2016
# File: check.s
# Autori: Noè Murr, Mirko Morati
#
# Descrizione: Funzione che chiude i file aperti precedentemente

.include "syscall.inc"

.section .text
.globl _close_files # Dichiaro la funzione globale
.type _close_files, @function # Dichiaro l' etichetta come una funzione

_close_files:

pushl %ebp
movl %esp, %ebp

# sys_close(input_fd);
movl $SYS_CLOSE, %eax
movl input_fd, %ebx
int $SYSCALL

# sys_close(output_fd);
movl $SYS_CLOSE, %eax
movl output_fd, %ebx
int $SYSCALL


movl %ebp, %esp
popl %ebp

ret
52 changes: 52 additions & 0 deletions DEFINITIVO/asm_morati_mirko_murr_noè/src/itoa.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Progetto Assembly 2016
# File: itoa.s
# Autori: Alessandro Righi, Noè Murr, Mirko Morati
#
# Descrizione: Funzione che converte un intero in stringa
# Prototipo C-style:
# u_int32_t itoa(uint32_t val, char *string);
# Parametri di input:
# EAX - Valore intero unsigned a 64bit da convertire
# EDI - Puntatore alla stringa su cui salvare il risultato
# Parametri di output:
# EAX - Lunghezza della stringa convertita (compresiva di \0 finale)

.section .text
.global _itoa
.type _itoa, @function

_itoa:
movl $10, %ecx # porto il fattore moltiplicativo in ECX
movl %eax, %ebx # salvo temporaneamente il valore di EAX in EBX
xorl %esi, %esi # azzero il registro ESI

_itoa_dividi:
xorl %edx, %edx # azzero EDX per fare la divisione
divl %ecx # divide EAX per ECX, salva il resto in EDX
incl %esi # incrementa il contatore
testl %eax, %eax # se il valore di EAX non è zero ripeti il ciclo
jnz _itoa_dividi

addl %esi, %edi # somma all'indirizzo del buffer
# il numero di caratteri del numero
movl %ebx, %eax # rimette il valore da convertire in EAX
movl %esi, %ebx # salvo il valore della lunghezza della stringa in EBX

movl $0, (%edi) # aggiungo un null terminator alla fine della stringa
decl %edi # decremento il contatore della stringa di 1

_itoa_converti:
xorl %edx, %edx # azzero EDX per fare la divisione
divl %ecx # divido EAX per ECX, salvo il valore del resto in EDX
addl $48, %edx # sommo 48 a EDX
movb %dl, (%edi) # sposto il byte inferiore di EDX (DL)
# nella locazione di memoria puntata da EDI
decl %edi # decremento il puntatore della stringa
decl %esi # decremento il contatore
testl %esi, %esi # se il contatore non è 0 continua ad eseguire il loop
jnz _itoa_converti

movl %ebx, %eax # porto il valore della lunghezza
# della stringa in EAX per ritornarlo
incl %eax # incremento di 1 EAX (in modo da includere il \0)
ret
95 changes: 95 additions & 0 deletions DEFINITIVO/asm_morati_mirko_murr_noè/src/main.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
# Progetto Assembly 2016
# File: main.s
# Autori: Noè Murr, Mirko Morati
#
# Descrizione: File principale, punto di inizio del programma.
.include "syscall.inc"

.section .data
input_fd: .long 0 # variabile globale che conterrà il file
# descriptor del file di input

output_fd: .long 0 # variabile globale che conterrà il file
# descriptor del file di output

# Variabili globali per i segnali di input
init: .long 0
reset: .long 0
rpm: .long 0

# Variabili globali per i segnali di output
alm: .long 0
numb: .long 0
mod: .long 0

# Codice del programma

.section .text
.globl input_fd
.globl output_fd
.globl init
.globl reset
.globl rpm
.globl alm
.globl numb
.globl mod
.globl _start

# Stringa per mostrare l'utilizzo del programma in caso di parametri errati
usage: .asciz "usage: programName inputFilePath outputFilePath\n"
.equ USAGE_LENGTH, .-usage

_start:
# Recupero i parametri del main
popl %eax # Numero parametri

# Controllo argomenti, se sbagliati mostro l'utilizzo corretto
cmpl $3, %eax
jne _show_usage

popl %eax # Nome programma
popl %eax # Primo parametro (nome file di input)
popl %ebx # Secondo parametro (nome file di output)

# NB: non salvo ebp in quanto non ha alcuna utilità
# nella funzione start che comunque non ritorna

movl %esp, %ebp

call _open_files # Apertura dei file

_main_loop:

call _read_line # Leggiamo la riga

cmpl $-1, %ebx # EOF se ebx == -1
je _end

call _check # Controllo delle variabili

call _write_line # Scrittura delle variabili di output su file

jmp _main_loop # Leggi un altra riga finché non è EOF

_end:

call _close_files # Chiudi correttamente i file

# sys_exit(0);
movl $SYS_EXIT, %eax
movl $0, %ebx
int $SYSCALL

_show_usage:
# esce in caso di errore con codice 1
# sys_write(stdout, usage, USAGE_LENGTH);
movl $SYS_WRITE, %eax
movl $STDOUT, %ebx
movl $usage, %ecx
movl $USAGE_LENGTH, %edx
int $SYSCALL

# sys_exit(1);
movl $SYS_EXIT, %eax
movl $1, %ebx
int $SYSCALL
Loading