From 5e09e6208da4da2cea544d985ba0de11330cbca2 Mon Sep 17 00:00:00 2001 From: Bostangiu Luca <lucabostangiu@gmail.com> Date: Wed, 26 Mar 2025 22:03:56 +0200 Subject: [PATCH 1/4] DONE Signed-off-by: Bostangiu Luca <lucabostangiu@gmail.com> --- 27 | 0 Tema_1_BOSTANGIU_LUCA_311CB.zip | Bin 0 -> 1530 bytes check | 1 + data.json | 120 ++++++++-------- src/main.c | 233 +++++++++++++++++++++++++++++++- 5 files changed, 291 insertions(+), 63 deletions(-) create mode 100644 27 create mode 100644 Tema_1_BOSTANGIU_LUCA_311CB.zip create mode 120000 check diff --git a/27 b/27 new file mode 100644 index 0000000..e69de29 diff --git a/Tema_1_BOSTANGIU_LUCA_311CB.zip b/Tema_1_BOSTANGIU_LUCA_311CB.zip new file mode 100644 index 0000000000000000000000000000000000000000..43b547123ada93d49a05d0df4d56414ead524cf0 GIT binary patch literal 1530 zcmWIWW@Zs#U|`^2VAxO<mC)~ztii&-Fi(tufsH|iAvZBIPcJz%gp+}Jf6S9~5H79Y zW?*D_!OXw_Ce}v0&bw?N^6%`tL)uB6`WI3-R5F4&C8jUjq<CSO=LX-*S6du2g_i27 zINYE6I3`#99INWARp%`4Ti)M!>z(sy!#9707QZapzU7Yk>zfyyt4?kc`!g%wQhQU` zm&;qHWjy{jrFZMQ#f}C}AE$5V|0knZp(A`!AwSu@&D7Uf%gVCxyYb7`EBz`b9ycDE ztNGn7Hct7^2?o<ApLbuDcC~W6t1{{6H?i;rxm;roM;W2IU7O!@++W?j`P-kO2@UgK zm%F_G<Xv4R>E@vKqUY|}{}*<ze7s!W+WXzj|0>_tsO`M{cad^k{Q9`<&!;!D{4uNE zJt_W!?@rg_Qj<yo_rKCv+~Rxs*#23;R;zByx(LTRoeHx(Z&6}()VTNH&7Y;NJWnR9 zVB=SD^$O2?nqPbWt7E3qGl7eG6IXMD<sQ%|-QuMXC$ud{%%+Dsu_aS#dxXX64_kLM zZ8G{}us(D0)`~Mvyt2|7H-5BwwbgvS-S+oeWmFz~SALxSnmgz7zgm`>rk?x39_-;t z`uDgduJ(HHTS>1mRJumrEF+xhc~Z>QqdPAwdYu@5KT@-1qq*;!<v+H_u_+o)=UK5m zqCjP?NA0eIOiL8Qm^`JnJP?@sY_HHXj=3M4o;(ojaVj&IBJkt3VB`Kh0&nj6zPVqT z^1n}<OG-$h%q1b>#DPtbY;xr;4-EBPw*6OQVUrb<_~4XMpYN1#N3annXm(wVWtptt z3^ynLl_G0qyCz%{Y>b@f;3>YLEvbO-=hkfrGJH)hZZtY18pv?nvwLt~%u=*+vbMCV zru5S1?^m_0;0g|z8=xI`F(lq=$|+|4Z;>js;Y%tM1H7A5-Oq$v%;|HQw~0fT^~3bN z?=x4p|8(<Xa4-%rKCiJ?$M3b_OEv2pe(Te}Gs<614dY&%;3X39Bh>mwPxI}q1^Z5D zlthT#lAK>+XR+~a)%Ks?RvFvmrc{Jx%?MG-`H`_Wy6?=i_%-rxa!YQP@kWMDIe6_? zZ>;gEn{`!^3|rP|DsNGcZ(A0?y83-Hr&RyM?as?y%ct&bNhxkEzkP-^z}D%>b%Evn z??lAIKU>CXFM8CTRKDQPL8n7kkN*;KdiWrI+tY*};=lCl&8M|a*LdLn+w_^lO{eQe z1J`cQ^i_y05V3ovEuti{m1D=`IU8cy_xg$KuD{g5U%AOS+9-3?4WlhO#;L69C8rwf z;W~9<ady_jq!6*+&N3XamqQE~el4`Alzv%gvii>SpJ(;AFE{z7rnNs#@#)H$Z~eZP zf8X}HO0~?WzWw}8^X@V^eTjZ$ucbLBSXI+QRIaF4bc-GI)Sl4$&hEa!e%sx;=@a5( zroK4EpfFE6evk9lEsN@Y$Na3?@VKjcci=A}@sO`!&A9<nqC%f0xb40p<&$@L<#FM& z^~Zu(KPr`npPGN_%Jkpa8)lxj_mwYBK5%^Z-uDU<?Ef$az{{C~n=7OAzx-XY09fig z0+&2848DokscD%xso;{vQ|NKJq|#&bk|wv;ko%B<K<o2+>vt%&hIuT>UXZ{U#U6OE zX$Obmu^<m=PwO9__ilUjr0Ba`O~1e9nT=*_SJJ|#q-*_IG<R`!yz_;}{0G^en0~6; z@m%fn0xiF%yOgFhtgAOW$Hq{2NA6pA=i?g|tF0Njgd&X|YaY<|$|=3f$uH<V#jA7X zTg{?=C!L#IH+dDr;*xaE$e-zX!ah4kXwe0wdY{kh*~On!0DZ{FB*%=aER_KIl!1W} zh_^I?Sg?|n6;iUIm8!^QVTKp7SsB368WDOx(?FqzVHztN$WA68oCT!4SV24hMfr|1 literal 0 HcmV?d00001 diff --git a/check b/check new file mode 120000 index 0000000..94d2b33 --- /dev/null +++ b/check @@ -0,0 +1 @@ +/home/student/.cargo/bin/hw_checker \ No newline at end of file diff --git a/data.json b/data.json index 953360b..fee42de 100644 --- a/data.json +++ b/data.json @@ -4,9 +4,9 @@ { "id": 0, "name": "MOV 1", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "MOV edx, 77\nMOV ebx, 23\nMOV eax, 96\nMOV eax, 23\nMOV ecx, 58\n", + "time_normal": 0.001482108, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -14,9 +14,9 @@ { "id": 1, "name": "MOV 2", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "MOV eax, ecx\nMOV edx, edx\nMOV edx, 59\nMOV ebx, ebx\nMOV ecx, ebx\nMOV eax, ecx\nMOV ebx, 76\nMOV ebx, 89\n", + "time_normal": 0.001472431, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -24,9 +24,9 @@ { "id": 2, "name": "LOGICAL 1", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "AND edx, 42\nXOR ebx, 41\nXOR eax, 39\n", + "time_normal": 0.001114721, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -34,9 +34,9 @@ { "id": 3, "name": "LOGICAL 2", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "AND ecx, 73\nAND edx, 45\nAND eax, 6\nAND edx, eax\nOR eax, 19\nXOR ebx, eax\nAND eax, 44\nXOR edx, 89\nAND edx, 20\nAND eax, 41\n", + "time_normal": 0.001076748, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -44,9 +44,9 @@ { "id": 4, "name": "ADD 1", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "ADD eax, edx\nADD ecx, 26\nADD ebx, ebx\nADD ebx, 63\n", + "time_normal": 0.001384523, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -54,9 +54,9 @@ { "id": 5, "name": "ADD 2", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "ADD ecx, 65\nADD ebx, edx\nADD ebx, 20\nADD edx, eax\nADD ebx, edx\nADD edx, 23\nADD ecx, ebx\nADD ecx, 52\nADD eax, 83\n", + "time_normal": 0.001169521, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -64,9 +64,9 @@ { "id": 6, "name": "SUB 1", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "SUB eax, eax\nSUB edx, ebx\nSUB ecx, ebx\nSUB eax, 55\nSUB ebx, 16\n", + "time_normal": 0.001821397, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -74,9 +74,9 @@ { "id": 7, "name": "SUB 2", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "SUB ebx, 55\nSUB ebx, 22\nSUB ebx, 70\nSUB ebx, 90\nSUB ebx, 50\nSUB edx, 82\nSUB eax, 67\nSUB edx, 83\nSUB ebx, 28\nSUB ebx, ebx\n", + "time_normal": 0.003060244, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -84,9 +84,9 @@ { "id": 8, "name": "MUL 1", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "MOV eax, edx\nMUL 8\nMOV edx, eax\nMOV eax, ecx\nMUL ecx\nMOV ecx, eax\nMOV eax, ecx\nMUL ebx\nMOV ecx, eax\n", + "time_normal": 0.001816372, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -94,9 +94,9 @@ { "id": 9, "name": "MUL 2", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "MOV eax, ebx\nMUL 4\nMOV ebx, eax\nMOV eax, edx\nMUL 7\nMOV edx, eax\nMOV eax, ecx\nMUL 8\nMOV ecx, eax\nMOV eax, ecx\nMUL edx\nMOV ecx, eax\nMOV eax, ebx\nMUL 0\nMOV ebx, eax\nMOV eax, ebx\nMUL 1\nMOV ebx, eax\nMOV eax, ebx\nMUL ecx\nMOV ebx, eax\nMOV eax, edx\nMUL ebx\nMOV edx, eax\nMOV eax, ebx\nMUL edx\nMOV ebx, eax\n", + "time_normal": 0.001093188, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -104,9 +104,9 @@ { "id": 10, "name": "DIV 1", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "MOV eax, ebx\nDIV 8\nMOV ebx, eax\nMOV eax, ebx\nDIV 4\nMOV ebx, eax\nError\nMOV eax, ecx\nDIV 5\nMOV ecx, eax\nMOV eax, ecx\nDIV ecx\nMOV ecx, eax\n", + "time_normal": 0.001193349, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -114,9 +114,9 @@ { "id": 11, "name": "DIV 2", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "MOV eax, ecx\nDIV 2\nMOV ecx, eax\nMOV eax, ecx\nDIV 9\nMOV ecx, eax\nMOV eax, ebx\nDIV 8\nMOV ebx, eax\nMOV eax, ebx\nDIV 6\nMOV ebx, eax\nMOV eax, ecx\nDIV ebx\nMOV ecx, eax\nMOV eax, ecx\nDIV ecx\nMOV ecx, eax\nMOV eax, ebx\nDIV ebx\nMOV ebx, eax\nMOV eax, ebx\nDIV 5\nMOV ebx, eax\nMOV eax, ebx\nDIV 2\nMOV ebx, eax\nMOV eax, ecx\nDIV ebx\nMOV ecx, eax\n", + "time_normal": 0.000953961, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -124,9 +124,9 @@ { "id": 12, "name": "SHIFT 1", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "SHR edx, 20\nSHR eax, 24\nSHR ebx, 4\nSHR ebx, 7\nSHL edx, 2\n", + "time_normal": 0.00148504, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -134,9 +134,9 @@ { "id": 13, "name": "SHIFT 2", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "SHR ecx, 17\nSHR eax, 2\nSHR ecx, 16\nSHR edx, 11\nSHR edx, 10\nSHL eax, 0\nSHL ebx, 29\nSHL edx, 8\nSHL ecx, 29\n", + "time_normal": 0.001023214, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -144,9 +144,9 @@ { "id": 14, "name": "IF 1", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "CMP edx, 8\nJL end_label\nMOV eax, ebx\nMUL edx\nMOV ebx, eax\nend_label:\nCMP edx, 14\nJNE end_label\nOR ebx, ebx\nMOV eax, edx\nMUL ebx\nMOV edx, eax\nSHL edx, 1\nSUB eax, eax\nend_label:\nCMP edx, 67\nJG end_label\nError\nend_label:\nCMP eax, 96\nJG end_label\nSUB edx, ecx\nend_label:\nCMP edx, 82\nJNE end_label\nSUB eax, 10\nSUB ebx, 72\nend_label:\n", + "time_normal": 0.001458978, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -154,9 +154,9 @@ { "id": 15, "name": "IF 2", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "CMP edx, 95\nJG end_label\nSUB ebx, 72\nMOV eax, edx\nMUL edx\nMOV edx, eax\nADD ebx, ecx\nXOR ebx, 65\nADD eax, ebx\nend_label:\nCMP edx, 87\nJL end_label\nSHL edx, 26\nMOV eax, ebx\nMUL 10\nMOV ebx, eax\nADD edx, edx\nMOV ecx, edx\nMOV eax, ebx\nMUL ecx\nMOV ebx, eax\nend_label:\nCMP eax, 82\nJNE end_label\nADD eax, 37\nSUB ecx, ebx\nMOV eax, ecx\nXOR edx, 51\nSUB ebx, 50\nend_label:\nCMP ebx, 14\nJGE end_label\nADD edx, 13\nSHR ebx, 27\nADD eax, 57\nSUB eax, 65\nend_label:\nCMP eax, 33\nJNE end_label\nADD edx, 61\nADD eax, 86\nMOV eax, ebx\nDIV 10\nMOV ebx, eax\nend_label:\nCMP ebx, 46\nJL end_label\nError\nSHR edx, 29\nSUB ecx, 2\nSHL eax, 6\nend_label:\nCMP edx, 99\nJLE end_label\nMOV eax, 40\nMOV eax, ecx\nMUL 4\nMOV ecx, eax\nSUB eax, 82\nSHR ebx, 27\nAND eax, 87\nend_label:\nCMP eax, 75\nJNE end_label\nSHR edx, 10\nend_label:\nCMP ecx, 97\nJNE end_label\nMOV eax, edx\nMUL 2\nMOV edx, eax\nend_label:\nCMP edx, 50\nJLE end_label\nSUB eax, 24\nend_label:\n", + "time_normal": 0.001316034, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -164,9 +164,9 @@ { "id": 16, "name": "WHILE 1", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "start_loop:\nCMP ebx, 9\nJNE end_label\nSUB ecx, ebx\nJMP start_loop\nend_label:\nstart_loop:\nCMP ecx, 23\nJGE end_label\nOR ecx, 11\nAND edx, edx\nXOR ecx, 43\nJMP start_loop\nend_label:\nstart_loop:\nCMP edx, 50\nJNE end_label\nXOR edx, 69\nMOV ebx, ecx\nJMP start_loop\nend_label:\nstart_loop:\nCMP eax, 53\nJLE end_label\nMOV eax, ecx\nDIV 3\nMOV ecx, eax\nMOV ebx, edx\nSHR ecx, 20\nADD edx, edx\nMOV eax, 49\nJMP start_loop\nend_label:\n", + "time_normal": 0.001396569, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -174,9 +174,9 @@ { "id": 17, "name": "WHILE 2", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "start_loop:\nCMP edx, 85\nJNE end_label\nMOV eax, ecx\nMUL 7\nMOV ecx, eax\nMUL 9\nSHR ebx, 27\nSUB edx, 5\nJMP start_loop\nend_label:\nstart_loop:\nCMP eax, 64\nJL end_label\nADD ebx, eax\nMOV eax, ecx\nDIV ecx\nMOV ecx, eax\nSHR ebx, 23\nADD eax, edx\nMOV edx, edx\nJMP start_loop\nend_label:\nstart_loop:\nCMP edx, 47\nJLE end_label\nAND ebx, 57\nJMP start_loop\nend_label:\nstart_loop:\nCMP ebx, 15\nJG end_label\nMOV eax, ecx\nDIV 8\nMOV ecx, eax\nMOV edx, 77\nOR ebx, edx\nADD edx, 4\nJMP start_loop\nend_label:\nstart_loop:\nCMP ecx, 29\nJNE end_label\nMOV eax, eax\nADD eax, 32\nMOV ebx, 30\nMOV eax, ebx\nDIV 7\nMOV ebx, eax\nSUB edx, 59\nJMP start_loop\nend_label:\nstart_loop:\nCMP ebx, 47\nJNE end_label\nSHR eax, 28\nMOV eax, ecx\nDIV 9\nMOV ecx, eax\nADD ebx, 34\nMOV eax, ebx\nMUL eax\nMOV ebx, eax\nJMP start_loop\nend_label:\nstart_loop:\nCMP ebx, 25\nJNE end_label\nADD ecx, 52\nMOV eax, ebx\nDIV 7\nMOV ebx, eax\nJMP start_loop\nend_label:\nstart_loop:\nCMP eax, 18\nJG end_label\nMOV ecx, ebx\nSUB eax, ebx\nJMP start_loop\nend_label:\nstart_loop:\nCMP ecx, 70\nJG end_label\nMOV eax, 22\nMOV eax, ecx\nDIV 5\nMOV ecx, eax\nMOV eax, ecx\nDIV ecx\nMOV ecx, eax\nSHR ebx, 23\nMOV eax, ebx\nMUL 0\nMOV ebx, eax\nJMP start_loop\nend_label:\n", + "time_normal": 0.00137417, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -184,9 +184,9 @@ { "id": 18, "name": "FOR 1", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "MOV edx, 0\nstart_loop:\nCMP edx, 65\nJGE end_label\nSHL ecx, 13\nADD edx, 1\nJMP start_loop\nend_loop:\nMOV eax, 0\nstart_loop:\nCMP eax, 70\nJG end_label\nSUB edx, 23\nMOV eax, ecx\nDIV 5\nMOV ecx, eax\nMOV ebx, ebx\nOR ecx, 80\nMOV ecx, eax\nADD eax, 1\nJMP start_loop\nend_loop:\nMOV edx, 0\nstart_loop:\nCMP edx, 14\nJGE end_label\nSHR edx, 5\nSUB edx, eax\nADD edx, 1\nJMP start_loop\nend_loop:\nMOV ecx, 0\nstart_loop:\nCMP ecx, 23\nJG end_label\nMOV eax, ecx\nDIV 5\nMOV ecx, eax\nAND edx, 93\nADD ecx, 1\nJMP start_loop\nend_loop:\n", + "time_normal": 0.001280204, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 @@ -194,9 +194,9 @@ { "id": 19, "name": "FOR 2", - "status": "0", - "log": "", - "time_normal": 0.0, + "status": "5", + "log": "MOV edx, 0\nstart_loop:\nCMP edx, 54\nJG end_label\nXOR eax, 24\nSHR edx, 10\nMOV eax, ebx\nMUL 6\nMOV ebx, eax\nADD edx, 1\nJMP start_loop\nend_loop:\nMOV ebx, 0\nstart_loop:\nCMP ebx, 75\nJGE end_label\nADD ecx, 11\nXOR ebx, 80\nSUB edx, ecx\nMOV edx, 69\nADD ebx, 1\nJMP start_loop\nend_loop:\nMOV ebx, 0\nstart_loop:\nCMP ebx, 86\nJG end_label\nMUL 2\nADD ebx, 1\nJMP start_loop\nend_loop:\nMOV eax, 0\nstart_loop:\nCMP eax, 66\nJGE end_label\nADD ebx, 28\nMOV eax, 92\nSHR ebx, 21\nADD eax, 1\nJMP start_loop\nend_loop:\nMOV edx, 0\nstart_loop:\nCMP edx, 79\nJGE end_label\nMOV eax, ebx\nMUL ebx\nMOV ebx, eax\nSUB eax, 25\nXOR ecx, eax\nMOV eax, edx\nMUL 5\nMOV edx, eax\nSHL ecx, 11\nADD edx, 1\nJMP start_loop\nend_loop:\nMOV edx, 0\nstart_loop:\nCMP edx, 47\nJGE end_label\nMOV eax, ecx\nMUL 10\nMOV ecx, eax\nADD edx, 1\nJMP start_loop\nend_loop:\nMOV ecx, 0\nstart_loop:\nCMP ecx, 29\nJGE end_label\nOR edx, eax\nADD ebx, 93\nSHL edx, 30\nMOV ecx, 9\nADD ecx, 1\nJMP start_loop\nend_loop:\nMOV ecx, 0\nstart_loop:\nCMP ecx, 94\nJGE end_label\nMOV eax, ecx\nDIV 7\nMOV ecx, eax\nADD ecx, 59\nMOV eax, ecx\nDIV ecx\nMOV ecx, eax\nMOV eax, edx\nMUL 8\nMOV edx, eax\nADD ecx, 1\nJMP start_loop\nend_loop:\n", + "time_normal": 0.002067097, "time_valgrind": 0.0, "timeout": 30000, "test_score": 5 diff --git a/src/main.c b/src/main.c index 27729cd..68bf0be 100644 --- a/src/main.c +++ b/src/main.c @@ -2,9 +2,236 @@ #include <stdlib.h> #include <string.h> -/** - * Starting point of the program, write anything here - */ +void mov(char *x, char *y) { + if (strlen(y) == 1 && *y>'9') + printf("MOV e%cx, e%cx\n", *x, *y); + else + printf("MOV e%cx, %s\n", *x, y); +} + +void and(char *x, char *y) { + if (strlen(y) == 1 && *y>'9') + printf("AND e%cx, e%cx\n", *x, *y); + else + printf("AND e%cx, %s\n", *x, y); +} + +void or(char *x, char *y) { + if (strlen(y) == 1 && *y>'9') + printf("OR e%cx, e%cx\n", *x, *y); + else + printf("OR e%cx, %s\n", *x, y); +} + +void xor(char *x, char *y) { + if (strlen(y) == 1 && *y>'9') + printf("XOR e%cx, e%cx\n", *x, *y); + else + printf("XOR e%cx, %s\n", *x, y); +} + +void add(char *x, char *y) { + if (strlen(y) == 1 && *y>'9') + printf("ADD e%cx, e%cx\n", *x, *y); + else + printf("ADD e%cx, %s\n", *x, y); +} + +void sub(char *x, char *y) { + if (strlen(y) == 1 && *y>'9') + printf("SUB e%cx, e%cx\n", *x, *y); + else + printf("SUB e%cx, %s\n", *x, y); +} + +void mul(char *x, char *y) { + if (x[0] != 'a') + printf("MOV eax, e%cx\n", *x); + if (strlen(y) == 1 && *y>'9') + printf("MUL e%cx\n", *y); + else + printf("MUL %s\n", y); + if (x[0] != 'a') + printf("MOV e%cx, eax\n", *x); +} + +void DIV(char *x, char *y) { + if(y[0] == '0') { + printf("Error\n"); + } else { + printf("MOV eax, e%cx\n", *x); + if (strlen(y) == 1 && *y>'9') { + printf("DIV e%cx\n", *y); + } else { + printf("DIV %s\n", y); + } + printf("MOV e%cx, eax\n", *x); + } +} + +void shl(char *x, char *y) { + printf("SHL e%cx, %s\n", *x, y); +} + +void shr(char *x, char *y) { + printf("SHR e%cx, %s\n", *x, y); +} + +void cmp(char *x, char *y) { + if (strlen(y) == 1 && *y>'9') + printf("CMP e%cx, e%cx\n", *x, *y); + else + printf("CMP e%cx, %s\n", *x, y); +} + +void jmp(char *label) { + printf("JMP %s\n", label); +} + +void jne(char *label) { + printf("JNE %s\n", label); +} + +void jg(char *label) { + printf("JG %s\n", label); +} +void jge(char *label) { + printf("JGE %s\n", label); +} + +void jl(char *label) { + printf("JL %s\n", label); +} + +void jle(char *label) { + printf("JLE %s\n", label); +} + +void operatie(char *buffer) { + char *x,*y; + if (strchr(buffer,'&')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '&') + 2; + and(x,y); + } else if (strchr(buffer,'|')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '|') + 2; + or(x,y); + } else if (strchr(buffer,'^')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '^') + 2; + xor(x,y); + } else if (strchr(buffer,'+')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '+') + 2; + add(x,y); + } else if (strchr(buffer,'-')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '-') + 2; + sub(x,y); + } else if (strchr(buffer,'*')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '*') + 2; + mul(x,y); + } else if (strchr(buffer,'/')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '/') + 2; + DIV(x,y); + } else if (strchr(buffer,'<')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '<') + 3; + shl(x,y); + } else if (strchr(buffer,'>')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '>') + 3; + shr(x,y); + } else { + x = buffer; + while(*x == ' ') x++; + while(*x == ' ') x++; + y = strchr(buffer,'=') + 2; + mov(x,y); + } +} + +void IF(char *buffer) { + char *x1,*y1; + char *p = strchr(buffer,')'); + (*p) = '\0'; + x1 = strchr(buffer, '(') + 1; + if (strchr(buffer, '=')) { + y1 = strstr(buffer, "= ") + 2; + cmp(x1,y1); + } + if (strstr(buffer, "==")) { + jne("end_label"); + } else if (strstr(buffer, "<=")){ + jg("end_label"); + } else if (strstr(buffer, ">=")){ + jl("end_label"); + } else if (strchr(buffer, '>')){ + y1 = strchr(buffer, '>') + 2; + cmp(x1,y1); + jle("end_label"); + } else if (strchr(buffer, '<')){ + y1 = strchr(buffer, '<') + 2; + cmp(x1,y1); + jge("end_label"); + } +} + int main() { + char *buffer = malloc(100*sizeof(char)); + int a=0, b=0, c=0; + char aux; // pt for + while (fgets(buffer, 100, stdin) != NULL) { + char *p = strchr(buffer, '\n'); //buffer read + newline remove + if (strchr(buffer, '\n')) { + char *p = strchr(buffer, '\n'); + (*p) = '\0'; + } + + if (strchr(buffer,';') && !strstr(buffer, "for")) { //operation + p = strchr(buffer,';'); + (*p) = '\0'; + operatie(buffer); + } + + if (strstr(buffer, "if")) { // if + IF(buffer); + a=1; + } else if (strchr(buffer, '}') && a==1) {// end if + printf("end_label:\n"); + a=0; + } + + if (strstr(buffer, "while")) { + printf("start_loop:\n"); + IF(buffer+6); + b=1; + } else if (strchr(buffer, '}') && b==1) {// end while + printf("JMP start_loop\n"); + printf("end_label:\n"); + b=0; + } + + if (strstr(buffer, "for")) { + aux = buffer[5]; + printf("MOV e%cx, 0\n", aux); + p = strchr(buffer+12,';'); + (*p) = ')'; + p++; (*p) = '\0'; + printf("start_loop:\n"); + buffer[11]='('; + IF(buffer+11); + c=1; + } else if (strchr(buffer, '}') && c==1) {// end for + printf("ADD e%cx, 1\n", aux); + jmp("start_loop"); + printf("end_loop:\n"); + c=0; + } + } + free(buffer); return 0; } \ No newline at end of file -- GitLab From 351cb63261369e861a1af77810aff96620fc3643 Mon Sep 17 00:00:00 2001 From: Bostangiu Luca <lucabostangiu@gmail.com> Date: Thu, 27 Mar 2025 00:14:00 +0200 Subject: [PATCH 2/4] Final + cs + valgrind Signed-off-by: Bostangiu Luca <lucabostangiu@gmail.com> --- checker/cs/checkpatch.pl | 0 data.json | 80 +++---- src/main.c | 470 ++++++++++++++++++++------------------- 3 files changed, 286 insertions(+), 264 deletions(-) mode change 100644 => 100755 checker/cs/checkpatch.pl diff --git a/checker/cs/checkpatch.pl b/checker/cs/checkpatch.pl old mode 100644 new mode 100755 diff --git a/data.json b/data.json index fee42de..2cd4b26 100644 --- a/data.json +++ b/data.json @@ -6,8 +6,8 @@ "name": "MOV 1", "status": "5", "log": "MOV edx, 77\nMOV ebx, 23\nMOV eax, 96\nMOV eax, 23\nMOV ecx, 58\n", - "time_normal": 0.001482108, - "time_valgrind": 0.0, + "time_normal": 0.000867495, + "time_valgrind": 0.525388626, "timeout": 30000, "test_score": 5 }, @@ -16,8 +16,8 @@ "name": "MOV 2", "status": "5", "log": "MOV eax, ecx\nMOV edx, edx\nMOV edx, 59\nMOV ebx, ebx\nMOV ecx, ebx\nMOV eax, ecx\nMOV ebx, 76\nMOV ebx, 89\n", - "time_normal": 0.001472431, - "time_valgrind": 0.0, + "time_normal": 0.002170064, + "time_valgrind": 0.721041122, "timeout": 30000, "test_score": 5 }, @@ -26,8 +26,8 @@ "name": "LOGICAL 1", "status": "5", "log": "AND edx, 42\nXOR ebx, 41\nXOR eax, 39\n", - "time_normal": 0.001114721, - "time_valgrind": 0.0, + "time_normal": 0.001612708, + "time_valgrind": 0.630460676, "timeout": 30000, "test_score": 5 }, @@ -36,8 +36,8 @@ "name": "LOGICAL 2", "status": "5", "log": "AND ecx, 73\nAND edx, 45\nAND eax, 6\nAND edx, eax\nOR eax, 19\nXOR ebx, eax\nAND eax, 44\nXOR edx, 89\nAND edx, 20\nAND eax, 41\n", - "time_normal": 0.001076748, - "time_valgrind": 0.0, + "time_normal": 0.000975351, + "time_valgrind": 0.671858675, "timeout": 30000, "test_score": 5 }, @@ -46,8 +46,8 @@ "name": "ADD 1", "status": "5", "log": "ADD eax, edx\nADD ecx, 26\nADD ebx, ebx\nADD ebx, 63\n", - "time_normal": 0.001384523, - "time_valgrind": 0.0, + "time_normal": 0.000952725, + "time_valgrind": 0.674587168, "timeout": 30000, "test_score": 5 }, @@ -56,8 +56,8 @@ "name": "ADD 2", "status": "5", "log": "ADD ecx, 65\nADD ebx, edx\nADD ebx, 20\nADD edx, eax\nADD ebx, edx\nADD edx, 23\nADD ecx, ebx\nADD ecx, 52\nADD eax, 83\n", - "time_normal": 0.001169521, - "time_valgrind": 0.0, + "time_normal": 0.001028645, + "time_valgrind": 0.809004342, "timeout": 30000, "test_score": 5 }, @@ -66,8 +66,8 @@ "name": "SUB 1", "status": "5", "log": "SUB eax, eax\nSUB edx, ebx\nSUB ecx, ebx\nSUB eax, 55\nSUB ebx, 16\n", - "time_normal": 0.001821397, - "time_valgrind": 0.0, + "time_normal": 0.001030277, + "time_valgrind": 0.570598408, "timeout": 30000, "test_score": 5 }, @@ -76,8 +76,8 @@ "name": "SUB 2", "status": "5", "log": "SUB ebx, 55\nSUB ebx, 22\nSUB ebx, 70\nSUB ebx, 90\nSUB ebx, 50\nSUB edx, 82\nSUB eax, 67\nSUB edx, 83\nSUB ebx, 28\nSUB ebx, ebx\n", - "time_normal": 0.003060244, - "time_valgrind": 0.0, + "time_normal": 0.001350359, + "time_valgrind": 0.360528494, "timeout": 30000, "test_score": 5 }, @@ -86,8 +86,8 @@ "name": "MUL 1", "status": "5", "log": "MOV eax, edx\nMUL 8\nMOV edx, eax\nMOV eax, ecx\nMUL ecx\nMOV ecx, eax\nMOV eax, ecx\nMUL ebx\nMOV ecx, eax\n", - "time_normal": 0.001816372, - "time_valgrind": 0.0, + "time_normal": 0.001418259, + "time_valgrind": 0.34538312, "timeout": 30000, "test_score": 5 }, @@ -96,8 +96,8 @@ "name": "MUL 2", "status": "5", "log": "MOV eax, ebx\nMUL 4\nMOV ebx, eax\nMOV eax, edx\nMUL 7\nMOV edx, eax\nMOV eax, ecx\nMUL 8\nMOV ecx, eax\nMOV eax, ecx\nMUL edx\nMOV ecx, eax\nMOV eax, ebx\nMUL 0\nMOV ebx, eax\nMOV eax, ebx\nMUL 1\nMOV ebx, eax\nMOV eax, ebx\nMUL ecx\nMOV ebx, eax\nMOV eax, edx\nMUL ebx\nMOV edx, eax\nMOV eax, ebx\nMUL edx\nMOV ebx, eax\n", - "time_normal": 0.001093188, - "time_valgrind": 0.0, + "time_normal": 0.001637144, + "time_valgrind": 0.370333193, "timeout": 30000, "test_score": 5 }, @@ -106,8 +106,8 @@ "name": "DIV 1", "status": "5", "log": "MOV eax, ebx\nDIV 8\nMOV ebx, eax\nMOV eax, ebx\nDIV 4\nMOV ebx, eax\nError\nMOV eax, ecx\nDIV 5\nMOV ecx, eax\nMOV eax, ecx\nDIV ecx\nMOV ecx, eax\n", - "time_normal": 0.001193349, - "time_valgrind": 0.0, + "time_normal": 0.001822196, + "time_valgrind": 0.42422839, "timeout": 30000, "test_score": 5 }, @@ -116,8 +116,8 @@ "name": "DIV 2", "status": "5", "log": "MOV eax, ecx\nDIV 2\nMOV ecx, eax\nMOV eax, ecx\nDIV 9\nMOV ecx, eax\nMOV eax, ebx\nDIV 8\nMOV ebx, eax\nMOV eax, ebx\nDIV 6\nMOV ebx, eax\nMOV eax, ecx\nDIV ebx\nMOV ecx, eax\nMOV eax, ecx\nDIV ecx\nMOV ecx, eax\nMOV eax, ebx\nDIV ebx\nMOV ebx, eax\nMOV eax, ebx\nDIV 5\nMOV ebx, eax\nMOV eax, ebx\nDIV 2\nMOV ebx, eax\nMOV eax, ecx\nDIV ebx\nMOV ecx, eax\n", - "time_normal": 0.000953961, - "time_valgrind": 0.0, + "time_normal": 0.001187574, + "time_valgrind": 0.40874667, "timeout": 30000, "test_score": 5 }, @@ -126,8 +126,8 @@ "name": "SHIFT 1", "status": "5", "log": "SHR edx, 20\nSHR eax, 24\nSHR ebx, 4\nSHR ebx, 7\nSHL edx, 2\n", - "time_normal": 0.00148504, - "time_valgrind": 0.0, + "time_normal": 0.001396248, + "time_valgrind": 0.387548622, "timeout": 30000, "test_score": 5 }, @@ -136,8 +136,8 @@ "name": "SHIFT 2", "status": "5", "log": "SHR ecx, 17\nSHR eax, 2\nSHR ecx, 16\nSHR edx, 11\nSHR edx, 10\nSHL eax, 0\nSHL ebx, 29\nSHL edx, 8\nSHL ecx, 29\n", - "time_normal": 0.001023214, - "time_valgrind": 0.0, + "time_normal": 0.001186003, + "time_valgrind": 0.468562614, "timeout": 30000, "test_score": 5 }, @@ -146,8 +146,8 @@ "name": "IF 1", "status": "5", "log": "CMP edx, 8\nJL end_label\nMOV eax, ebx\nMUL edx\nMOV ebx, eax\nend_label:\nCMP edx, 14\nJNE end_label\nOR ebx, ebx\nMOV eax, edx\nMUL ebx\nMOV edx, eax\nSHL edx, 1\nSUB eax, eax\nend_label:\nCMP edx, 67\nJG end_label\nError\nend_label:\nCMP eax, 96\nJG end_label\nSUB edx, ecx\nend_label:\nCMP edx, 82\nJNE end_label\nSUB eax, 10\nSUB ebx, 72\nend_label:\n", - "time_normal": 0.001458978, - "time_valgrind": 0.0, + "time_normal": 0.001163832, + "time_valgrind": 0.393855891, "timeout": 30000, "test_score": 5 }, @@ -156,8 +156,8 @@ "name": "IF 2", "status": "5", "log": "CMP edx, 95\nJG end_label\nSUB ebx, 72\nMOV eax, edx\nMUL edx\nMOV edx, eax\nADD ebx, ecx\nXOR ebx, 65\nADD eax, ebx\nend_label:\nCMP edx, 87\nJL end_label\nSHL edx, 26\nMOV eax, ebx\nMUL 10\nMOV ebx, eax\nADD edx, edx\nMOV ecx, edx\nMOV eax, ebx\nMUL ecx\nMOV ebx, eax\nend_label:\nCMP eax, 82\nJNE end_label\nADD eax, 37\nSUB ecx, ebx\nMOV eax, ecx\nXOR edx, 51\nSUB ebx, 50\nend_label:\nCMP ebx, 14\nJGE end_label\nADD edx, 13\nSHR ebx, 27\nADD eax, 57\nSUB eax, 65\nend_label:\nCMP eax, 33\nJNE end_label\nADD edx, 61\nADD eax, 86\nMOV eax, ebx\nDIV 10\nMOV ebx, eax\nend_label:\nCMP ebx, 46\nJL end_label\nError\nSHR edx, 29\nSUB ecx, 2\nSHL eax, 6\nend_label:\nCMP edx, 99\nJLE end_label\nMOV eax, 40\nMOV eax, ecx\nMUL 4\nMOV ecx, eax\nSUB eax, 82\nSHR ebx, 27\nAND eax, 87\nend_label:\nCMP eax, 75\nJNE end_label\nSHR edx, 10\nend_label:\nCMP ecx, 97\nJNE end_label\nMOV eax, edx\nMUL 2\nMOV edx, eax\nend_label:\nCMP edx, 50\nJLE end_label\nSUB eax, 24\nend_label:\n", - "time_normal": 0.001316034, - "time_valgrind": 0.0, + "time_normal": 0.001903966, + "time_valgrind": 0.482758219, "timeout": 30000, "test_score": 5 }, @@ -166,8 +166,8 @@ "name": "WHILE 1", "status": "5", "log": "start_loop:\nCMP ebx, 9\nJNE end_label\nSUB ecx, ebx\nJMP start_loop\nend_label:\nstart_loop:\nCMP ecx, 23\nJGE end_label\nOR ecx, 11\nAND edx, edx\nXOR ecx, 43\nJMP start_loop\nend_label:\nstart_loop:\nCMP edx, 50\nJNE end_label\nXOR edx, 69\nMOV ebx, ecx\nJMP start_loop\nend_label:\nstart_loop:\nCMP eax, 53\nJLE end_label\nMOV eax, ecx\nDIV 3\nMOV ecx, eax\nMOV ebx, edx\nSHR ecx, 20\nADD edx, edx\nMOV eax, 49\nJMP start_loop\nend_label:\n", - "time_normal": 0.001396569, - "time_valgrind": 0.0, + "time_normal": 0.000994634, + "time_valgrind": 0.506863811, "timeout": 30000, "test_score": 5 }, @@ -176,8 +176,8 @@ "name": "WHILE 2", "status": "5", "log": "start_loop:\nCMP edx, 85\nJNE end_label\nMOV eax, ecx\nMUL 7\nMOV ecx, eax\nMUL 9\nSHR ebx, 27\nSUB edx, 5\nJMP start_loop\nend_label:\nstart_loop:\nCMP eax, 64\nJL end_label\nADD ebx, eax\nMOV eax, ecx\nDIV ecx\nMOV ecx, eax\nSHR ebx, 23\nADD eax, edx\nMOV edx, edx\nJMP start_loop\nend_label:\nstart_loop:\nCMP edx, 47\nJLE end_label\nAND ebx, 57\nJMP start_loop\nend_label:\nstart_loop:\nCMP ebx, 15\nJG end_label\nMOV eax, ecx\nDIV 8\nMOV ecx, eax\nMOV edx, 77\nOR ebx, edx\nADD edx, 4\nJMP start_loop\nend_label:\nstart_loop:\nCMP ecx, 29\nJNE end_label\nMOV eax, eax\nADD eax, 32\nMOV ebx, 30\nMOV eax, ebx\nDIV 7\nMOV ebx, eax\nSUB edx, 59\nJMP start_loop\nend_label:\nstart_loop:\nCMP ebx, 47\nJNE end_label\nSHR eax, 28\nMOV eax, ecx\nDIV 9\nMOV ecx, eax\nADD ebx, 34\nMOV eax, ebx\nMUL eax\nMOV ebx, eax\nJMP start_loop\nend_label:\nstart_loop:\nCMP ebx, 25\nJNE end_label\nADD ecx, 52\nMOV eax, ebx\nDIV 7\nMOV ebx, eax\nJMP start_loop\nend_label:\nstart_loop:\nCMP eax, 18\nJG end_label\nMOV ecx, ebx\nSUB eax, ebx\nJMP start_loop\nend_label:\nstart_loop:\nCMP ecx, 70\nJG end_label\nMOV eax, 22\nMOV eax, ecx\nDIV 5\nMOV ecx, eax\nMOV eax, ecx\nDIV ecx\nMOV ecx, eax\nSHR ebx, 23\nMOV eax, ebx\nMUL 0\nMOV ebx, eax\nJMP start_loop\nend_label:\n", - "time_normal": 0.00137417, - "time_valgrind": 0.0, + "time_normal": 0.001491765, + "time_valgrind": 0.509807919, "timeout": 30000, "test_score": 5 }, @@ -186,8 +186,8 @@ "name": "FOR 1", "status": "5", "log": "MOV edx, 0\nstart_loop:\nCMP edx, 65\nJGE end_label\nSHL ecx, 13\nADD edx, 1\nJMP start_loop\nend_loop:\nMOV eax, 0\nstart_loop:\nCMP eax, 70\nJG end_label\nSUB edx, 23\nMOV eax, ecx\nDIV 5\nMOV ecx, eax\nMOV ebx, ebx\nOR ecx, 80\nMOV ecx, eax\nADD eax, 1\nJMP start_loop\nend_loop:\nMOV edx, 0\nstart_loop:\nCMP edx, 14\nJGE end_label\nSHR edx, 5\nSUB edx, eax\nADD edx, 1\nJMP start_loop\nend_loop:\nMOV ecx, 0\nstart_loop:\nCMP ecx, 23\nJG end_label\nMOV eax, ecx\nDIV 5\nMOV ecx, eax\nAND edx, 93\nADD ecx, 1\nJMP start_loop\nend_loop:\n", - "time_normal": 0.001280204, - "time_valgrind": 0.0, + "time_normal": 0.001398714, + "time_valgrind": 0.473573021, "timeout": 30000, "test_score": 5 }, @@ -196,8 +196,8 @@ "name": "FOR 2", "status": "5", "log": "MOV edx, 0\nstart_loop:\nCMP edx, 54\nJG end_label\nXOR eax, 24\nSHR edx, 10\nMOV eax, ebx\nMUL 6\nMOV ebx, eax\nADD edx, 1\nJMP start_loop\nend_loop:\nMOV ebx, 0\nstart_loop:\nCMP ebx, 75\nJGE end_label\nADD ecx, 11\nXOR ebx, 80\nSUB edx, ecx\nMOV edx, 69\nADD ebx, 1\nJMP start_loop\nend_loop:\nMOV ebx, 0\nstart_loop:\nCMP ebx, 86\nJG end_label\nMUL 2\nADD ebx, 1\nJMP start_loop\nend_loop:\nMOV eax, 0\nstart_loop:\nCMP eax, 66\nJGE end_label\nADD ebx, 28\nMOV eax, 92\nSHR ebx, 21\nADD eax, 1\nJMP start_loop\nend_loop:\nMOV edx, 0\nstart_loop:\nCMP edx, 79\nJGE end_label\nMOV eax, ebx\nMUL ebx\nMOV ebx, eax\nSUB eax, 25\nXOR ecx, eax\nMOV eax, edx\nMUL 5\nMOV edx, eax\nSHL ecx, 11\nADD edx, 1\nJMP start_loop\nend_loop:\nMOV edx, 0\nstart_loop:\nCMP edx, 47\nJGE end_label\nMOV eax, ecx\nMUL 10\nMOV ecx, eax\nADD edx, 1\nJMP start_loop\nend_loop:\nMOV ecx, 0\nstart_loop:\nCMP ecx, 29\nJGE end_label\nOR edx, eax\nADD ebx, 93\nSHL edx, 30\nMOV ecx, 9\nADD ecx, 1\nJMP start_loop\nend_loop:\nMOV ecx, 0\nstart_loop:\nCMP ecx, 94\nJGE end_label\nMOV eax, ecx\nDIV 7\nMOV ecx, eax\nADD ecx, 59\nMOV eax, ecx\nDIV ecx\nMOV ecx, eax\nMOV eax, edx\nMUL 8\nMOV edx, eax\nADD ecx, 1\nJMP start_loop\nend_loop:\n", - "time_normal": 0.002067097, - "time_valgrind": 0.0, + "time_normal": 0.00202391, + "time_valgrind": 0.777773846, "timeout": 30000, "test_score": 5 } diff --git a/src/main.c b/src/main.c index 68bf0be..16479bc 100644 --- a/src/main.c +++ b/src/main.c @@ -2,236 +2,258 @@ #include <stdlib.h> #include <string.h> -void mov(char *x, char *y) { - if (strlen(y) == 1 && *y>'9') - printf("MOV e%cx, e%cx\n", *x, *y); - else - printf("MOV e%cx, %s\n", *x, y); +void mov(char *x, char *y) +{ + if (strlen(y) == 1 && *y > '9') + printf("MOV e%cx, e%cx\n", *x, *y); + else + printf("MOV e%cx, %s\n", *x, y); } -void and(char *x, char *y) { - if (strlen(y) == 1 && *y>'9') - printf("AND e%cx, e%cx\n", *x, *y); - else - printf("AND e%cx, %s\n", *x, y); +void and(char *x, char *y) +{ + if (strlen(y) == 1 && *y > '9') + printf("AND e%cx, e%cx\n", *x, *y); + else + printf("AND e%cx, %s\n", *x, y); } -void or(char *x, char *y) { - if (strlen(y) == 1 && *y>'9') - printf("OR e%cx, e%cx\n", *x, *y); - else - printf("OR e%cx, %s\n", *x, y); +void or(char *x, char *y) +{ + if (strlen(y) == 1 && *y > '9') + printf("OR e%cx, e%cx\n", *x, *y); + else + printf("OR e%cx, %s\n", *x, y); } void xor(char *x, char *y) { - if (strlen(y) == 1 && *y>'9') - printf("XOR e%cx, e%cx\n", *x, *y); - else - printf("XOR e%cx, %s\n", *x, y); + if (strlen(y) == 1 && *y > '9') + printf("XOR e%cx, e%cx\n", *x, *y); + else + printf("XOR e%cx, %s\n", *x, y); } -void add(char *x, char *y) { - if (strlen(y) == 1 && *y>'9') - printf("ADD e%cx, e%cx\n", *x, *y); - else - printf("ADD e%cx, %s\n", *x, y); -} - -void sub(char *x, char *y) { - if (strlen(y) == 1 && *y>'9') - printf("SUB e%cx, e%cx\n", *x, *y); - else - printf("SUB e%cx, %s\n", *x, y); -} - -void mul(char *x, char *y) { - if (x[0] != 'a') - printf("MOV eax, e%cx\n", *x); - if (strlen(y) == 1 && *y>'9') - printf("MUL e%cx\n", *y); - else - printf("MUL %s\n", y); - if (x[0] != 'a') - printf("MOV e%cx, eax\n", *x); -} - -void DIV(char *x, char *y) { - if(y[0] == '0') { - printf("Error\n"); - } else { - printf("MOV eax, e%cx\n", *x); - if (strlen(y) == 1 && *y>'9') { - printf("DIV e%cx\n", *y); - } else { - printf("DIV %s\n", y); - } - printf("MOV e%cx, eax\n", *x); - } -} - -void shl(char *x, char *y) { - printf("SHL e%cx, %s\n", *x, y); -} - -void shr(char *x, char *y) { - printf("SHR e%cx, %s\n", *x, y); -} - -void cmp(char *x, char *y) { - if (strlen(y) == 1 && *y>'9') - printf("CMP e%cx, e%cx\n", *x, *y); - else - printf("CMP e%cx, %s\n", *x, y); -} - -void jmp(char *label) { - printf("JMP %s\n", label); -} - -void jne(char *label) { - printf("JNE %s\n", label); -} - -void jg(char *label) { - printf("JG %s\n", label); -} -void jge(char *label) { - printf("JGE %s\n", label); -} - -void jl(char *label) { - printf("JL %s\n", label); -} - -void jle(char *label) { - printf("JLE %s\n", label); -} - -void operatie(char *buffer) { - char *x,*y; - if (strchr(buffer,'&')) { - x = strchr(buffer, '=') + 2; - y = strchr(buffer, '&') + 2; - and(x,y); - } else if (strchr(buffer,'|')) { - x = strchr(buffer, '=') + 2; - y = strchr(buffer, '|') + 2; - or(x,y); - } else if (strchr(buffer,'^')) { - x = strchr(buffer, '=') + 2; - y = strchr(buffer, '^') + 2; - xor(x,y); - } else if (strchr(buffer,'+')) { - x = strchr(buffer, '=') + 2; - y = strchr(buffer, '+') + 2; - add(x,y); - } else if (strchr(buffer,'-')) { - x = strchr(buffer, '=') + 2; - y = strchr(buffer, '-') + 2; - sub(x,y); - } else if (strchr(buffer,'*')) { - x = strchr(buffer, '=') + 2; - y = strchr(buffer, '*') + 2; - mul(x,y); - } else if (strchr(buffer,'/')) { - x = strchr(buffer, '=') + 2; - y = strchr(buffer, '/') + 2; - DIV(x,y); - } else if (strchr(buffer,'<')) { - x = strchr(buffer, '=') + 2; - y = strchr(buffer, '<') + 3; - shl(x,y); - } else if (strchr(buffer,'>')) { - x = strchr(buffer, '=') + 2; - y = strchr(buffer, '>') + 3; - shr(x,y); - } else { - x = buffer; - while(*x == ' ') x++; - while(*x == ' ') x++; - y = strchr(buffer,'=') + 2; - mov(x,y); - } -} - -void IF(char *buffer) { - char *x1,*y1; - char *p = strchr(buffer,')'); - (*p) = '\0'; - x1 = strchr(buffer, '(') + 1; - if (strchr(buffer, '=')) { - y1 = strstr(buffer, "= ") + 2; - cmp(x1,y1); - } - if (strstr(buffer, "==")) { - jne("end_label"); - } else if (strstr(buffer, "<=")){ - jg("end_label"); - } else if (strstr(buffer, ">=")){ - jl("end_label"); - } else if (strchr(buffer, '>')){ - y1 = strchr(buffer, '>') + 2; - cmp(x1,y1); - jle("end_label"); - } else if (strchr(buffer, '<')){ - y1 = strchr(buffer, '<') + 2; - cmp(x1,y1); - jge("end_label"); - } -} - -int main() { - char *buffer = malloc(100*sizeof(char)); - int a=0, b=0, c=0; - char aux; // pt for - while (fgets(buffer, 100, stdin) != NULL) { - char *p = strchr(buffer, '\n'); //buffer read + newline remove - if (strchr(buffer, '\n')) { - char *p = strchr(buffer, '\n'); - (*p) = '\0'; - } - - if (strchr(buffer,';') && !strstr(buffer, "for")) { //operation - p = strchr(buffer,';'); - (*p) = '\0'; - operatie(buffer); - } - - if (strstr(buffer, "if")) { // if - IF(buffer); - a=1; - } else if (strchr(buffer, '}') && a==1) {// end if - printf("end_label:\n"); - a=0; - } - - if (strstr(buffer, "while")) { - printf("start_loop:\n"); - IF(buffer+6); - b=1; - } else if (strchr(buffer, '}') && b==1) {// end while - printf("JMP start_loop\n"); - printf("end_label:\n"); - b=0; - } - - if (strstr(buffer, "for")) { - aux = buffer[5]; - printf("MOV e%cx, 0\n", aux); - p = strchr(buffer+12,';'); - (*p) = ')'; - p++; (*p) = '\0'; - printf("start_loop:\n"); - buffer[11]='('; - IF(buffer+11); - c=1; - } else if (strchr(buffer, '}') && c==1) {// end for - printf("ADD e%cx, 1\n", aux); - jmp("start_loop"); - printf("end_loop:\n"); - c=0; - } - } - free(buffer); - return 0; -} \ No newline at end of file +void add(char *x, char *y) +{ + if (strlen(y) == 1 && *y > '9') + printf("ADD e%cx, e%cx\n", *x, *y); + else + printf("ADD e%cx, %s\n", *x, y); +} + +void sub(char *x, char *y) +{ + if (strlen(y) == 1 && *y > '9') + printf("SUB e%cx, e%cx\n", *x, *y); + else + printf("SUB e%cx, %s\n", *x, y); +} + +void mul(char *x, char *y) +{ + if (x[0] != 'a') + printf("MOV eax, e%cx\n", *x); + if (strlen(y) == 1 && *y > '9') + printf("MUL e%cx\n", *y); + else + printf("MUL %s\n", y); + if (x[0] != 'a') + printf("MOV e%cx, eax\n", *x); +} + +void DIV(char *x, char *y) +{ + if (y[0] == '0') { + printf("Error\n"); + } else { + printf("MOV eax, e%cx\n", *x); + if (strlen(y) == 1 && *y > '9') + printf("DIV e%cx\n", *y); + else + printf("DIV %s\n", y); + printf("MOV e%cx, eax\n", *x); + } +} + +void shl(char *x, char *y) +{ + printf("SHL e%cx, %s\n", *x, y); +} + +void shr(char *x, char *y) +{ + printf("SHR e%cx, %s\n", *x, y); +} + +void cmp(char *x, char *y) +{ + if (strlen(y) == 1 && *y > '9') + printf("CMP e%cx, e%cx\n", *x, *y); + else + printf("CMP e%cx, %s\n", *x, y); +} + +void jmp(char *label) +{ + printf("JMP %s\n", label); +} + +void jne(char *label) +{ + printf("JNE %s\n", label); +} + +void jg(char *label) +{ + printf("JG %s\n", label); +} + +void jge(char *label) +{ + printf("JGE %s\n", label); +} + +void jl(char *label) +{ + printf("JL %s\n", label); +} + +void jle(char *label) +{ + printf("JLE %s\n", label); +} + +void operatie(char *buffer) +{ + char *x, *y; + if (strchr(buffer, '&')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '&') + 2; + and(x, y); + } else if (strchr(buffer, '|')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '|') + 2; + or(x, y); + } else if (strchr(buffer, '^')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '^') + 2; + xor(x, y); + } else if (strchr(buffer, '+')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '+') + 2; + add(x, y); + } else if (strchr(buffer, '-')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '-') + 2; + sub(x, y); + } else if (strchr(buffer, '*')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '*') + 2; + mul(x, y); + } else if (strchr(buffer, '/')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '/') + 2; + DIV(x, y); + } else if (strchr(buffer, '<')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '<') + 3; + shl(x, y); + } else if (strchr(buffer, '>')) { + x = strchr(buffer, '=') + 2; + y = strchr(buffer, '>') + 3; + shr(x, y); + } else { + x = buffer; + while (*x == ' ') + x++; + while (*x == ' ') + x++; + y = strchr(buffer, '=') + 2; + mov(x, y); + } +} + +void IF(char *buffer) +{ + char *x1, *y1; + char *p = strchr(buffer, ')'); + (*p) = '\0'; + x1 = strchr(buffer, '(') + 1; + if (strchr(buffer, '=')) { + y1 = strstr(buffer, "= ") + 2; + cmp(x1, y1); + } + if (strstr(buffer, "==")) { + jne("end_label"); + } else if (strstr(buffer, "<=")) { + jg("end_label"); + } else if (strstr(buffer, ">=")) { + jl("end_label"); + } else if (strchr(buffer, '>')) { + y1 = strchr(buffer, '>') + 2; + cmp(x1, y1); + jle("end_label"); + } else if (strchr(buffer, '<')) { + y1 = strchr(buffer, '<') + 2; + cmp(x1, y1); + jge("end_label"); + } +} + +int main(void) +{ + char *buffer = malloc(100 * sizeof(char)); + int a = 0, b = 0, c = 0; + char aux; // pt for + while (fgets(buffer, 100, stdin)) { + char *p = strchr(buffer, '\n'); // buffer read + newline remove + if (strchr(buffer, '\n')) { + char *p = strchr(buffer, '\n'); + (*p) = '\0'; + } + + if (strchr(buffer, ';') && !strstr(buffer, "for")) { // operation + p = strchr(buffer, ';'); + (*p) = '\0'; + operatie(buffer); + } + + if (strstr(buffer, "if")) { // if + IF(buffer); + a = 1; + } else if (strchr(buffer, '}') && a == 1) { // end if + printf("end_label:\n"); + a = 0; + } + + if (strstr(buffer, "while")) { + printf("start_loop:\n"); + IF(buffer + 6); + b = 1; + } else if (strchr(buffer, '}') && b == 1) { // end while + printf("JMP start_loop\n"); + printf("end_label:\n"); + b = 0; + } + + if (strstr(buffer, "for")) { + aux = buffer[5]; + printf("MOV e%cx, 0\n", aux); + p = strchr(buffer + 12, ';'); + (*p) = ')'; + p++; + (*p) = '\0'; + printf("start_loop:\n"); + buffer[11] = '('; + IF(buffer + 11); + c = 1; + } else if (strchr(buffer, '}') && c == 1) { // end for + printf("ADD e%cx, 1\n", aux); + jmp("start_loop"); + printf("end_loop:\n"); + c = 0; + } + } + free(buffer); + return 0; +} -- GitLab From b326738427ef70cb65007c837f9ae74012e3c539 Mon Sep 17 00:00:00 2001 From: Bostangiu Luca <lucabostangiu@gmail.com> Date: Thu, 27 Mar 2025 00:14:55 +0200 Subject: [PATCH 3/4] ; --- Tema_1_Mihai_Popescu_312CA.zip | Bin 0 -> 1495 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Tema_1_Mihai_Popescu_312CA.zip diff --git a/Tema_1_Mihai_Popescu_312CA.zip b/Tema_1_Mihai_Popescu_312CA.zip new file mode 100644 index 0000000000000000000000000000000000000000..bc84e95ff249e0d4c68d38596ed21cc9263b0fa2 GIT binary patch literal 1495 zcmWIWW@Zs#U|`^2SjJc#C7W3*#md6K5F^aMz{ViMkeis9r<WWW!pXq=qxwlY2$xoH zGcdBeU}j(d6HCLh^Di5S{GIcUYrU}duLe_R1xI<I3yjXv3Ky1n<}5HNy|ut(<)vw= z8~&BQ+bV3G`PeLUS!Qgp{PR1nljEP?_?nw<x@^hzh`zfIZk7aCpR@aP=i;-?7rv_h zSo2N2;CPDIAHz2*MJJ_QQTsE0N8s=9%Q5W|58edc?~q<{UtP`8l2KVw;P2FXD>84% z80pF`uKW75?Si`5k;nI~_uor9so=kTSzx{+ckO(g7Imw2!gkZ_*PVKP_IYBa-KFq@ z>Kv;t{rt4nMEc<>1!2*RitHPA+BTefYiD<D$FC$_{)jaX=N*k&;}-g}W`AAuto|>d zA7-w#F`fUy{rNnZubp|h@71*X`){znIsW>zPr*Yymj0HaInVC7wtqi->Vl`XOx&Fn z+C7G<23M`Ef>(M}$+bChoD`_`oe*<wO_pP)T!)N9&SuU`@glpMW^c5kqP>^;ifU_b z`S`J@KWur|WY@GCn}5H#xo6d_`?0mUYs+4)e(*W^!^bs(UyF{`G(Ax1kv2}W3vI8p z3vcti5-5Mg(Rzd3ij6j<SC(33uwPp$q&?&Eg{WPbZ!(@*n4}y`T048A4S&uA!S9*E ze_irF^omWiyJ_+*QFz-4$yYXd2J=0P&pk-Vz5F(^<y!>f+rU|g%ce5?j%0kZ+{FFq zg(%SrQ8V58yiGr4vTj*^sps-~mZ;54QNgncw@r1hUfWQnb=D%?Yr$8o1z%_Uw0!+! zOGs`rS4OkWt!ZkPm)wz^E4OT&d*{WT8xE>9H(b|V+va=vX4eMeD<6L8Z#XJh@-eRR z*NlokGwy!*y+@(e`FM_7G2iC)7v-|D`&`o+7ay#c(RFyu{4#UDq=(@VuWN(ET^}g8 zByBu-+T-$5=3ie`<oV`UeLcSa#>MFSaZh4m{EzwaaY&yq$S;rBxa85IHr^7~vr>Gs zKWXfpt6^(;Dn**rmD#!XjLvoQ09(neAEq!EZnn|iz`OafqVJ}H|CbIVa%FG0t?m;2 z;7aCX!T%dRDqo$kwQHBuzd7?J{hVas7~w7Y-seS;Vu$lLvxC<Y>{t5fUbL1s>EaY_ zQ`~wiV6(rx&GqFUM8C046+gE&VqU#G!>%XW8Mk;(+{*3S?tSaxvc3f|YAPzTV|bb7 z$0l(H>^{0+){bD6-<6X+`7V~SEO?z@GKX!Z1@H7zDUw&1qCaQpl>PLX)R;G^<)yBN z#>>)AdIu(#mt9Ksp8rmFV%Ekjho0)|b38Me{(x8e_au9%sn6|hJvrB~c}B(ZsXLg; z+)Eely}I=D*{Y3`lph@L{vA{Fv+Yvic8?Ff7tB)|)!#%mnn}e-72Bz8Q`x+FBd6-+ zJ;ynm@4wo1vY-2`-u=Al&3AL=i|_qC`)AX~waSM#We65M$=%8J<8_P4Ze6EcF|Br1 zYqI|{2EYrEgPSX(^uPRFvH)15JOURhG7P?n*{NxnIjP`c#8c>TdQ=rgF_PPB$bHB_ zp!NB^^*a<>!#tK`FG%2wVh_C7w1Y$OSdfRbr}dA|d$+xMQuJM}rr%%l%tkY|D{0|V z(zX69n!7kV-uc2~{)6mKOh47_c&>JOftKIXT}o3L*43MxV`C`1Blj)5^YIOf)z%DM zLXk#~H4o@}<&<9L<QMdw;?+6xt!7cblg>@9o4g8QaY;I7<j?dxVV|8NwCI9Tz0c?M z?BY)<m;<~SndF#p6_gS{pE58o0`Znc5DQjpvO<bYv?3GPEX?piHp>-Q6eB_pXc{Q= UFic}*1KG(0gtLIOIxC0=0M5se`v3p{ literal 0 HcmV?d00001 -- GitLab From 4f6a07083d4b40eb56a2e9b9d2eac365d0fdf4b5 Mon Sep 17 00:00:00 2001 From: Bostangiu Luca <lucabostangiu@gmail.com> Date: Thu, 27 Mar 2025 00:15:25 +0200 Subject: [PATCH 4/4] final --- ...scu_312CA.zip => Tema_1_Bostangiu_Luca_final.zip | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename Tema_1_Mihai_Popescu_312CA.zip => Tema_1_Bostangiu_Luca_final.zip (100%) diff --git a/Tema_1_Mihai_Popescu_312CA.zip b/Tema_1_Bostangiu_Luca_final.zip similarity index 100% rename from Tema_1_Mihai_Popescu_312CA.zip rename to Tema_1_Bostangiu_Luca_final.zip -- GitLab