شما یه کار راحت تر می تونی بکنی یدونه pointer تعریف کن به هر جایی خواستی می تونی اشاره کنی
یا با یه دونه ستاره می تونی به هر آدرسی خواستی دسترسی می تونی پیدا کنی
من برای این می خوام جای متغیر رو بدونم که تو اسمبلی بهش دستیابی داشته باشم. با پوینتر این کار میشه؟
آره می شه ولی کار راحت تر هم هست شما می تونی تو همون دستور asm که می نویسی متغیر های ورودی خروجی رو هم معرفی کنی و حتی بگی فلان رجیستر رو برای شما رزرو کنه
کد:
asm volatile (
"in r26,0 ;Read PINF" "\n\t"
"in r27,0x19 ;Read PINA" "\n\t"
"LDI r28,8 ;FOR I=1 TO 4" "\n\t"
"1: LSL R26 ;C <- Rd(7)""\n\t"
"ROR %A0 ;RD(7) <- C" "\n\t"
"DEC r28" "\n\t"
"BRNE 1b ;next ROR" "\n\t"
"LDI r28,8 ;FOR I=1 TO 4" "\n\t"
"2: LSL R27 ;C <- Rd(7)""\n\t"
"ROR %B0 ;RD(7) <- C" "\n\t"
"DEC r28" "\n\t"
"BRNE 2b ;next ROR" "\n\t"
: "=r" (Res) : :"r28","r26","r27"
);
اینو خیلی وقت پیش نوشتم یه نگاه بکن شاید به درد بخوره
ممنون از پاسختون . این سطر هایی که نوشتید رو خوندم ولی نفهمیدم که چه متغیری رو از C وارد قسمت اسمبلی کردید. به هر حال می خوام که یه کم خودم بیشتر توضیح بدم.
برنامه من این طوره که یه روتین وقفه داریم که با اسمبلی نوشته شده. تو اون روتین باید به یه آرایه که قبلا در مکانی از حافظه مشخص شده دسترسی پیدا کنه. علت اسمبلی بودن هم نیاز به سرعته.
بالاخره میشه مکان متغیر رو مشخص کرد؟
در ضمن چرا این قدر این WinAVR همه چیزش عجیب و جدیده؟ مثلا این "n\t" یعنی چی در پایان هر خط اسمبلی باید باشه. :?:
اگه اشتباه نکنم متغیر به اسم res رو می گیره می ریزه توی رجیستر (=r)
r28 r26 r27 رو هم رزرو می کنه
معمولی هم با اشاره گر ها به راحتی می شه
آقا هادی ممنون . ولی آخرش، میشه مکان یه متغیر رو تعیین کرد یا نه؟ :wink: :?:
عددی که داخل اشاره گر قرار می دی آدرس متغیر هست البته کار با اشاره گر ها رو باید بلد باشی چون ممکنه محتوی اشاره گر رو تغییر بدی به جای آدرسی که بهش اشاره می کنه