From 3d96c422c732fde3c4ef1348fb96db49997d859e Mon Sep 17 00:00:00 2001 From: german Date: Thu, 12 Mar 2026 18:25:45 +0400 Subject: [PATCH] ASM example hello_user.asm --- BINCOM.md | 4 +- OPTIONS.md | 6 ++- dump.bin | Bin 128 -> 128 bytes hello_user.asm | 98 ++++++++++++++++++++++++++++++++++++++++++++++ hello_user.exe | Bin 0 -> 240 bytes ntfiles.h | 4 +- ntsys | Bin 40584 -> 40616 bytes ntsys-assembler.h | 6 ++- ntsys.h | 39 ++++++++++++------ 9 files changed, 140 insertions(+), 17 deletions(-) create mode 100644 hello_user.asm create mode 100644 hello_user.exe diff --git a/BINCOM.md b/BINCOM.md index ac92ad3..8a5a5df 100644 --- a/BINCOM.md +++ b/BINCOM.md @@ -98,4 +98,6 @@ > main: > ; Точка входа > ``` -- **GLOBAL** - Ассемблерная инструкция, означает метку для старта. \ No newline at end of file +- **GLOBAL** - Ассемблерная инструкция, означает метку для старта. +- **EXIT** - Ассемблерная инструкция, означает немедленное завершение программы. +- **RCALL** - Ассемблерная инструкция, означает вызов функции (```rcall тип имя```). \ No newline at end of file diff --git a/OPTIONS.md b/OPTIONS.md index b5d40dd..e5a0346 100644 --- a/OPTIONS.md +++ b/OPTIONS.md @@ -5,6 +5,7 @@ - ```--out / -o - set output file name``` - ```--debug / -d - display debugging info``` - ```--mem / -m - asm output memory size``` +- ```--nfull / -n - no print all debug info``` ## Опция HELP Может быть вызвана как ```--help``` или ```-h```. Эта опция выводит краткую справку. @@ -23,4 +24,7 @@ ## Опция MEM Может быть вызвана как ```--mem``` или ```-m```. Эта опция меняет размер памяти, выделяймой под программу при компиляции ассемблера. -Рекомендуется к использованию всегда. \ No newline at end of file +Рекомендуется к использованию всегда. +## Опция NFULL +Может быть вызвана как ```--nfull``` или ```-n```. +Эта опция выключаеть вывод аддресов и запрос выполнения в [режиме отладки](#опция-debug). \ No newline at end of file diff --git a/dump.bin b/dump.bin index 81c3067e933ee86442ae7acb16add023550d5c86..9618b3aac462cb83987323cdca3a64ab7be53315 100644 GIT binary patch literal 128 vcmZQ%C@d`GVxSecFzLdk3tKO2xv=A6(}k@H7dA0mn18W>k%5unG{j;63M>*h literal 128 jcmXqGpa%%a$ShU>qST7S+=84`h5R&y|NqSxG#MBGox2H1 diff --git a/hello_user.asm b/hello_user.asm new file mode 100644 index 0000000..2209f25 --- /dev/null +++ b/hello_user.asm @@ -0,0 +1,98 @@ +global db main ; Точка входа + +readmem: ; Функция чтения из памяти + push dw 0x00 ; Адрес + mread dw ; Читаем + ret ; Конец функции + +insub: ; Уменьшение адреса + push dw 1 ; На сколько уменьшать + push byte 2 ; Поменять два места + swap dw ; Тип данных - size_t + sub dw ; Уменьшить + ret ; Конец функции + +writemem: ; Функция записи в память + push dw 0x00 ; Адрес + mwrt dw ; Записываем + ret ; Конец функции + +decrement: ; Управление данными + rcall db readmem ; Прочитать + rcall db insub ; Уменьшить + rcall db writemem ; Записать + ret ; Конец функции + +main: ; Точка входа + push.string "Введите ваше имя: " ; Строка + push byte 0x00 ; Дескриптор + syscall ; Выводим + +begin: ; Настройка адресов + push dw 0x02 ; Указатель + push dw 0x00 ; Адрес + mwrt dw ; Записываем + +inloop: ; Цикл чтения символов + push byte 0x01 ; Дескриптор + syscall ; Читаем + copy byte ; Копируем char + + push dw 0x00 ; Адрес + mread dw ; Читаем + + mwrt byte ; Записываем + + push dw 0x00 ; Читаем + mread dw ; Указатель + + push dw 0x01 ; Увеличить + add dw ; На 1 + + push dw 0x00 ; Адрес + mwrt word ; Сохраняем указатель + + push byte 0x0A ; Символ переноса + push db inloop ; Цикл + push byte 2 ; Кол-во слов + swap word ; Меняем их местами + neq byte ; Если не \n - повторить цикл + +userhello: ; Приветствие + push.string "Привет, " ; Текст + push byte 0x00 ; Дескриптор + syscall ; Выводим + rcall db decrement ; Уменьшаем + push byte 0x00 ; Символ конца строки + +readcycle: ; Цикл чтения + push db writeusername ; Конец цикла + push dw 0x00 ; Адрес + mread dw ; Указатель + push dw 0x01 ; Число + eq dw ; Если равно - выйти + + push db rdecrem ; Адрес + + push dw 0x00 ; Иначе + mread dw ; Читаем указатель + mread byte ; Читаем байт по указателю + + push byte 0x0A ; Если символ переноса + eq byte ; Пропускаем добавление на стек + + push dw 0x00 ; Иначе + mread dw ; Читаем указатель + mread byte ; Читаем байт по указателю + +rdecrem: ; Уменьшение указателя + rcall db decrement ; Уменьшаем + push db readcycle ; Указатель на цикл + jmp ; Повторить цикл + +writeusername: ; Выводим имя + push byte 0x00 ; Дескриптор + syscall ; Выводим + push.string "!\n" ; Выводим ! + push byte 0x00 ; Дескриптор + syscall ; Выводим \ No newline at end of file diff --git a/hello_user.exe b/hello_user.exe new file mode 100644 index 0000000000000000000000000000000000000000..66b312390b74b4d5d0e28bdd956ad4e5e25e45d1 GIT binary patch literal 240 zcmXw!Jqp4=5QX17wF%lpNF)lo_JX~4@B%hoC8V+wyg+I@5d$ea#H_WK@CMH2rc=`b-0q(H?ft(%`K)B{K-ar=D3=W*fv4Zo|n?AMCm$sqO#+!JAOFUYAhwH%` z00n674gis2BRxMGc8r;Dd{4l0pSl!k9ZDlvLa25l%UQS;`<7MVHt8z;0htFUjsO4v literal 0 HcmV?d00001 diff --git a/ntfiles.h b/ntfiles.h index 70f1e46..5d65a08 100644 --- a/ntfiles.h +++ b/ntfiles.h @@ -583,6 +583,7 @@ static byte_t get_pop_sp_byte(void) { } static void nt_fs_syscall(void) { + /* printf("\nStack point %d 0x%X\n", __ntsys_stack_pointer, __ntsys_stack_pointer); */ switch (get_pop_sp_byte()) { case 0x00: { @@ -600,7 +601,7 @@ static void nt_fs_syscall(void) { case 0x02: { fGH6VSEzu7qNiGVE_stat = get_pop_sp_word(); - cnt = __ntsys_buffer_size - 1; + cnt = __ntsys_buffer_size; } break; case 0x03: @@ -623,6 +624,7 @@ static void nt_fs_syscall(void) { } break; } + /* printf("\nStack point %d 0x%X\n", __ntsys_stack_pointer, __ntsys_stack_pointer); */ } static void stack_swap(void) { diff --git a/ntsys b/ntsys index cc1a2a7bed60d641beb75a2f068babc6d6227bb0..c8509bade32bb158ad95dba3b7ba404208ade851 100755 GIT binary patch delta 9516 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 delta 9123 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 diff --git a/ntsys-assembler.h b/ntsys-assembler.h index e365a61..0e86690 100644 --- a/ntsys-assembler.h +++ b/ntsys-assembler.h @@ -12,7 +12,7 @@ * XX - шестнадцатиричные данные */ -const size_t ntsys_command_count = 0x23; +const size_t ntsys_command_count = 0x26; char* ntsys_asm_table[] = { "push=00:T:D", @@ -52,11 +52,15 @@ char* ntsys_asm_table[] = { "swap=1B:T", "dup=1C:T", + "copy=1C:T", "set=1D", "mov=1E", "global=00:T:D0D", + "exit=000200000001021A", + "rcall=00:T:D1F", + "call=1F", "ret=20", diff --git a/ntsys.h b/ntsys.h index 6577ea3..470f77e 100644 --- a/ntsys.h +++ b/ntsys.h @@ -85,10 +85,11 @@ static void __help(void) { " " "--asm / -a - compile assembler program" "\n" " " "--out / -o - set output file name" "\n" " " "--debug / -d - display debugging info" "\n" - " " "--mem / -m - asm output memory size" "\0" + " " "--mem / -m - asm output memory size" "\n" + " " "--nfull / -n - no print all debug info" "\0" ); } -static int __exe_run(__e_byte_t* memory, unsigned int memorysize, unsigned long filesize, FILE* fp, __e_byte_t debug) { +static int __exe_run(__e_byte_t* memory, __e_byte_t fulldebug, unsigned int memorysize, unsigned long filesize, FILE* fp, __e_byte_t debug) { __ntsys_stack_pointer = memorysize; __ntsys_stack = memory; __e_byte_t* buff = malloc(filesize - 8); @@ -105,12 +106,14 @@ static int __exe_run(__e_byte_t* memory, unsigned int memorysize, unsigned long putchar('\n'); while (__ntsys_buffer_ptr < __ntsys_buffer_size) { __e_byte_t cmd = buff[__ntsys_buffer_ptr]; - fprintf(stdout, "Command %d 0x%X\n" - "Position %d 0x%X\n" - "Stack point %d 0x%X\n\n" - , cmd, cmd, - __ntsys_buffer_ptr, __ntsys_buffer_ptr, - __ntsys_stack_pointer, __ntsys_stack_pointer); + if (fulldebug) { + fprintf(stdout, "Command %d 0x%X\n" + "Position %d 0x%X\n" + "Stack point %d 0x%X\n\n" + , cmd, cmd, + __ntsys_buffer_ptr, __ntsys_buffer_ptr, + __ntsys_stack_pointer, __ntsys_stack_pointer); + } __ntsys_buffer_ptr ++; fn_fGH6VSEzu7qNiGVE[cmd](); FILE* df = fopen("dump.bin", "wb"); @@ -120,16 +123,21 @@ static int __exe_run(__e_byte_t* memory, unsigned int memorysize, unsigned long } fwrite(__ntsys_stack, 1, memorysize, df); fclose(df); - puts("Press any key to continue..."); - getchar(); + if (fulldebug) { + puts("Press any key to continue..."); + getchar(); + } } } + if (debug) { + printf("\nStack point %d 0x%X\n", __ntsys_stack_pointer, __ntsys_stack_pointer); + } free(buff); if (fGH6VSEzu7qNiGVE_stat != EXIT_SUCCESS) return fGH6VSEzu7qNiGVE_stat; return EXIT_SUCCESS; } -int ntsys_api_call(char* filename, unsigned char debug) { +int ntsys_api_call(char* filename, unsigned char debug, unsigned char isFullDebug) { /* File data */ @@ -193,7 +201,7 @@ int ntsys_api_call(char* filename, unsigned char debug) { printf("File size %lu 0x%lX\n", filesize, filesize); printf("Memory size %u 0x%X\n", mem_size, mem_size); } - int stat = __exe_run(memory, mem_size, filesize, fp, debug); + int stat = __exe_run(memory, isFullDebug, mem_size, filesize, fp, debug); fclose(fp); free(memory); return stat; @@ -206,6 +214,7 @@ int _lib_ntsys_main(int argc, char** argv) { char mode = 'R'; unsigned char out = 0; unsigned char debug = 0; + unsigned char is_full_deb = 1; unsigned char mem = 0; while (t < argc) { char* str = argv[t]; @@ -216,6 +225,10 @@ int _lib_ntsys_main(int argc, char** argv) { case 'd': debug = 1; break; + case 'n': + debug = 1; + is_full_deb = 0; + break; case 'h': __help(); return EXIT_SUCCESS; @@ -254,7 +267,7 @@ int _lib_ntsys_main(int argc, char** argv) { ntsys_error("Please specify the file name!"); return EXIT_FAILURE; } - if (mode == 'R') return ntsys_api_call(filename, debug); + if (mode == 'R') return ntsys_api_call(filename, debug, is_full_deb); return ntsys_compile_asm(filename, asm_out); }