0

اصول برنامه نویسی در اسمبلی

 
siryahya
siryahya
کاربر طلایی1
تاریخ عضویت : اسفند 1389 
تعداد پست ها : 158652
محل سکونت : ▂▃▄▅▆▇█Tabriz█▇▆▅▄▃▂

پاسخ به:اصول برنامه نویسی در اسمبلی
دوشنبه 21 اردیبهشت 1394  2:54 AM

میدونید که ما توی اسمبلی عملگری به نام ضرب نداریم باید با استفاده از حلقه به تعداد عدد اول دومی رو با خودش جمع کنیم ولی خوب چیزی به نام حلقه ملقه هم نداریم :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 رو یک میکنیم و حاصل جمع رو نمایش میدیم
این یک برنامه خیلی ساده ضرب با استفاده از حلقه بود پس یاد گرفتیم که چطور یه حلقه با یه شرط درست کنیم ولی این برنامه هم باگ همون برنامه قبلیمون رو هنوز داره ....

 

ترکی زبان قربون صدقه رفتنه داریم که: گوزلرین گیله‌سین قاداسین آلیم که یعنی درد و بلای مردمک چشات به جونم …!.

تشکرات از این پست
دسترسی سریع به انجمن ها