PDA

View Full Version : خطا یابی یک برنامه



negar_1366
چهارشنبه 11 اردیبهشت 1387, 16:39 عصر
با سلام:

:اشتباه:
:گیج:
:اشتباه:

اولین برنامه را به زبان اسمبلی نوشتم . ولی موقع اجرا خطا میدهد . ممکن کمکم کنید ؟
(MASM32)

امکانات برنامه:
1) دريافت تعداد سطر و ستون
2) وارد کردن data
3) امکان جستجوي سطري
4)امکان جستجوي ستونی
5) حذف یک درایه از ماتريس




با تشکر


.................................................. .................................................. ..................
خدايا انکه در تنهاترين تنهاييم تنهاي تنهايم گذاشت!
خواهشي دارم . . .
تو در تنهاترين تنهاييش تنهاي تنهايش نذار.

hoax3r
چهارشنبه 11 اردیبهشت 1387, 19:03 عصر
با سلام

برای شروع بد نیست، ولی خوب ایراد هم زیاد داره
یه نکته تو برنامه متون بگم اگه می خواین تو محیطهای 32 بیتی برنانه بنویسین سعی کنید
تا حد امکان از ثباتهای 32 بیتی استفاده کنید مگه اینکه یه جاهایی بخواین کارایی برنامه رو بالا ببرین

مورد2: مقداری که ماکروی sval برمی گردونه یه مقدار DWORD هست ولی شما تو برنامه
تمام متغییراتون که مقدار برگشتی ماکروی sval داخلشون میره از نوع byte تعریف شدن

مورد3: شما در برنامتون از برچسبهای مثل PRINT و ENTER و DELETE استفاده کردین که قبلا
به نوعی تعریف شده هستن
PRINT همنام با ماکروی print هست
ٍENTER یک دستور اسمبلی هست
DELETE هم مقداری از پیش تعریف شده در فایل windows.inc میباشد

مورد4: شما نقطه شروع برنامه رو با MAIN شروع کردین و با end start تمام کردین خوب اینجوری
نمیشه نقطه شروع و پایان رو مشخص کرد باید به جای MAIN از :start استفاده کنید

مورد5 : این خط کد قابل اجرا نیست،



CMP CAR,'Q'
JE EXIT

به دلیل اینکه exit جزء ماکروها هست و به این شکل نمیتونین از برنامه خارج بشین
مثلا میشه انیجوری تغییرش داد


CMP CAR,'Q'
JNE _loop
exit
_loop:


مورد6: بیشتر جاها اندازه پارامتر دستورات رعایت نشده

البته موارد دیگه ای هم بود. ولی خوب اینا بیشتر به چشم میخورد

موفق باشید

negar_1366
پنج شنبه 12 اردیبهشت 1387, 13:22 عصر
با سلام:
از پستی که برام گذاشته بودید ممنونم . :چشمک:

برنامه را تا حدودی خطا یابی کردم . مثل اینکه در قسمت MAIN و END MAIN خطا داره .
می خواستم بدونم جای MAIN و END MAIN را درست نوشتم یا نه ؟


با تشکر


.................................................. .................................................. .....................

آنجا که همه مثل هم فکر می کنند , هیچ کس خیلی فکر نمی کند .

hoax3r
شنبه 14 اردیبهشت 1387, 00:45 صبح
با سلام

به بخشید یکم دیر تونستم جواب بدم

شما تمام کدی که مینویسین باید بین main و end main باشه. نباید بعد end main کدی قرار بگیره
البته بجر این مورد ایرادات دیگه ای هم بود که بیشترش بخاطر رعایت نشدن اندازه پارامتر دستورات هست
البته همین اولای کدتون از این دستور استفاده کردین


CMP COLC,COL

با دستور cmp نمیشه دو متغیر از حافظه رو با هم مقایسه کنین یکی رو باید داخل ثبات بکنید بعد بیاین مقایسه کنید


MOV AX, COL
CMP COLC,AX


موفق باشید