میدونید که ما توی اسمبلی عملگری به نام ضرب نداریم باید با استفاده از حلقه به تعداد عدد اول دومی رو با خودش جمع کنیم ولی خوب چیزی به نام حلقه ملقه هم نداریم :d چیکار میکنیم ؟
میایم با استفاده از همون پرش ها و پرش های شرطی یه حلقه برا خودمون درست میکنیم کامپایلر ها هم با همین روش حلقه ها و ضرب ها رو به زبون اسمبلی میبرن .
ما الان میخوایم مثلا ضرب 7*5 رو انجام بدیم پس کاری که در واقع باید انجام بدیم این هست ۵+۵+۵+۵+۵+۵+۵ :
پس ما میایم اول یه عدد از کاربر میگیریم که کاربر ۷ رو وارد میکنه بعد یه عدد دیگه میگیریم که ۵ رو وارد میکنه بعد میایم میگیم هر بار یکی از هفت کم کن اگر هنوز صفر نشده دوباره بپر به اول و پنج رو به حاصل قبلی اضافه کن واضحه برنامه به این شکل میشه :
کد PHP:
mov edx,0
in eax,[dx]
mov ebx,eax
in eax,[dx]
mov ecx,0
rpt : Add ecx,eax
sub ebx,1
jnz rpt
mov eax,ecx
add edx,1
out [dx],eax
ret
این برنامه خیلی ساده دو تا عدد میگیره و حاصل ضربشون رو نمایش میده
در خط اول که اومدیم edx رو صفر کردیم برای اینکه با کمک [dx] بتونیم ورودی بگیریم
تو خط بعد عدد اول رو میگیریم و میریزیمش توی eax
تو خط بعد عدد اول رو میریزیم توی ebx
تو خط بعد عدد دوم رو از ورودی میگیره
بعد ما میخوایم از ecx به عنوان حاصل جمع استفاده کنیم پس برای همین مقدار اولیه اش رو صفر میکنیم .
تو خط بعد با لیبل rpt میایم میگیم که عدد دوم رو با حاصل جمع که الان صفر هست جمع کنه
تو خط بعد از عدد اول یکی کم میکنیم
و تو خط بعدش میگیم که اگه عدد اول هنوز صفر نشده دوباره بپر به همون ضربمون
بعدش هم که دیگه حاصل جمع رو میریزیم توی eax و edx رو یک میکنیم و حاصل جمع رو نمایش میدیم
این یک برنامه خیلی ساده ضرب با استفاده از حلقه بود پس یاد گرفتیم که چطور یه حلقه با یه شرط درست کنیم ولی این برنامه هم باگ همون برنامه قبلیمون رو هنوز داره ....