-
Notifications
You must be signed in to change notification settings - Fork 0
/
sequencia.vm
119 lines (119 loc) · 2.42 KB
/
sequencia.vm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
// Universidade do Minho, Dpto Informatica
// UC Processamento de Linguagens
// Maio 2016, Filipe Oliveira
//
// Trabalho pratico 2
// Exemplo 3
// Contar e imprimir os numeros pares de uma sequencia de N numeros dados
pushi 0 //qtos_numeros
pushn 25 //auxiliar[25]
pushi 0 //i
pushi 0 //n_pares
pushi 0 //actual
start
pushi 1
storeg 26 // store var i
pushs "quantos numeros a ler?: " //print string "quantos numeros a ler?: "
writes
read
atoi
storeg 0 // store var qtos_numeros
// +++ CICLE DO BEGIN +++
cycle0: //do
pushs " insira numero " //print string " insira numero "
writes
pushgp
pushi 26 //puts on stack the address of i
padd
pushi 0
loadn
writei
pushs " de " //print string " de "
writes
pushgp
pushi 0 //puts on stack the address of qtos_numeros
padd
pushi 0
loadn
writei
pushs ": " //print string ": "
writes
read
atoi
storeg 28 // store var actual
// +++ CONDITIONAL IF BEGIN +++
conditional0:
pushg 28
pushi 2
mod
pushi 0
equal //relational equal
jz inelse0
inthen0:
pushgp
pushi 1 //puts on stack the address of auxiliar
padd
// +++ Matrix or Vector Dimension Start +++
pushg 27
pushi 0 //second dimension size of vector(0)
add //sums both dimensions
// --- Matrix or Vector Dimension End ---
pushg 28
storen
pushg 27
pushi 1
add
storeg 27 // store var n_pares
jump outif0
inelse0:
outif0:
// --- CONDITIONAL IF END ---
pushg 26
pushi 1
add
storeg 26 // store var i
pushg 26
pushg 0
infeq //relational inferior or equal
jz endcycle0 //while
jump cycle0
endcycle0:
// --- CICLE DO END ---
pushi 0
storeg 26 // store var i
pushs " ###LISTA DE PARES " //print string " ###LISTA DE PARES "
writes
// +++ CICLE DO BEGIN +++
cycle1: //do
pushgp
pushi 1 //puts on stack the address of auxiliar
padd
// +++ Matrix or Vector Dimension Start +++
pushg 26
pushi 0 //second dimension size of vector(0)
add //sums both dimensions
// --- Matrix or Vector Dimension End ---
loadn
writei
pushs " " //print string " "
writes
pushg 26
pushi 1
add
storeg 26 // store var i
pushg 26
pushg 27
inf //relational inferior
jz endcycle1 //while
jump cycle1
endcycle1:
// --- CICLE DO END ---
pushs " total pares: " //print string " total pares: "
writes
pushgp
pushi 27 //puts on stack the address of n_pares
padd
pushi 0
loadn
writei
stop