Forgor int

This commit is contained in:
Gvidas Juknevičius 2025-07-07 21:39:53 +03:00
parent e59f6a31ac
commit 7433808320
Signed by: MCorange
GPG Key ID: 5BE6B533CB76FE86
2 changed files with 30 additions and 16 deletions

7
a.s
View File

@ -7,11 +7,18 @@ _start:
mov rdi, 0
syscall
morph_f_main:
; -- PUSH_INT --
mov rax, 34
push rax
; -- PUSH_INT --
mov rax, 35
push rax
; -- OP_ADD --
pop rax
pop rbx
add rax, rbx
push rax
; -- PUSH_STR --
mov rax, morph_str_0
push rax
mov rax, 10

View File

@ -17,8 +17,12 @@ int write_op(ast_op_t* aop, FILE* f, comp_state_t state) {
token_t op = aop->op;
switch (op.type) {
case (TT_PUSH_INT): {
fprintf(f, " ; -- PUSH_INT --\n");
fprintf(f, " mov rax, %zu\n", op.int_v);
fprintf(f, " push rax\n");
}; break;
case (TT_PUSH_STR): {
fprintf(f, " ; -- PUSH_STR --\n");
fprintf(f, " mov rax, morph_str_%zu\n", dynarray_length(state.strings));
fprintf(f, " push rax\n");
fprintf(f, " mov rax, %zu\n", strlen(op.str_v));
@ -26,19 +30,23 @@ int write_op(ast_op_t* aop, FILE* f, comp_state_t state) {
dynarray_push(state.strings, op.str_v);
}; break;
case (TT_PUSH_CSTR): {
fprintf(f, " ; -- PUSH_CSTR --\n");
fprintf(f, " mov rax, morph_str_%zu\n", dynarray_length(state.strings));
fprintf(f, " push rax\n");
dynarray_push(state.strings, op.str_v);
}; break;
case (TT_PUSH_BOOL): {
fprintf(f, " ; -- PUSH_BOOL --\n");
fprintf(f, " mov rax, %d\n", (int)op.bool_v);
fprintf(f, " push rax\n");
}; break;
case (TT_PUSH_CHAR): {
fprintf(f, " ; -- PUSH_CHAR --\n");
fprintf(f, " mov rax, %d ; '%c'\n", (int)op.char_v, op.char_v);
fprintf(f, " push rax\n");
}; break;
case (TT_PUSH_FLOAT): {
fprintf(f, " ; -- PUSH_FLOAT --\n");
// TODO: do this
}; break;
case (TT_OP): {
@ -416,7 +424,6 @@ int compile_x86_64_linux_nasm(args_t* args, program_t* prog) {
fprintf(f, " ret\n");
}
fprintf(f, "section .bss\n");
for (int i = 0; i < dynarray_length(prog->memories); i++) {
memory_t mem = prog->memories[i];