جمع با jit قسمت دوم


لینک پروژه :

https://github.com/pejman-hkh/tiny-jit-compiler

قسمت قبل را خیلی وقت پیش نوشتم و وقت نشد که آنرا ادامه دهم. جمع با jit که تنها یک قسمت کوچک از کامپایل هست را اینبار با nodejs انجام دادم که خروجی assembly به ما میدهد. (کد را حذف کردم ) در جلسه قبل ما توابع کوچکی برای اسمبل کردن نوشتیم که به جای print از آن توابع استفاده میکنیم تا جمع و ضرب و تقسیم ما به صورت jit انجام شود.

باگ : اعداد منفی خیلی جاها اعمال نمیشود. ( برطرف شد )

نتیجه نهایی کار که با قسمت قبل کد ها تلفیق کردم و کمی هم ویرایش کردم تا ضرب و جمع و تقسیم و تفریق را با اولویت انجام بدهیم :

https://github.com/pejman-hkh/tiny-jit-compiler

تست هایی که انجام دادم

./a.out 4*-3-1*-20 => 8
./a.out -2*-3-1*-20 => 26
./a.out -2*5+1*-8 => -18

نمونه خروجی برنامه :

./a.out -2*5+1*-8
-2*5+1*-8
mov eax, 2
mov ecx, 0
sub eax, ecx
neg eax
push eax
mov eax, 5
pop ecx
imul eax, ecx
push eax
mov eax, 1
push eax
mov eax, 8
mov ecx, 0
sub eax, ecx
neg eax
pop ecx
imul eax, ecx
pop ecx
add eax, ecx
leave
ret
-18

اگر وقت داشته باشم و البته سر ذوق باشم و صد البته همچنان سر ذوق بمانم میخواهم BrainFuck را به صورت jit بنویسم.

منتظر قسمت سوم باشید ... ;)

دیدگاه بگذارید

دیدگاه

دیدگاه ها بدون تایید میباشد.