خوب ما الان میخوایم یه برنامه بنویسیم که دو مقدار رو از کاربر بگیره مقدار اول رو در ebx و مقدار دومی رو eax ذخیره کنه اگه اولی بزرگتر بود عدد ۱ رو برگردونه اگر دومی بزرگتر بود عدد ۲ رو برگردونه برای مقایسه چیکار کنیم ؟
با توجه به این چیزایی که تا حالا یاد گرفتیم میخوایم یه مقایسه انجام بدیم میتونیم اولی رو از دومی کم کنیم و بعد با توجه به این پرچم ها که یاد گرفتیم میایم و میگیم اگر حاصل منفی بود پس دومی بزرگتره اگه منفی نبود اولی بزرگتره خوب پس بیاید برنامه اش رو بنویسیم :
کد PHP:
MOV EDX,0
IN EAX,[DX]
MOV EBX,EAX
IN EAX,[DX]
SUB EBX,EAX
JS SIB
MOV EAX,1
JMP END
SIB: MOV EAX,2
END: MOV EDX,1
OUT [DX],EAX
RET
خوب حالا خط به خط برنامه رو تحلیل میکنیم
خط اول که edx رو صفر میکنه که dx هم صفر بشه برای ورودی گرفتن
خط دوم هم که یه ورودی میگیره که عدد اولی هست که کاربر وارد میکنه
تو خط سوم میایم و اون عدد رو میریزیم توی ebx که عدد دوم رو بتونیم بگیریم
تو خط چهارم عدد دوم رو از کاربر میگیریم و میریزیمش توی eax
تو خط پنجم عدد اول رو منهای دومی میکنیم یعنی :
avali - dovomi
بعد حالا تو خط ششم یک پرش شرطی میکنیم که در صورتی که sign flag ست شده باشه میپره sign هم که توضیح دادیم در صورتی ست میشه که حاصل تفریق منفی باشه خوب حالا اگر منفی باشه که یعنی دومی بزرگتر بوده میپره به SIB که یعنی Second is bigger دومی بزرگتر است که توش میزاریم eax رو برابر با ۲ قرار بده اگر حاصل منفی نباشه eax رو برابر با ۱ قرار میده و میپره به end اگر هم دومی بزرگتر باشه که باز هم بعد از SIB میره به end در end میگیم که edx رو برابر با ۱ قرار بده و بعد هم با استفاده از پورت خروجی که همین 1 هست عدد توی eax رو چاپ کنه که معلوم بشه کدوم بزرگتر بوده آخرش هم که با ret* برنامه رو تموم میکنیم .
این یک برنامه بسیار ساده بود برای مقایسه دو عدد اما این برنامه هنوز باگ داره تا پست بعد عدد های مختلف رو امتحان کنید ( مثلا مقایسه عدد مثبت و منفی )