به نام خدا!
این نکته جالبی به نظرم اومد!
گفتم براتون قرارش بدم!
برای استفاده از اسمبلی در زبان سی به خصوص در کامپایلر keil که ما توی اون کد های میکرو مون رو مینویسیم! میتونیم یه راه خیلی سریع و آسون رو پیشبگیریم!
به این نوع کد نویسی که میخوام بگم، میگن inline یعنی همونجا که داری C مینویسی، اسمبلی هم بنویسی!
خیلی آسونه با کد زیر این کار امکان پذیره
__ASM ("code");
کد ما باید حتما بین " " باشه تا اجرا شه!
مثلا کد اسمبلی زیر با کد زبان C زیر برابر هست!
__ASM("mov r1,#0xaa");
__ASM ("strb r1,[0x2009C054]");
C:
LPC_GPIO2->FIOPIN = 0xaa;
اون آدرس 0x2009C054 هم آدرس حافظه هست. اگه میخواید بدونید از کجا گیر آوردم میتونید به مطلب زیر مراجعه کنید!
فقط باید دقت کنید که کد های پردازنده های ARM با کد های اینتل 8080 و 8051 و.. برابر نیست!
میتونید توی نت سرچ کنید تا کدهای اسمبلی پردازنده های ARM براتون بیاد
مثلا توی سایت زیر برین با جدول زیر رو به رو میشید که رجیستر های ARM توشه!
Register | Alt. Name | Usage |
r0 | a1 | First function argument Integer function result Scratch register |
r1 | a2 | Second function argument Scratch register |
r2 | a3 | Third function argument Scratch register |
r3 | a4 | Fourth function argument Scratch register |
r4 | v1 | Register variable |
r5 | v2 | Register variable |
r6 | v3 | Register variable |
r7 | v4 | Register variable |
r8 | v5 | Register variable |
r9 | v6 rfp |
Register variable Real frame pointer |
r10 | sl | Stack limit |
r11 | fp | Argument pointer |
r12 | ip | Temporary workspace |
r13 | sp | Stack pointer |
r14 | lr | Link register Workspace |
r15 | pc | Program counter |
سایتشم
http://www.ethernut.de/en/documents/arm-inline-asm.html
هست که میتونید ببینید
سایت زیر رو هم ببینید البته از اینا بهتر هم توی نت هست به خصوص منابع خارجی:
http://www.toves.org/books/arm/
امیدوارم به دردتون خورده باشه!
فعلا
یا علی مدد...!
سلام
اگه بخوایم یک برنامه ی ساده با اسمبلی بنویسم پیکر بندی اصلی چطوری است
منظورم سگمنت کد و دیتا و ....
ساده ترین حالت ممکنه
یه مورد دیگه توابع چطور در برنامه نویسی ارم میشه ساخت
مارکرو ها و ....
reti . برگشت چطور هست و دستور پرش ها بدون محدودیت است ؟
یک فایل startup_stm32f407xx.s هست که توضیحاتی در موردش میخوام
بسیار بسیار این مطلبتون متشکرم برام مفید
همیشه شما اصل مطلبو قرار میدید بدون شاخو برگ اضافی این نشون دهنده حرفه یی بودن شما دراد