summaryrefslogtreecommitdiff
path: root/ecomp-c/tests/example_divisors_array_result.easm
blob: e97c0f27ea256b6c483c22978ce966915834e64e (plain)
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
format binary
use32
org $1000000
jmp __global_0
; DECL n -> integer, 0
; DECL i -> integer, 0
; DECL nof -> integer, 0
; DECL divisor -> array 20 of integer, array 20 of integer = { ... }
__global_0:
; LET n <- 100 
mov eax, 100
push eax
pop eax
mov [n], eax
; LET i <- 1 
mov eax, 1
push eax
pop eax
mov [i], eax
; LET nof <- 0 
mov eax, 0
push eax
pop eax
mov [nof], eax
; WHILE i n <= 
__global_1:
mov eax, [i]
push eax
mov eax, [n]
push eax
pop ebx
pop eax
cmp eax, ebx
jbe __global_5
mov eax, 0
jmp __global_6
__global_5: mov eax, 1
__global_6:
push eax
pop eax
mov ebx, 0
cmp eax, ebx
je __global_3
jmp __global_4
__global_3: jmp __global_2
__global_4:
; TEST n i mod 0 = 
mov eax, [n]
push eax
mov eax, [i]
push eax
pop ebx
pop eax
mov edx, 0
div ebx
push edx
mov eax, 0
push eax
pop ebx
pop eax
cmp eax, ebx
je __global_9
mov eax, 0
jmp __global_10
__global_9: mov eax, 1
__global_10:
push eax
pop eax
mov ebx, 0
cmp eax, ebx
je __global_7
; LET divisor[nof ] <- i 
mov eax, [nof]
push eax
pop eax
mov ebx, 4
mul ebx
push eax
mov eax, divisor
pop ebx
add eax, ebx
push eax
mov eax, [i]
push eax
pop eax
pop ebx
mov [ebx], eax
; LET nof <- nof 1 + 
mov eax, [nof]
push eax
mov eax, 1
push eax
pop ebx
pop eax
add eax, ebx
push eax
pop eax
mov [nof], eax
jmp __global_8
__global_7:
__global_8:
; LET i <- i 1 + 
mov eax, [i]
push eax
mov eax, 1
push eax
pop ebx
pop eax
add eax, ebx
push eax
pop eax
mov [i], eax
jmp __global_1
__global_2:
hlt
divisor: dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
dd $00000000
nof: dd $00000000
i: dd $00000000
n: dd $00000000