From f92ba731b8466f03334f5a6c5228699471adb21a Mon Sep 17 00:00:00 2001 From: german Date: Mon, 9 Mar 2026 14:57:42 +0400 Subject: [PATCH] Fixed --- ASM.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ EXAMPLES.md | 22 ++++++++++++++++++++++ OPTIONS.md | 7 ++++++- README.md | 6 ++++-- asm-savers.h | 11 +++++++++-- dump.bin | Bin 32 -> 32 bytes example.asm | 2 +- example.exe | Bin 28 -> 28 bytes input.asm | 10 ++++++++++ input.exe | Bin 0 -> 28 bytes loop.asm | 3 +++ loop.exe | Bin 0 -> 13 bytes ntfiles.h | 8 ++++++++ ntsys | Bin 39912 -> 39960 bytes ntsys.h | 4 +++- 15 files changed, 110 insertions(+), 7 deletions(-) create mode 100644 ASM.md create mode 100644 EXAMPLES.md create mode 100644 input.asm create mode 100644 input.exe create mode 100644 loop.asm create mode 100644 loop.exe diff --git a/ASM.md b/ASM.md new file mode 100644 index 0000000..2f3bb4e --- /dev/null +++ b/ASM.md @@ -0,0 +1,44 @@ +# Assemly NTSYS +Это справочник по ассемблеру в **NTSYS**. Тут представлены основные комманды и описание синтаксиса. +## Операторы +Основной программной единицей является оператор. Это одно из зарезервированных слов. Названия операторов те же, что и в [BINCOM](https://gitlabor.ru/German/ntsys/src/branch/main/BINCOM.md), но в нижнем регистре (нижнее подчеркивание заменено точкой). Их синтаксис следующий: +```asm + оператор операнд1, операнд2, ... операндN +``` +Операнды нужны для передачи данных в операторы. +## Метки +Метки используются для относительного перехода в любое место программы. Они состоят из алфавитно-цифровых символов, а также нижнего подчеркивания и знака минус, двоеточия и переноса строки: +```asm +ИмяМетки: + ; ... код +``` +Для записи метки используется специальный тип данных - **db**: +```asm +main: + push db main + jmp +``` +## Комментарии +Комментарий нужен для создания пояснения к коду. Любой текст в комментарии игнорируется. +Пример: +```asm +; Это комментарий +; Это тоже +``` +## Типы данных +Основные типы данных: +- ```byte``` - 8bit без знака +- ```word``` - 16bit без знака +- ```dword``` - 32bit без знака +- ```qword``` - 64bit без знака +- ```sbyte``` - 8bit знаковый +- ```sword``` - 16bit знаковый +- ```sdword``` - 32bit знаковый +- ```sqword``` - 64bit знаковый +- Строки - [ASCIIZ-строка](https://ru.wikipedia.org/wiki/%D0%9D%D1%83%D0%BB%D1%8C-%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0?ysclid=mmhsfli7p5897685524) + +Строки заключаются в двойные кавычки: +``` + push.string "Строка" +``` +Поддерживаются следующие управляющие символы: ```\0, \a, \b, \t, \n, \v, \f, \r, \\, \"```. diff --git a/EXAMPLES.md b/EXAMPLES.md new file mode 100644 index 0000000..74239ff --- /dev/null +++ b/EXAMPLES.md @@ -0,0 +1,22 @@ +# Примеры на ассемблере NTSYS +Это небольшой набор примеров для ассемблера NTSYS. +## Hello, world! +```asm +main: ; Метка main + push.string "Hello, world!\n" ; Записываем строку + push byte, 0x00 ; Запись номера SYSCALL + syscall ; Системный вызов +``` +## Читаем имя пользователя +```asm +main: + push.string "Введите ваше имя: " ; Строка + push byte, 0x00 + syscall +getch: + push db getch + push byte, 0x01 + syscall + push byte, 0x0A + neq byte +``` \ No newline at end of file diff --git a/OPTIONS.md b/OPTIONS.md index 01f7bbd..b5d40dd 100644 --- a/OPTIONS.md +++ b/OPTIONS.md @@ -4,6 +4,7 @@ - ```--asm / -a - compile assembler program``` - ```--out / -o - set output file name``` - ```--debug / -d - display debugging info``` +- ```--mem / -m - asm output memory size``` ## Опция HELP Может быть вызвана как ```--help``` или ```-h```. Эта опция выводит краткую справку. @@ -18,4 +19,8 @@ Эта опция выводит скомпилированную ассемблерную программу в файл. ## Опция DEBUG Может быть вызвана как ```--debug``` или ```-d```. -Эта опция включает режим отладчика. В этом режиме комманды будут выполняться по запросу пользователя и создавать дамп памяти. \ No newline at end of file +Эта опция включает режим отладчика. В этом режиме комманды будут выполняться по запросу пользователя и создавать дамп памяти. +## Опция MEM +Может быть вызвана как ```--mem``` или ```-m```. +Эта опция меняет размер памяти, выделяймой под программу при компиляции ассемблера. +Рекомендуется к использованию всегда. \ No newline at end of file diff --git a/README.md b/README.md index e61bcf1..c83ee1c 100644 --- a/README.md +++ b/README.md @@ -5,5 +5,7 @@ > Это бета-версия. Документация ещё не готова. - [Инструкция по установке](https://gitlabor.ru/German/ntsys/src/branch/main/INSTALL.md) - [Справочник по опциям](https://gitlabor.ru/German/ntsys/src/branch/main/OPTIONS.md) -- [Бинарная структура](https://gitlabor.ru/German/ntsys/src/branch/main/BINARY.md) -- [Двоичные коды комманд](https://gitlabor.ru/German/ntsys/src/branch/main/BINCOM.md) \ No newline at end of file +- [Двоичные коды комманд](https://gitlabor.ru/German/ntsys/src/branch/main/BINCOM.md) +- [Ассемблер](https://gitlabor.ru/German/ntsys/src/branch/main/ASM.md) +- [Примеры](https://gitlabor.ru/German/ntsys/src/branch/main/EXAMPLES.md) +- [Бинарная структура](https://gitlabor.ru/German/ntsys/src/branch/main/BINARY.md) \ No newline at end of file diff --git a/asm-savers.h b/asm-savers.h index 64b8a0a..62e85ba 100644 --- a/asm-savers.h +++ b/asm-savers.h @@ -48,6 +48,7 @@ char* ntsys_get_str(char* ptr, FILE* fp) { while (i < strlen(ptr)) { if (ptr[i] == '"' && ptr[((i == 0) ? 1 : i) - 1] != '\\') {isStr = !isStr;} if ((ptr[i] == ';' || ptr[i] == '#') && isStr == 0) ptr[i] = '\0'; + if ((ptr[i] == ',') && isStr == 0) ptr[i] = ' '; i ++; } return ptr; @@ -73,8 +74,9 @@ static void __str_slice(char* str) { char* ntsys_get_arg(ntsys_asm_cache_t save) { char* str = save->cache; + printf("Cache : %s\n", save->cache); while (1) { - if (!is_space(str[0]) || str[0] == '\0') { + if ((!is_space(str[0])) || str[0] == '\0') { break; } str ++; @@ -89,9 +91,12 @@ char* ntsys_get_arg(ntsys_asm_cache_t save) { } n_p ++; } - save->cache = &str[n_p + 1]; + byte_t t = 1; + if (n_p + t > strlen(str)) t = 0; + save->cache = &str[n_p + t]; str[n_p] = '\0'; } + printf("Switch : %s\n", save->cache); if (str[strlen(str) - 1] == '\n' || str[strlen(str) - 1] == '\r') str[strlen(str) - 1] = '\0'; if (strlen(str) == 0) { str = NULL; @@ -133,6 +138,7 @@ char* ntsys_get_arg(ntsys_asm_cache_t save) { } } save->string = str; + printf("Loading : %s\n", str); return str; } @@ -396,6 +402,7 @@ int __ntsys_arg_function_loader(ntsys_argument_parser_t* parser) { if (select_argument(parser) == EXIT_FAILURE) return EXIT_FAILURE; } if (parser->is_rewrite == 0) *parser->file_size = ftell(parser->fp) + 1; + fflush(parser->fp); return EXIT_SUCCESS; } diff --git a/dump.bin b/dump.bin index 0d2b7c6fd767e5d3da7f111adaaa4ed76a31d6bc..cf6abf9dd3eb1197e7e33de59b54fef77997b5db 100644 GIT binary patch delta 7 OcmY#Tm>|c*zyJUQ^#Jhz delta 7 OcmY#Tm>|c*#Q*>W2>|;5 diff --git a/example.asm b/example.asm index cba1995..72a4c97 100644 --- a/example.asm +++ b/example.asm @@ -1,4 +1,4 @@ main: ; Метка main push.string "Hello, world!\n" ; Записываем строку - push byte 0x00 ; Запись номера SYSCALL + push byte 0x00 ; Запись номера SYSCALL syscall ; Системный вызов \ No newline at end of file diff --git a/example.exe b/example.exe index 65b9e18bdb75bd843faead1e3c7aa455ffa93f6f..0bf753d3a0e38d8ba50dcd1e7fbf3ffa54591478 100644 GIT binary patch literal 28 jcmeZ`l4W3EP+(y4NX^N~*HI|XFUm<#TL2B~Ff-X$$HQ&8(@i|wL2XWddi zkC)R$?9?gioRc1m?523vP8T)1TVh$whMlxb@w)%t`^}7U_W95A?Du}}@4bBQcYEiX zVNl;RZP;O2m6o)%o4~J9jR@mb_k20FDM{m+R)3k>ezRR;HrrVTv7cjmg2ozDNYr={ zq#b_h5{-|fXQMTI99t%)c4*bLZc_HD_)!OUm8Nu)vOk+9c8&C9@M%$+dK!z3dL-rK zqW;SM?%w+vKHOLTMW3B32EV%fb+$4pC*1}uBRoOaEYymL0%4i#!>GaHODrimSF|%n zbgFm?^;9-5I&F=V#?0-~*pBElR*&D2=rpmJ3&(-; z=@*ck=h&aPm93qVIf1R>*aT{fZH52ZcG1=(p`*~e4DsMHYeaaHooe@-^w@&x8FLzz z#7H80(wxa&F!%CYhJrrgLUsDASV544XmpOSlv%SdInhF*&Tn764l@!ZbkzBpj-+oA zvcc1345QKLsw@pZt51%BSLnF8R$wDyv&F6K(b&}Vcc*CDd9@lfwD+^kkbb61OCzKw z*-=PUU0M+#J;%iMsa-GY(#a9hsHs{@GugKGsh)WeQmZaq9D#S%@!ANyyN>%K@LU~V z6@d@b@eLZzK5ieIUaDjD5xOpRu6=5Hr7qnXAsx@U#-+wi)1^&pb6hGL7nhj6P)CkL z=r3c-;!@KCy0ke$x{hswbdxSU8zFs#or1JJOW>DznNBq#l(M9FjAXXPrbS4FJ2c!D zfhX#CP6Te#@w^B;Psa-*@FP9AfA(^GQhHOa)|N9;haHViO>fqv<07PInV688F63#p zGb5zU%$|_ys_mso7e`1}>3D4f-aJ6l_ebDo*=n@aq)RtMNRP1HXiLb~Y+s3xChGXs z2z*|SroSTs&tqLJsp*ruYtlmz(t1{DNj25?Vh>r$#ANnQsCLmbdD-gG7|O<7**BI{ zyG;Xlc~*BOfy-=z3%XSdFp(w5sjOIzPe^QoN~{FvY@oI_XbhVJ^jV;JZO~Zu9MBJd zmbO9T*oQ!`0wH>9yLJ_s^pAv zLC_>aBltTb_<{e!hf@2n72SFbj{UoCFdRx1ZPnCnMhGzxLMAqCB?luh5l}?pZ_+y(yf#D220E8((^e$LQU_nPH)K?mi{Sxv}^br*b4ZqNZV`jC$~&^ znJZXdW^=oz^;)hmE4V1$e#przO90OoELS~PqZ*qoAbmED;_KW3 zGTNbB<}vO8gBTBjpwIE9fOQ|c)U&f``8bx=tEPnQ~`VCN2%cH0Rtzi7pe^8be9<5HmI@pQ2B7J~z{9bLr)s}1nM~+(FkTXiL zj$dF`dgXg4BL$@8kYU%a0D=D)r?Q)`ibi!zmtAr(Fz(70C(-W>gMH$*6f%EV_261WHm+I+ZIPOfh$4 zg}S&`>3r=TidoL!ad>y5tN#Ilp2mnuLNls<=^X;zlo~)3=?#ydBDm*9LZxG%9XL0mC=gz5mFCWt6635Ar1>ZnsTw7={~RK5 z(nKPPGzp|!u`cGa&X0i%QI0$7F33LFM4grHBuOx#0Hn+x-OcH}F3P^&MM2ns9~NjS zO@ISZGi@3%VC}~?^(ikoJO)wRCcRBWk=_9bNN=FLO?nxnB5gs5U|t|{o5Vm6#dhKp zDadSnd-tCL2J8H8kWX6SqY{-s!eC-#oUoZ&qa-m`v%~Xquid zN=#2HNL4o}L`0E(1_?-~QFfC)L#aq#phPT3iFA|pfWYbZ#3|CdquFnLdpH?5xiP^9 z@=3E_A_~V#IZ2qyQMjIiN+4kpvDs5lBE-8v;B5hMpJcn)lzzR%QWor&KDr%2ani-R zxk4IoigXTK=w;mON^7r~W#4nSiMPCkS@;rod+9$Y{nCe|(-%6xccb24YT)=Ace6|V zdi7PnAk@b}K56w!L_-Piqj}t;*-ZzEu$Hol+^IS3z#uW)3WCINi6@5NDk*&HMG(wu z3KGNlO7>N5SJSpib}cs}!A}Blw{loXc&U>0%onndc1!&F+GzI0|7^YA( z2itMbjFPaknA?E#+ek7$j}pNlh_5($f}`JRC_>)H(E}VkG?M*zTQ~DFV9@<%S<-+U z^8$^T&Kv`lWn6G$vIEvAV2&|bin^j$n}K49{NQG%26VD~PCCjlo}&KdW^wsFEb{@~ z$WcL7nm;{803=8z_F8_q<-HNOu^y|sSb&|gZ3MfPUnb81RMlIWNCdfwjT-2vv=Sq~ zE^(?z7S2*y#ro|E2D{+$a0KQ(Wf_bFRo$N_CZw#>K=u42LQhXm{~gYn2Rcj*!&$e2 z%np;FgQf2WLEftprF+=D1wGAK;K5`we}Oys3m5$CN;nL%@!}=Kb!g>LcQr|DK?;XsN+-RK-9_xdFl=)Kd$gJc8TU^gXU)o6zs=fbI93QGrE}n6fiXW zG)U-4&EsoM*1M>SXFN&J8=`0cW{+vQ!%4S953;5Q#-fk}y``R-CfxNv4F*oqOok@z z!x&jRSU$4DwT5*4Q0rA%`o9kogx=B*C>80aVS+~peFYo~5Sq!rCg^BWhkHfD?rtL>|%i;^(D|o$~&d5sLMMOIxu$oy_Uu- zLD+@+G7hAn3qP^e+cP{hKVmH@C+)wu4(_}DCZ3YU{1gtml>IGn#?zK}zX%2O3~(H! zysef+XI%2%_Raqh6RG@{L{lJg)?vNAMY9}SDyq5M$v!;4$-X}msO)zg+)w^nEV^I+ z5W(r)@8P~zLmjsb?`6xP5PW|+|N8?&1i=-YkQE+c|Hb}Giw)CPd`ES3akrXzLwvu~ znC(se!6IaEAv(Q#MYr;kdgTX%QM7--?Q-K_u{g8lBgEuZnw|2Hy|slCs*gLoe~2v~ zIfK@J;oUJ#;!lHk^x;rH#yAYIpLTlpnPD^j0mlT#1NwopxKGW-9X9j=Emtda{L-FV z>A>l@7mnt_k-f=rk7KM$xrPik+UY%Gb_OPyxpSxTmHH^W%ZvQ9;f%4FtVoj zjZ2whb{vS#5?q0?W>wJURaH-u;g~2iZz^st`(~2&1lc#4HfUp%hi-vS6P790rGdJG z3ow`$)ot7^C93vz2+l$97Ofj+(IKZ?w%bv=q}}xivhPda2TTI=-O3;CV99x`FLeOmkbWnb;(%<4|Hmu-uF@*S3ae@FK7_>R?l9inrR_HY4%u=0`jf>?Wb zf;{A-mRxs~5t$^-EK6=q>~SDJ4=59%{CPFOT(Sz9!YiH=FMaI^q0I-w2lZtxV~ zVJzrpbiW=f$LVkfukApL)i{(oe-L{Bm;LLOP1p``G%H=c4~Iir;15770SN?90{{{T zxcVJ{6&lc{+)q8nbmi`W48_JZGAt3hwvJR5kkv%Y{8&A#DVPfK~_`i6?R}y zmTBrKc4kny*ooOo`&E2%ibD7=8Z0|dJ|Is}CjdY*ZrX6pq6t}vHP2Ct!Tc-6p0YQo z2ce|h{{v&P7EgEfPRY)}6v%b=ve!#{4SWst;&R#7MFbr!`;LLaAKo0CRPSv@gWgtg z;eF1)lB~41`F2shRl_Hl?6}o(3}RQH#w_n_RjZm=p(96}z@|8oJC2INHV-T{tDB&K zynGAB6}+J4vgM9$g+JpyN!uYAQp%=ZQ^T#{wuv&{RfQpBO5Twv{@xu4X={U#Fk zfS9knuHbOna1ulBOHAq@AXtr!SHj`ilCH%#&&a;_E+b(&1B=YNaFQ1eNO1(K>rQC% zxC`&M1l7;ErSODx6_hR&(M@bf#oN&k^1!??W_2)cZloE_RkR7Y55;sJ8rfy0uI;2U z)bl!>A+O^s`Z!{7dU!WUqIL5U+6zq~2^ZXGMr|g66N0xB$xZ!LLj~if+rCFC*-+Va z4wz%-Ia*Y2U(>ro*;l>%wayJC?#$QWIpL5O8oPeu7Qc~&0$#lvidCy>mx|b8xd^#- zsR?N#8#P*%e3hzmp%WTH)~(zcZ=AxR5yYS8{CVQ<0Dt55!AghPP0tjv1w+Sp{sMI; z($dTuX{koSooDf0b^KQ_x%oa_JD1RL1ZNSv_QAq>Hx19`&ShtIpq=T?Ks3*4PQ{n? z3IOE2o`{Se*8YM0jcovvmto>m_No>VAwk60Tu9B8U$K$HdYL}`jXgH3Q$h?PM#9E% zQC;~Zdtq4jf#n5cb&w2l)HlBjherg92jR}E#!-wedG2xKN|L6@w~Rs2GbKx%{3W|S z%u{p{@3xTP>K?=d;ilq5?tB+BQstEA;&tbNDtUGjg;@6pMhQ;b!M+a+#GJhH1#5IJ zxvQ6Moq5wb=Kr&v%B_D@-~ODQU8=KebpHx|!Ck5^5eWXd&)G6p*G}M&-I1VLYJR4S z)r$a1?yBu`w$oK`>t~vojd0|SG+k~}EuXW*;hCLC-qyii3E&P^ea1!&PcW{XF82q#q+G(y$X$Ds8)$T5-a+o%nP zT4*f9H~xm>xL02&qm|#G{2|$R&lGBlBmt{~PbHQJy4-I>ruZqV9C43n$Y*TJh-}ZO ze3DCdfv6qOvRnC??@G6FiZ22wn=9X9w8ji1OR~6Lhy-dmImJDV-aE(aanG>kJfUsY{Qu zDeiJlDlOh%etCzRBjiKd@6g_Fspp+{E0^5LWhiAO-#E?T2y2CNx72^gNl}Aw2`)Qg+MU1IQ+BWqOvGcOYP0LvlQ7 z;MGJ{6rKSBC3!$_FT}I`-Q~)uAxiVz=%b@jeGC3ZPTPlcVe?AEpoBl>VQk&X1w6Hn zMf~a_XkeexMBEEUrQ}-K?bIh!oyq(4lWL>TgC%8Ta{d@~qvS*C63GM7e^EuiEgn#c z_{saR)Z76?9EwNmSd+geK_i&|FXUuCwDu-0<`biyhV#%lOhQ6pj(!UJaK!xZ+%sCv&Z1dDMh&$8g1ks^)D#XVsX-w5zy zeMfUQP`(kCx)28ZDA;1v&+6#+)6i2p9i>|%#xkwVi60LiZ`0~>>~NqAMRV8MGXU&D z@d!peeFRTN2dY*vTSZ^1U2F1L%grWF9Br6d@swrFKyAeIV-{a$du``=02#&8%9ocnC{t!yIBK%g>8N>w5hknjr!^cd9BVrqSJ{d z8h)I*Ui7p_D7L4b4T!m4bZU(|BsC1@l>Qh2;V}(7t?b@&+)gy;TJLBYu^cnKLC9Z^fc(0 z_rl?d7~JJRR}#N79KH&A9yAfBv8-L;a29Av6GjSj45%A)E$C#>)1cL$zTM%lA2e%E zIQ%T=dC;w(1NMc(M`(wYqjDO+7|>SG^8Mkk4R_D#!{P7*P#@?#(6yjG&=)~BfNlq+ zyX-#DCeZ4Sux3GhpjScHf+pe^^CD;#=yuRT(0!n8(Bq(!qp`!cW6P}~0qBb)0Nnw4 z8uSCu^PtV3DacvpL8l`@=SgS~cjYCZS-2zb0FA~oj~U-wYzNH(-G^5V)u7d(aQHZA z3Jp3g5q}C07bl9h#>bdfv84~jbv}YI?@prf7%XOZ#1BbO$k~Cev6mj~=4rw#aS@4e zk*{j}b^zasSurlsS&3i8yW#LA9VDzCzZ1Z++hE&KZw2;q8|)D3$1&qL5b%p^PvD&$ zvLRMi8}KaZeSkUIV9^L!&ulYrxR0A6a3@ZGhf${?z11v|G&ndFG4|nuLrDBS5$}KjBC9TYo zSVq(3gc@zYK1k;Ypu$i~;?t%Pmb9m$$}F~E^bkwVO37i#Ti(uLDfGsaTS}u^;H9wK zlIO7GK&8y^H9U@*jK>~3i@VT2P$yqO6BJfPIV`s2%=2*9SSRGuu_r%gTOJ;kxdGgH z?7){u+i9s4P3tlHjyU=Q$9Bm4U$YLghqsHy26difQ)l1bZaS(PzGHi4FN|$Q_39hp zaBRcsia~O^@%^Lmy(5+hzb>=br5QV*>Mt-TRXlaIcmfg2BSIl7w>I>PHrMXG! z6Pg?|!!JJz!MYH)M7oet`Bli$pSVj@*{mlr#OImv#Dk{RC2X7N7H0Mw5s$E=p1V9- zr)a9ihnD+w-uSfgq|U24J*QLS^U0{Gnti-ZjSnP^4ag}h{uszFAxZ4 zu>EofL?AshYJ8zruQz~i@{TQgUaV)2KAD#WO3gxrTmkRB-jd_M(f{J4LR~20Q3YN;hW2Xp3%2q|?mKc~f1+{20=Wy4092 z1FzTd#5`1Ry{5PLD(bvNR_ViN=(A^7ZPTUAY?&|BW6Z4~eM^@bpK2QTP8~O<+Q6%I z+@>#quaPt8+J_&-per+ zH6Y{H1(f8qf^DwLMbbG69V1=oD#8d6hYNfzrZRDPEFVD3b-`5*D%b+6&$%65L zy@9XgwrQ|ky?m3no!M7pB<0P}q-I^IFPpL=!<6V|Pp;@^su;%py<(ziZ6)jAzn`sL zk&+aJ+)tmfr#-3ZN3+%b46zT4Qtfv_)&b$qE7fG5<2*#y{W?Bb-{4Lj9vvfKmHxQy z(X4wk0>MZ0N~*Ytbi{u%2kN`1&gzvkaTZ5^q*7{yy$wkvt3qBYLxrVoTq`rMR~&)3gn5@A1fwK$?iLE!Ax`9YOdMI7QxcmxdhI$8U!|uEu|N z=;=xLfxL+qd6~pEuS~V~!g40h&3e0r=Vsk=eK!q>)dd5|D*Y~4@pcDk@IQ3v1TLMc zOH1`xH4YSylT-|{B$OL@y@5I4?L+9($`SP5>75Wxvqx8^b`Fy_Q#__pZ$u{&)=&qU z-Sk^fBm2ULkWs%HO`SXAaRC)!ZuO+91(Oy$wqV+n*|QtQ2EC>ZVDMiS zrNi8=vcZ%3_v_y;zv1(zS4XoZlhiPC?PO7OvcrGLP0G>l+y-69V%Oy+J+H4xgAQe` zb-A&sj;d_gx`Nn3ee4R^?sWw>4g$u3z|UgWd&DNDtj}ew>l4|b^?6BWyJ~$j=vEfH zAvejG3WJ_!t_`{EjbjOR;*%SOn%wQ!`y2YTH}ib7)YQZbX<%G!$WO zEMSW_<}r0+BHMwV`LB65&N0S$CXKoN8Wvlb>zRUBA*fjvFy)y7v4HJiIbU^%p{X>8PS-ixS?iZ#4T}6G%-naFj1qU#u)qk_g0lM{k{4=>c8hd=bk!u zJ9WFb>vrhm?YjDe*!nb%U8M?e87nj2i}1uMl4s@Foc1eo6=7vA>A?50IHDC%LoP;< zc|be-U0z~a1W8M|huJ|MT;gXr(ZBDOCx=vPvWF#iRN(+zUHgYaLhND~xIU3TRoDmX8MrZ=x zgIGe1BmvUA&;*hTYys}TpA79;GCwqjKS<0%4so?h;7^g*P$R#G-3PLoO+o^{mdfNh z>Q2I61L_vGv+>_B_ENi05+54Rk0hJhF-h@i+TCOVbxd@IExIa`b{<-Hc3ZYyCT19RCwQ>!*K7@-?o>_>Xg^f7r9s+l_uxE13SkPzuKFN8 zid=4QOzfy?8-lb+BsS8Rn67F!1!>L10&S71Z3@zsk@?U%RBcO;b~M=-X^fbxYA=z= zkw$VRGA6NFWv&O=FD87HG0|n>*cHA+MFqHIVvaI8%eyIJLXfthufit>@tagWBZzNO z`P?ABMdb^F_)Y1|KRFZ?n>Z;)d6q56W*)gg<5#s~g0%G{CEA$SplW9ZX`4tzw9y`u zrFdQ#q)k?NR}k;YQ|vuKd_CEWXH8PI>w>iN$YngMLDjw=q}` z(Hj#>yDQqmL0T7?uQ%$FGs$cEGQI;j3ezr%CA;5sDgw>D$>a~c(M(gDc3oGU2_RB5 z5*V)53PYJE<3%GGCq_jlv|$C}1G@rjMjJMa>;n5K*upk!1o;{4Rj{@;Y$WLtV@+pr?30lNt7!ZvIy`A3W~F|JMAo;KQeauIbdpw7BBY)29uYa~&z zQPJK)` z)<~PXWXo6-ZPNEuQ8sT$BLw-CKLP=HS|AW;7G5V#Q+nT3)PXmDEkJB6?r4)*yavjZ zijBuIKa&j0sJ<>xRq1ZxC1Dyfi)x3ks>vl&rx{OBwKuvyfEn~+26;TVCsFhYW@^A6 zx4HN6r5^A_UsWIR3SpZ412k@bJ?%ZO@GHu`a$Yj{X^XvvUjSlbsE!w|lF8i+;yy-~ z90FLq(T7Q0w+!A(KI)d(sg7#uj#N!&F-&Fk^1={g6}j9k(fI_cnBO0u1j!7F(Te;h zQACi`fd5hn5`58d7NlnX06n+A-r}nWNCr9@Vq+9_9)hALDyH@HqbcAOet<0+|0BRx z{y;K(IhHeUp7>a=a1@l-7=4Ht7!Hv?bx-K=zl!i4Q$^`K(bcSE)$tx-HZ5)!rUE3P zhO~6=SXhZNoX=oJd9fHQcayHvli!OGBVsW^{ZaH7x>91h&=DXBoyU@{=?PEkAb6u= za7Vji0j#gDK1*f84FJYpZ>1e>lMa`9N}55zz1Zl`^VZBJPjn--*&h87KoZdX>D|Nr zhO#&RO|m83WS)XDbNLJka5(|M+zrL#UEnPl1=-wW3n>{%^}hV>BrGFI*X~)8k&zS@ z4bEE*778KxbJ3wsA(|Lt$C|ShDc%5BpvP(BCh|*(lDI~hi zDhULFN0>{RGUCnUw4S=c=*W4ZbT&)_TTyfMbu_1lsvCtKfC2nos}yY`LT0M7CuBBZ zndzZwSzC0Ie;X&*W*%r_Wgc5Dp#CfbjCF<&*bSXUKM+f+3jRZH=VP|>|F z#3OtFt=MQ4G0~e)^ayWKV!J>9lJGk2USX{h;Fd9-uc3hYNHI3|)o?s=CxHr;6yrX2zp`3fB`J`oqtGzR{cerFY1{ndLBAc_~Vp^z;biyY62Q$hSy`G%P>aL#!a)8gIGdEeK zZgnI)d!F;wNF?M);d=^_@B_drT*5t4IDxw)oWdO|`6z`*VK)Uy*aNUihBHjp&?Diqq+bfH2AV2p?99~JONMW>Mu#ifUPyz72hxb;g>yL1; z_U#9OK z$9+n@17H!>MY1VpN=79FESdiSV9ET(mdr2+n1Q3I9nC&o!-!#|Z*Gb%b{H9-n-ncq zK*8^oj!4nMFe2sl!V7sv?%=Q~;0uLmB*Hv6JeHN?D#%!~IqpokvS{LXDf$-59^nw# zV9rZjk8+{l#a;SLT-DUt+2XnvUhTnnIKkP9gn8sY=G2KpAz;mopw*v4*<&ciy|ziL zeI74(j72uYv64^(*iT)EbtWj_CJqeT!~?|DO|2UgWtgJ8{WMeFAusi=2!9(wWs&d> zIo7*(_*6weOCHaQNLPf6r^&#_bDYUYUd3K3Iez))hz@2oGNHqr@}qC$p}+4<@E6OJ}H>SxlBKP_w$C{CC{BKuhN zT~IcksJv5vl@seAG{>>13az6?O#tK@}7vb`WP zycRNqIwBW1;tC;%d!jP|>+k%AxY7rcL4}!4lTyjz`YlwfU4v{WF1O;2uyoLr*8VKk zeu7aF8x1Gyw5NodfHF^fjDG=W$XhAR3;zQ62Qf>bfl_EJLrGXqRoRNQkE*hS#S|pL zX~)jp-$7BmNV)a4J5NF}gI2kR(M4QX1eeg?c$6J1miPhy&F{QWO3hBf4D2|S^_8Te zq_oFP+q2A!RigM=r}&A0f%ydLWZ1hXuI}XjVq+0q1NfIJ9wY6JNuD zOBjH=Bn+}~PR@T0JSIp#P(6g6xO;>g-2M9${xOshUuS?Mbfk*EF-IXN@`6B#b&BP0 zgE;PXfk(Ij^w%<@A5dI>=SfMpNV$26-4SZn?ccb21jj)Dg8mvnr>1|cV)GHRX<#;g z#@(OK{H;aNeBw@lB={(qOpSL7OHdYfM=u~Z`;OLk#5asRcrRmb>F*rO21Im zMpUuYVZLsoqwK5U0N&krzParmAOv?f&67x$|QEl#U$KcMzXwa{$E{IR+BqxLm<7;Qt* z{uhg}sp`TNr&ePJa^CJk*(O>Kx(dftowm4d@vX;fK0^l+4Ke>FzTeWGu%IjCI6U3_ zGu<58Bzf$3%Q(w;>=N1URLf|~D9cF82)lHDxY z2yHA*et8(}$s;zOHIlbWR#SL$7}nZ1a>MtC&o?3jQ%P6czN)G?x@w--7=rEYi^Zv8 z?Gn~OolQyrXOsXe6D$*H5H{(I`H1;;z1Uce?JKt8?!9R9A=kass(9DE7J?CdR?Ne*$t7hzLsPC^1waqA79XI}pVR(Vh~QD3PTQ zQIt4FiB1X;KAkeVDHEYEVU+j>CGO(6T8}uSn|>orxjw@R1g5S;7U)PC=pq`%ZDc0I zMf+BsO+7TC2KyaA_B`2XaDPyk^Q>d!J`fzfN%(@$ztAE5X!FLPl;QAYx5)p7$}SCH zUqeb9(ziCcR1e9wXm#)Zgv;LVNLp!@VP`U14sQa~aO6+EBU4NJ@mhebQKJ z(v^KnE|gmN`y|EEtNb6|(hz>Z1IwDNdAXdN4FbPg9c(=ojWfkmzfGU$%O_ZDn%lK7 zQeLgz5vGOHY+3Q$GB9Xj-4kSkrAME4Q7*QMwH+}piieA}p8??yzpuZM3oheeI4{nIH=`a#=O_)+ToBv63oG*U@K7-{0o}rWtF{yx&M;|Lm?yzrj3^ew6zH zX;0X&b}pL(@+`>yZ&z94`3=Ni&D4$hhLl<}oEJb_c5ewlITy2y`L^t)y-F*~7r%yL zBvl|D&a#`{TfavNk((_eXhBZ>jG_iI&t7qs#4Sf0A9(xqrY1sOGcn_j`Z;7?^ z-##eab&9n=(1y7l{3_PH0JY7x$dt@RleJaeP3w(f3d1e}S{I38KvCQ<_pWdRZ^`B%eW&#$b)uc$E6{{{$o2vkV_t{NUo=t;!vs=+I&E*~X24cV-e zN74FhF5YGJ@v$c0A4~n+V)8924}n}y$_JTs9~2Sypb^e(FtZ`e%zT(;ss+4V7w(tG zo<}l$^c9(YpweFPBk_dTGRU=uvth%L~LL4A=WLX zJF56l#U|~SAHX?X_+iO*q*}{)GTzohS9g<0w$9OO5h)Tdc2@F=b7YIHd!G@7wALY7 zAwz!eTp%#SSNtS4O7ib0SK7t7r;z)oHbLw-0=LX~lU#m|=Skb!@SdDb8u4A=bTs-hmT`ujlgx7>spiNwa-X{9v_q>Z97*$wqs8`V?k< zP2PEi?(3^e$@CpmbC&s#|4K>7Z=WG62d8v~g!GI|(^~x#O+7s*L9?@*e1?26xZts` zlxoS8M^Z>o^~tjS3`ri6+L`LxI(UN;%t8HEWWo@m=3o@7Fqwt$jckX7zlyfeXE+Q!My^vEv%WC%kA(W+KPev0jN#Hv z7;mL@+*b>gSrLutz{U=9BIXQv!jZ~GHoKA3M4^C-k9uVIn}*;mHo^C$<0` z(q%U4LOwItkHHDahmHPAY(h_%Zyyq(pr99OM^GEQS~HZLUFhTZ*MMZW2760j#6f&c zzJj8yU;bqZ(yt3H(AVYa)A%tH-=!HG9hqi`HgB;>t~pKS54AdvCBW8~KO*i?4^`pW zpV0N*+Q1s`kbZMW_h8gMp3Zr;6dk^jqo^s{U~83bSfyVX4WkF}gigqT!sZP%Iizb= zDL;ii-Iu=^I<(_4Nb+t3;*gw}E|*zPDBW-)k6O@f*z-7yK08Id|F6|ZF%}5&#X__gVHNb25Gu7iOFn+e1Lhx0=TT%)JFFE|~ z9cGm-50EYmLmMp>^55WZ=+pzq56Ny}G>rKEv~L~KZT!!uAL5s1zyb@C4#a3UDyOcc zy*70~M6xWPogb zdPu}Lc);jL1|pO%(BTViAQRg<#Fph;<47fveGjp4W-k#@ht-=sEw2iug}@>=;{LHc)9 zd6kMw&TrLEUCWO})SFrZfn4>ksZE)3o*lIBUbb1&jxN2+RO}3M>YG4lECy0R?8KizIbzGkj&|YoW`yM61(_m z{xF%mIEi$u95}Q=i4r0ZmD;2e)S1$DdIBa!d$vYU$`Adz7TC=poNL#Bz zPAMlFq1CEt>5x8wYF*?wv|7X#3v}@y|Y1gY-ZM-zTLFG58DGsVB1``QKnvV$;P@IWSrx$(Q=h$HiXB{9p{Ix6Mk6^ZzJYqIp&AQ zq*bFOu;I8kPCF;9)m_c%CZO)hWgGa7#JoHy_RKUzOLH^5I+4lClXTn=vUGVbUFkrw zW%&eMZ8_=SdDalib>b41DrV{!aqVDkB8u>M3FUo&s1ryRjr+A$Ew;(eHB`JL(gE^SD}s7C30t$sFhS$ zMzul%w8`|)Ilq(4UttuELuQB2`Kx5(3M2n3wc;^Nj#rRetSJ9Hb#9nYWM;vT9Xs&QU_f_ zD|uy2PQ+oAJxn&QDTqi=J0XGGSX1!uRja*n=aHhdPJR>lcx_HZON!E{7II^40g>0n z;5bRqIy^<~O$|fIE9-LFYp;Av^eyWK>TU_--nw4xwdHebI_bT>PwdPYic1ZzkXP2{ z5P5wrIkP^7WV{hW?yk>m|8OnVklt_fdALc?HVZN2l{W(XCGyIf1rajMm$*#i<2MWV KD01V?^#21US25cF diff --git a/ntsys.h b/ntsys.h index 1a66880..6577ea3 100644 --- a/ntsys.h +++ b/ntsys.h @@ -84,7 +84,8 @@ static void __help(void) { " " "--version / -v - show version" "\n" " " "--asm / -a - compile assembler program" "\n" " " "--out / -o - set output file name" "\n" - " " "--debug / -d - display debugging info" "\0" + " " "--debug / -d - display debugging info" "\n" + " " "--mem / -m - asm output memory size" "\0" ); } static int __exe_run(__e_byte_t* memory, unsigned int memorysize, unsigned long filesize, FILE* fp, __e_byte_t debug) { @@ -230,6 +231,7 @@ int _lib_ntsys_main(int argc, char** argv) { break; case 'm': mem = 1; + mode = 'A'; break; default: ntsys_error("Unknown option!");