ورود

View Full Version : اشکال در برنامه



neilabak
سه شنبه 20 فروردین 1387, 18:43 عصر
سلام دوستان

این برنامه یه چیزی شبیه ماشین حسابه .موقع اجرا مثلا وارد میکنیم a=1000
باید 1000 را در aبریزد و اگرم بنویسیم a؟
باید مقدار a را چاپ کند و همچنین اگر بنویسم c=a+b
یا ضرب یا تقسیم یا تفریق باید عملیات را انجام داده و مقدار حاصل را در c بریزد این برنامه برای تمام حروف باید کار کند و حداکثر تا 4 رقم را میتواند بگیرد .2 تا مشکل دارد یکی اینکه وقتی میگم a=1000درست هزار را داخل a نمیریزد و چیز دیگه ای رو میریزه توش و مشکل دیگه اینکه جوابو درست چاپ نمیکنه .
لطفا اگه کسی میتونه مشکل برناممو حل کنه خیلی واجبه از بس سینگل استپ کردم و جواب نگرفتم حالم داره به هم میخوره شب هم خواب امیولیتر میبینم!:عصبانی++: من تا جمعه وقت دارم. تا شنبه صبحم شد ممنون میشم:افسرده:.(فقط بگم از اول runشدنش یه 2 دقیقه ای طول میکشه!)
پیشاپیش ممنونم!

mah.yar
چهارشنبه 21 فروردین 1387, 22:25 عصر
نکته1:
وقتی شما یک کاراکتر(چه عدد باشد چه حروف) رو از ورودی میخونید کد اسکی اون وارد AL میشه یعنی وقتی عدد 0 فشار داده میشه کد اسکی عدد 0 که 30H(یا همون 48 دهدهی) است وارد ثبات AL میشه به همین ترتیب اگه 1 فشرده بشه 31H(یا همون 49 دهدهی) ...
پس باید دقت کنیم که خود عدد تایپ شده وارد ثبات نمیشه.
راه حل:ما میتونیم یک کلک بزنیم تا وقتی یک عدد تایپ شد دقیقا خود عدد وارد AL بشه نه کد اسکی اون.
اگه به کد اسکی هر عدد(در مبنای ده) توجه کرده باشید می بینید که اختلاف هر عدد با کد اسکی اش برابر 48 است:

عدد ----کد اسکی در مبنای 10 ----اختلاف
0 ------------48-------------------- 48
1 ------------49-------------------- 48
.
.
.
9 ------------57-------------------- 48

پس اگه AL رو از 48 کم کنی مقدار دهدهی معادل بدست میاد.

نکته2:
اگه بخوای یه عدد دورقمی بگیری باید رقم اول رو از ورودی بگیری از 48 کم کنی و بعد حاصل رو در 10 ضرب کنی و سپس رقم دوم رو بگیری و با اون جمع کنی تا بشه یه عدد دورقمی
نکته3:برای چاپ یک عدد هم یه همچین مکانیزیمی وجود داره .فرض کن با دستور mov عدد 65 رو تو AL ریختی حالا میخوای با اینتراپت 21H مقدار AL رو چاپ کنی.باید دقت کنید که برنامه عدد 65 رو چاپ نمیکنه بلکه کاراکتری رو چاپ میکنه که کد اسکی اون 65 هست یعنی کاراکتر A.
پس اگه بخواید به عنوان مثال عدد 1 رو چاپ کنید باید کد اسکی اون رو حساب کرده(49 در مبنای ده) و وارد یه متغیر کمکی کنید و سپس متغیر کمکی رو چاپ کنید.

نکته3:برای اطلاعات بیشتر میتونید به کتاب مراجعه کنید تحت عنوان تبدیل باینری به اسکی و بالعکس.

نکته4:یه برنامه کوچیک هم در رابطه به همین تبدیلات برات میزارم امیدوارم کمکت کنه.
این برنامه دو تا عدد دو رقمی رو میگره و جمع و حاصلضرب رو به خروجی میبره.

neilabak
پنج شنبه 22 فروردین 1387, 13:06 عصر
ممنون. توضیحاتتون خیلی کمکم کرد.فقط با اجازه کاربران محترم من این برنامه رو از اینجا بر میدارم بعد از تحویل پروژه دوباره میذارم.

mah.yar
پنج شنبه 22 فروردین 1387, 19:09 عصر
فکر میکردم برنامه ای رو که براتون گذاشتم رو دانلود میکنید.
حجمش فقط 1 کیلوبایته.

neilabak
پنج شنبه 22 فروردین 1387, 22:02 عصر
دوست عزیز داونلود کردم. ولی اجرا نمیشد .پیغام میداد:can not generate to com file.remove the stack segment