From 4d0aa57b43b4c5654858f01244733ec0666c6d49 Mon Sep 17 00:00:00 2001 From: german Date: Sun, 1 Mar 2026 20:08:55 +0400 Subject: [PATCH] Goto labels... Attemp #1 --- assembler.bash | 2 + example.asm | 6 ++- ntsys | Bin 27024 -> 27064 bytes ntsys-assembler.h | 109 ++++++++++++++++++++++++++++++---------------- out.exe | Bin 19 -> 21 bytes 5 files changed, 77 insertions(+), 40 deletions(-) create mode 100644 assembler.bash diff --git a/assembler.bash b/assembler.bash new file mode 100644 index 0000000..05a7907 --- /dev/null +++ b/assembler.bash @@ -0,0 +1,2 @@ +#!/bin/bash + diff --git a/example.asm b/example.asm index 6f40e40..c80d446 100644 --- a/example.asm +++ b/example.asm @@ -1,4 +1,6 @@ main: - push.string "Hello, world!\n" # Записываем строку + push.string "Hello, world!\n" ; Записываем строку push byte 0x00 - syscall \ No newline at end of file + syscall + push db main + jmp \ No newline at end of file diff --git a/ntsys b/ntsys index 803a5bc503e38fd0d0c3c652fa6348393ebf764a..b57339c7cffb0b2b0c2f015cdd19da8ac43e7b0f 100755 GIT binary patch delta 9196 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 gm~CF{(qHYt`YjpTqoPu?sbF)L= 0 && c <= 32) #define __SPACE_SHIFT while (is_space(st[pos])) { pos ++; } @@ -31,14 +33,14 @@ static char* get_str(char* ptr, FILE* fp) { ptr[len] = c; len ++; } + ptr[len] = '\0'; return ptr; } /* * XX - шестнадцатиричное число * :S - тип данных - * :D - сами данные - * :O - метка перехода + * :D - сами данные (или метка) * * ------------------ Формат ------------------- * @@ -82,7 +84,7 @@ int ntsys_asm_from_string(size_t* mem_pos, char* st, FILE* fp) { if (st[pos] == '"' && st[sP - 1] != '\\') { isStr = !isStr; } - if (st[pos] == '#' && isStr == 0) { + if ((st[pos] == '#' || st[pos] == ';') && isStr == 0) { st[pos] = '\0'; break; } @@ -120,9 +122,9 @@ int ntsys_asm_from_string(size_t* mem_pos, char* st, FILE* fp) { } } char* h = (st + save); - if (h[strlen(st + save)] == ':') { + if (h[strlen(st + save) - 1] == ':') { get_mem_pos(); - h[strlen(h - 1)] = '\0'; + h[strlen(st + save) - 1] = '\0'; labels_names[lb_pos] = h; labels[lb_pos++] = ((word_t)*mem_pos + 1); break; @@ -130,7 +132,6 @@ int ntsys_asm_from_string(size_t* mem_pos, char* st, FILE* fp) { if (strcmp((st + save), eq) == 0) { size_t d = strlen(__fun_names_ntsys[i] + par_pos); size_t p = 0; - puts(st + save); __e_byte_t data_type = 1; while (p < d) { char* str = &__fun_names_ntsys[i][par_pos]; @@ -181,34 +182,53 @@ int ntsys_asm_from_string(size_t* mem_pos, char* st, FILE* fp) { } f ++; } - } else if (st[save + 1] == 'x') { + } else if (st[save + 1] == 'x' && !is_space(st[save])) { sys_cnt = 16; - } else if (st[save + 1] == 'b') { + } else if (st[save + 1] == 'b' && !is_space(st[save])) { sys_cnt = 2; } if (is_str == 0) { - if (sys_cnt != 10) { - save += 2; - } - char* arr = NULL; - long cnt = strtol(&st[save], &arr, sys_cnt); - switch (data_type) { - case 0x01: fwrite((__e_byte_t*)((byte_t*)&cnt), 1, sizeof(byte_t), fp); - break; - case 0x02: fwrite((__e_byte_t*)((word_t*)&cnt), 1, sizeof(word_t), fp); - break; - case 0x04: fwrite((__e_byte_t*)((dword_t*)&cnt), 1, sizeof(dword_t), fp); - break; - case 0x08: fwrite((__e_byte_t*)((qword_t*)&cnt), 1, sizeof(qword_t), fp); - break; - case 0xF1: fwrite((__e_byte_t*)((sbyte_t*)&cnt), 1, sizeof(sbyte_t), fp); - break; - case 0xF2: fwrite((__e_byte_t*)((sword_t*)&cnt), 1, sizeof(sword_t), fp); - break; - case 0xF4: fwrite((__e_byte_t*)((sdword_t*)&cnt), 1, sizeof(sdword_t), fp); - break; - case 0xF8: fwrite((__e_byte_t*)((sqword_t*)&cnt), 1, sizeof(sqword_t), fp); - break; + char* eq__ = &st[save]; + if (data_type == 0xCB) { + unsigned int __f = 0; + __e_byte_t is_stdfdf = 0; + while (__f < lb_pos) { + printf("Name \"%s\" equals test to \"%s\"\n", labels_names[__f], eq__); + if (strcmp(&labels_names[__f][0], eq__) == 0) { + fwrite((__e_byte_t*)((word_t*)&labels[__f]), 1, sizeof(word_t), fp); + is_stdfdf = 1; + break; + } + __f ++; + } + if (is_stdfdf == 0) { + ntsys_error("Invalid ident!"); + return EXIT_FAILURE; + } + } else { + if (sys_cnt != 10) { + save += 2; + } + char* arr = NULL; + long cnt = strtol(&st[save], &arr, sys_cnt); + switch (data_type) { + case 0x01: fwrite((__e_byte_t*)((byte_t*)&cnt), 1, sizeof(byte_t), fp); + break; + case 0x02: fwrite((__e_byte_t*)((word_t*)&cnt), 1, sizeof(word_t), fp); + break; + case 0x04: fwrite((__e_byte_t*)((dword_t*)&cnt), 1, sizeof(dword_t), fp); + break; + case 0x08: fwrite((__e_byte_t*)((qword_t*)&cnt), 1, sizeof(qword_t), fp); + break; + case 0xF1: fwrite((__e_byte_t*)((sbyte_t*)&cnt), 1, sizeof(sbyte_t), fp); + break; + case 0xF2: fwrite((__e_byte_t*)((sword_t*)&cnt), 1, sizeof(sword_t), fp); + break; + case 0xF4: fwrite((__e_byte_t*)((sdword_t*)&cnt), 1, sizeof(sdword_t), fp); + break; + case 0xF8: fwrite((__e_byte_t*)((sqword_t*)&cnt), 1, sizeof(sqword_t), fp); + break; + } } } } @@ -232,16 +252,17 @@ int ntsys_asm_from_string(size_t* mem_pos, char* st, FILE* fp) { data_type = 0xF4; } else if (strcmp(&st[save], "sqword") == 0) { data_type = 0xF8; + } else if (strcmp(&st[save], "db") == 0) { + data_type = 0xCB; } else { ntsys_error("Incorrect datatype!"); return EXIT_FAILURE; } - fwrite((__e_byte_t*)&data_type, 1, sizeof(__e_byte_t), fp); - } - break; - case 'O': - { - + if (data_type != 0xCB) { + fputc(data_type, fp); + } else { + fputc(0x02, fp); + } } break; } @@ -259,7 +280,6 @@ int ntsys_asm_from_string(size_t* mem_pos, char* st, FILE* fp) { } } get_mem_pos(); - printf("Memory position: %zu\n", *mem_pos); return EXIT_SUCCESS; } @@ -287,9 +307,21 @@ int ntsys_compile_asm(char* filename, char* asm_out) { rewind(fp); labels = malloc(sizeof(word_t) * lb_size); labels_names = (char**)malloc(sizeof(char*) * lb_size); + unsigned int count = 0; + while (count < lb_size) { + labels_names[count] = (char*)malloc(sizeof(char) * NTSYS_MAX_LABEL_LENGTH); + count ++; + } while ((st = get_str(st, fp)) != NULL) { if (ntsys_asm_from_string(&mem_pos, st, fw) != EXIT_SUCCESS) return EXIT_FAILURE; } + count = 0; + while (count < lb_size) { + free(labels_names[count]); + count ++; + } + free(labels_names); + free(labels); free(st); fclose(fp); fclose(fw); @@ -297,12 +329,13 @@ int ntsys_compile_asm(char* filename, char* asm_out) { } #undef __READ_FILE_WITH_EOF_OR_LN -#undef __SPACE_SHIFTsize_t lb_size = 1; +#undef __SPACE_SHIFT #undef is_space #undef __NEXT_ARG #undef get_mem_pos #undef labels #undef labels_names #undef lb_pos +#undef NTSYS_MAX_LABEL_LENGTH #endif /* NTSYS_ASSEMBLER_H___ */ \ No newline at end of file diff --git a/out.exe b/out.exe index e89f83d4d145088b7fdd1e110a441ca751366ded..56ae7755181d40e5b8257aa884a0bb6764f259a4 100644 GIT binary patch literal 21 ccmZSbNX^N~*HI|XFUm<#p+YXp}7