ماشین حساب اسمبلی
با سلام.
این سورس یه برنامه تقریبا ساده ماشین حساب به زبان اسمبلی است که با نرم افزار شبیه ساز EMU نوشته شده.این برنامه با ماوس کار میکنه و همون چهار عمل اصلی رو با محدودیت پنج رقم و بدون اعشار انجام میده. (شرمنده که کامل نیستش!) (بازهم شرمنده که تو 64 بیتی ها اجرا نمیشه)
دانلود از بخش ضمیمه همین پست بصورت رایگان
دستورات اصلی بدین شرح هستند:
0)عدد موجود در x را چاپ کن
1)عدد اول را دریافت کن(رشته را در buffer قرار بده، و عدد را در x قرار بده)
2)بعد از آن عملگر اول را دریافت کن
3)اگر عملگر "=" بود ، به خط صفر برگرد؛در غبر این صورت ادامه بده :
4)عدد دوم را دریافت کن(رشته را در buffer قرار بده و عدد را درy قرار بده)
5)عملگر دوم را دریافت کن
6)با فراخوانی calculatore نتیجه عبارت x(عملگر اول)y را حساب کن و حاصل را در xقرار بده
7)اگر عملگر دوم "=" بود، به خط 0 برگرد؛در غیر اینصورت ادامه بده:
8)عملگر دوم را در عملگر اول قرار بده و به خط 5 برگرد.
با این دستورات مثلا شما میتوانید عبارت 3*6-4+8= و یا 4+5= ویا -6/5= را وارد کنید.
البته به این دلیل که x,y را word تعریف کردم و از همان ثبات های دوبیتی استفاده کردم فقط میشود اعداد تا پنج رقم را استفاده کرد و اگر حاصل از آن بیشتر شد علامت o بمعنی سرریز در گوشه صفحه چاپ میشود که باید در اینصورت دکمه C را کلیک کرد تا برنامه به خط صفر برگردد.
برنامه فقط تا پنج رفم را دریافت میکند و رقم بعدی را _هرچه باشد_ عملگر "=" حساب میکند.
ضمنا اعداد مثبت و منفی را هم در محاسبات درنظر میگیرد.برای وارد کردن عدد منفی باید بنویسی -8= یا -8*... .
این هم دستورات اصلی برنامست:
کد:
call print_screen
begin:
reset
calc1:
putrez buffer,x ;print x
number_in x,operand1,lenth
mov al,operand1
cmp al,'='
je calc1
calc2:
number_in y,operand2,lenth
call calculate ;x = x (operand1) y
mov al,operand2
cmp al,'='
je calc1 ;if(operand2=='='):printx,start again.
mov operand1,al ;else:operand1=operand2,printx,get buffer again.
putrez buffer,x
jmp calc2
امیدوارم بدردتون بخوره.
دانلود از بخش ضمیمه همین پست بصورت رایگان