PDA

View Full Version : سوال: مشکل نمایش رشته در کد کرنل من



behzad24be
چهارشنبه 09 مرداد 1387, 22:51 عصر
سلام.
یه قطعه کد توی کرنلم نوشتم برای چاپ رشته ، که توی یه شرایط خاص رشته چاپ میشه ولی توی یه حالت خاص نه .
مثلا وقتی رشته رو به صورت زیر به تابع ارسال میکنم بدون مشکل چاپ میشه :


unsigned char bh[]={'h','e','l','l','o','\0'};

print(bh,10,10);




ولی وقتی به این صورت میخوام چاپ کنم چاپ نمیکنه :




print("hello",10,10);



و یا به این شکل هم چاپ نمیشه :




unsigned char bh[]="hello";
print(bh,10,10);





وقتی هر بار کرنل رو دی اسمبل می کردم ، متوجه شدم که وقتی کد به صورت print("hello",10,10); نوشته میشه ، توی کد ماشین تولید شده به جای اینکه آدرس حافظه ای که رشته "hello" اونجا قرار داره ، به عنوان پارامتر توی پشته قرار داده بشه ، عدد صفر به عنوان پارامتر تابع به پشته ارسال میشه .




کد چاپ رشته هم اینه :







void print(char *str,int x,int y)


{

while(*str!=0)

{
if(x>80) {
x=0;
y++;
}//if
putch(x,y,*str);
str++;
x++;
}//while
}//print












اینم یه عکس از کد ماشین تولید شده هستش که ارسال پارامترها و فراخانی تابع چاپ رشته توی کادر قرمز کشیده شده :





http://www.teach2day.com/behzad24be/diassem.jpg






اگه دقت کنید متوجه میشید که دو پارامتر مختصات که همون 0xa یا به دهدهی 10 هستش به عنوان پارامتر توی پشته قرار داده شدن ولی پارامتر آخری که باید آدرس رشته ی داده شده باشه به جاش صفر توی پشته قرار داده شده .





همونطور که گفتم این در حالتی هستش که تابع چاپ رو به این شکل صدا میزنم :






print("hello",10,10);





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