Borna66
05-18-2013, 01:09 PM
ماشین حساب اسمبلی
http://pnu-club.com/imported/2013/05/1875.jpg
با سلام. این سورس یه برنامه تقریبا ساده ماشین حساب به زبان اسمبلی است که با نرم افزار شبیه ساز 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
امیدوارم بدردتون بخوره.
دانلود از بخش ضمیمه همین پست بصورت رایگان
http://pnu-club.com/imported/2013/05/1875.jpg
با سلام. این سورس یه برنامه تقریبا ساده ماشین حساب به زبان اسمبلی است که با نرم افزار شبیه ساز 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
امیدوارم بدردتون بخوره.
دانلود از بخش ضمیمه همین پست بصورت رایگان