PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : اسمبلی



morteza01
06-07-2010, 19:48
سلام
من تازه دارم اسمبلی برای avr یاد می گیرم و یه اشکالی دارم که توی برنامه زیر:
ldi r16,25

jmp b
ldi r18,255
out 0x17,r18
out 0x18,r18


b:
ldi r21,79
ret

end:
rjmp end
;end
که معنای خاصی نداره ولی به عنوان مثال اوردم که چرا وقتی به دستور ret می رسه ، برنامه دوباره از خط اول (0x0000) شروع می شه؟ و بر نامه رو چطور تغییر بدیم تا با رسیدن به ret ، برنامه از خط ldi r18,255 ادامه یدا کنه؟

farzadsw
07-07-2010, 00:25
دستورات پرش (jmp) بازگشت ندارن . اون دستورات مربوط به "زیر برنامه" هست که بازگشت (ret) دارن.
علت اینکه به 0 بر میگرده هم اینه که استک خالیه (دستور jmp پروگرم کانتر رو تو استک ذخیره نمیکنه)
برای حل این مشکل یا از دستورات زیر برنامه استفاده کیند (به جای jmp ) یا اینکه به جای ret یه دستور پرش بگذارید.

Division
07-07-2010, 02:52
با سلام

البته برنامه شما همون طور كه اشاره كردين معنا و مفهوم خاصي رو نداره ولي براي موردي كه ذكر كرديم بايد برنامه تون رو به صورت زير تغيير بدين



ldi r16,25

jmp b

L1: ldi r18,255
out 0x17,r18
out 0x18,r18


b: ldi r21,79
jmp L1

sjmp $

end