|
@@ -35,7 +35,6 @@ def intemerdiario(token,args, inicio, fim, loop,condicional, texto):
|
35
|
35
|
|
36
|
36
|
with open('intermediario.s','w') as f:
|
37
|
37
|
f.write('\n'.join(texto))
|
38
|
|
- #print (texto)
|
39
|
38
|
def simpleexpre(exp,var,texto):
|
40
|
39
|
'''
|
41
|
40
|
ADD dest,src1,src2 dest = src1 + src2
|
|
@@ -77,4 +76,49 @@ def variaveis(token,i):
|
77
|
76
|
if not('virgula' in token[l][0]):
|
78
|
77
|
var.append('INTEIRO '+token[l][1])
|
79
|
78
|
l+=1
|
80
|
|
- return var
|
|
79
|
+ return var
|
|
80
|
+def gerarcodigo(token,args):
|
|
81
|
+ texto=[]
|
|
82
|
+ '''
|
|
83
|
+ intermediario(token, args, posicao inicial que deseja converter para assembler, posição final, valor inicial das Labels dos loops, valor inicial das Labels dos condicionais)
|
|
84
|
+ '''
|
|
85
|
+ intemerdiario(token, args, 0, len(token), 0, 0, texto)
|
|
86
|
+ gerar()
|
|
87
|
+def gerar():
|
|
88
|
+ texto=[]
|
|
89
|
+ with open('intermediario.s','r') as f:
|
|
90
|
+ texto=f.readlines()
|
|
91
|
+ i=0
|
|
92
|
+ final=[]
|
|
93
|
+ db=[]
|
|
94
|
+ msg=-1
|
|
95
|
+ final.append('format ELF64 executable 3')
|
|
96
|
+ final.append('segment readable executable')
|
|
97
|
+ final.append('entry main')
|
|
98
|
+ final.append('main:')
|
|
99
|
+
|
|
100
|
+ while i < len(texto):
|
|
101
|
+ if 'ESCREVA' in texto[i]:
|
|
102
|
+ if '"' in texto[i]:
|
|
103
|
+ msg += 1
|
|
104
|
+ size = texto[i].strip('ESCREVA')
|
|
105
|
+ size = size.strip('\n').replace('"','')
|
|
106
|
+ final.append(f'lea rdi, [msg{msg}]')
|
|
107
|
+ final.append(f'mov rax, {len(size)}')
|
|
108
|
+ final.append(f'mov rdx, rax')
|
|
109
|
+ final.append(f'mov rsi, rdi')
|
|
110
|
+ final.append(f'mov rdi, 1')
|
|
111
|
+ final.append(f'mov rax, 1')
|
|
112
|
+ final.append(f'syscall')
|
|
113
|
+ db.extend([f'msg{msg} db \'{size.strip()}\', 10,0'])
|
|
114
|
+ else:
|
|
115
|
+ print ()
|
|
116
|
+ i+=1
|
|
117
|
+ final.append('xor rdi,rdi')
|
|
118
|
+ final.append('mov rax, 60')
|
|
119
|
+ final.append('syscall')
|
|
120
|
+ if(msg>-1):
|
|
121
|
+ final.append('segment readable writable')
|
|
122
|
+ final.extend(db)
|
|
123
|
+ with open('final.fasm','w') as f:
|
|
124
|
+ f.write('\n'.join(final))
|