PDA

View Full Version : سوال: برنامه اي براي جمع اعداد و ريختن در پشته



mohammad_king62
پنج شنبه 26 فروردین 1389, 17:48 عصر
سلام دوستان
دنبال برنامه اي مي گردم كه اعداد 40 ، 80 ، 10 ، 200 ، 400 را در پشته بريزد و يكي در ميان
منفي و مثبت با هم جمع كند و در يك متغير مثل sum ذخيره كند
يعني به صورت زير در پشته بريزد و در متغير sum ذخيره كند :
sum=40-80+10-200+400
ممنون مي شم راهنمايي كنيد

tdkhakpur
پنج شنبه 26 فروردین 1389, 23:33 عصر
دستی کد میشود (الگوریتم )


nums dw 40 ، 80 ، 10 ، 200 ، 400
sum dw ?
sw db 0
;------------------اعداد را داخل پشته قرار میدهد
mov cx, 5
lea bx, nums
lp1:
mov dx, word ptr [bx]
push dx
add bx, 2
loop lp1
;-------------------------
;---------------------اعداد را از داخل پشته در آورده و عملیات را انجام میدهد
pop dx
mov sum , dx
mov cx, 4
lp2:
pop dx
cmp sw, 0
je jmp1 ;اگر صفر باشد عمل تفریق
add sum , dx
mov sw, 0
jmp jmp2 ;در غیر اینصورت عمل جمع
jmp1:
sub sum , dx
mov sw, 1
jmp2:
loop lp2
;-----------------------------------------------

mohammad_king62
دوشنبه 30 فروردین 1389, 11:49 صبح
سلام
با توجه به الگوریتمی که دوست عزیز tdkhakpur لطف کردند و نوشتن من برنامه رو نوشتم ولی وقتی در برنامه tasm اجرا می کنم error می ده .
من فایل برنامه رو پیوست می کنم دوستان اگر اشتباهی در اون می بینن محبت کنند و راهنمایی کنند .

mohammad_king62
سه شنبه 31 فروردین 1389, 10:54 صبح
دوستان کسی نظری نداره ؟

Delphi Coder
سه شنبه 31 فروردین 1389, 14:01 عصر
نظر که داریم منتها با توجه به اون چیزی که شما ضمیمه کردید کسی بخواد نظر بده باید خیلی چیزای اسمبلی هم در غالب پست آموزش بده که تو فروم یه کم خارج از حوصله هست. چون اون برنامه یه خورده ایرادش زیاده.

1- جمع و تفریق چند عدد و بعد گذاشتن اون تو یه جایی از حافظه بدون اینکه بخواد جایی چاپ بشه. پس اصلا برنامه نمیشه اسمشو گذاشت.
2- شما اصلا DS رو Initialize نکردید توی اون کد.
3- منظور از اینکه ته برنامه یک بایت تو Auxiliary مینویسید چی هست؟
4- چرا برنامه هیچوقت تموم نمیشه؟ (احتمالا ته برنامه 4 رو اشتباهی به جای 0 نوشتید.)

من پیشنهاد میکنم کمی مطالعه تونو بیشتر کنید.