-
Notifications
You must be signed in to change notification settings - Fork 0
/
fisier2.asm
116 lines (93 loc) · 1.33 KB
/
fisier2.asm
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
.data
str: .space 300
delim: .asciz " "
formatPrintf: .asciz "%d\n"
formatScanf: .asciz "%[^\n]"
primulnr: .space 4
res: .space 4
e: .space 4
.text
.global main
main:
pushl $str
pushl $formatScanf
call scanf
popl %ebx
popl %ebx
pushl $delim
pushl $str
call strtok
popl %ebx
popl %ebx
movl %eax, res
pushl res
call atoi
popl %ebx
movl %eax, primulnr
pushl primulnr # urc primul nr pe stiva
et_for:
pushl $delim
pushl $0
call strtok
popl %ebx
popl %ebx
cmp $0, %eax
je exit
movl %eax, res
pushl res
call atoi
popl %ebx
cmp $0, %eax # compar sa vad daca este operatie sau numar
je operatie
pushl %eax # adaug pe stiva numarul
jmp et_for
operatie:
movl res, %edi
xorl %ecx, %ecx
movb (%edi, %ecx, 1), %al #memorez adresa pointerului in %edi
cmp $0, %al
je exit
cmp $97, %al
je op_add
cmp $100, %al
je op_div
cmp $109, %al
je op_mul
cmp $115, %al
je op_sub
op_add:
popl %eax
popl %ebx
addl %eax, %ebx
pushl %ebx
jmp et_for
op_div:
xorl %edx, %edx
popl %ebx
popl %eax
divl %ebx
pushl %eax
jmp et_for
op_mul:
xorl %edx, %edx
popl %ebx
popl %eax
mull %ebx
pushl %eax
jmp et_for
op_sub:
popl %ebx
popl %eax
subl %ebx, %eax
pushl %eax
jmp et_for
exit:
popl e
pushl e
pushl $formatPrintf
call printf
popl %ebx
popl %ebx
movl $1, %eax
xorl %ebx, %ebx
int $0x80