ARM Assembler öğrenmek ama nasıl?

Başlatan MC_Skywalker, 26 Nisan 2012, 11:12:00

MC_Skywalker

The Definetive Guide to the ARM CORTEX-M3 kitabını okumaya başladım şuanda komut setinin anlatıldığı "Instruction Sets" bölümünü okuyorum. Hâliyle ASM olarak anlatım var. Kitabı yazan yazar  Mentor Graphics in "Sourcery CodeBench Lite" kitap içinde vermiş olduğu az sayıdaki örnekte bu aracı kullanmış. Bende bu lite versionu edindim. Fakata daha örneklere gele bilmek biraz daha okumam ve iyice özümseme gerek

Bu kitap daha çok Cortex-M3 çekrideğini detaylı anlatmış. Ben ARM için ASM ile kodyazmayı da öğrenmek istiyorum.

Google amca bana bir çok kaynak sunmakta ama bir güzergaha ihtiyacım var nasıl başlamalıyım. yani kısaca bir LED ' flash yaptıracak duruma gelmek için izleyeceğim yol, yöntem ne olmalı?

Teşekürler.



MC_Skywalker

Teşekürler.

Amacım oturup tamamen ASM ile kodyazmak değil. bu işlemcinin çalışmasını bilmeme yetecek kadar. sanırım bu da LED yak södür seviyesine gelmek yerli diye düşünüyorum.

araştırmaya devam.


alper06

Assembler öğrenmek istiyorsan daha basit bir mimari seç hocam. 8 bit mesela.
Ama bece C falan kullan. Assembler işini makinaya bırak...

MC_Skywalker

Şu adresteki yazıdan başlamaya karar verdim. http://www.peter-cockerell.net/aalp/html/frames.html

The Definetive Guide to the ARM CORTEX-M3 kitap ı ile birlikte okuyacağım.  ARM ASM merak edenler için tavsiye ederim. 

haydarpasamikro

Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

MC_Skywalker

ARM Cortex çekirdeğinin çalışmasını anlamak isitiyorum. 

Yeni başladım bu işlemciye The Definetive Guide to the ARM CORTEX-M3 kitabı içinde sürekli ASM ile örnekler verilmiş.

startup_LPC17xx.s


içeriğini yeni yeni anlamaya başladım. Keli oturmuş bizim için vectör tablosu oluşturmuş. belki kendi projenmizde kendi vektör tablosu oluşturabilir(miy)iz (Nested Vectored Interrupt Controller Table)

MC_Skywalker

The Definetive Guide to the ARM CORTEX-M3 kitabın da verilen örnekleri denemek için bir derleyici gerekmekteydi. Kitapta bunun için Sourcery CodeBench Lite Edition  tavsiye ediliyordu.

Kısa bir arma sonunda Mentor Grapichs firmasının bu yazılımı üreten firmayı satın almamış olmasıyal derleyiciyi bu http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/ adresten  download etme gerktiğini keşfettim.

Sourcery CodeBench Lite Edition for ARM EABI. sürümünü seçip kısa bir üyelik formunu doldurdıktan sonra indirme linki adresimize gönderliyor.

Komut satırı derleyicisi olduğu için herhangi bir IDE ortamı bulunmamakta. 

kitapta veliren örnekleri denedim bu akşam paylaşacağım.

MC_Skywalker

link için teşekürler.

Adı F ile başlayan bir asm derleyici daha vardı onu ARM sürümünü kullanmayı denedim kitaptaki örnekleri derlemedi hata verdi. Ben raha birşekilde kitaptaki örnekleri yapayım bana yeter. Zira Arm ASM ile kodyazmak beni aşarıyor. :) tabi gerekirsen inline asm kullanılır.


serdararikan

Alıntı yapılan: haydarpasamikro - 27 Nisan 2012, 20:14:37
neden asm?

bu yıl otomasyon fuarını gezenler image processing in yaygın olduğunu görmüşlerdir.benimde bu yaygınlık dikkatimi çekti bir yerli firma yazılımı kendilerinin yazdıklarını söyledi.onlara yazılımı C ile mi yazdınız diye sordum.bana verdikleri cevap

Assembly

sanırım hız önemliyse assembly kullanmak gerekiyor

Elektroemre

Hocam sizin inceldeğiniz ve sorduğunuz nasıl bir sistemdi bilmiyorum ama, yerli piyasada yapılan görüntü işleme işlerinin bir çoğu hazır toollar kullanılarak yapılmakta, labwiev gibi antin kuntin toollarla yapıyorlar.

XX_CİHAN_XX

Konu dağılmasın ama yeri gelmişken ekleyeyim görüntü işleme için NI nin Vision Builder programı da çok iş görüyor.
http://www.ni.com/vision/vbai.htm
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

MC_Skywalker

#11
örnek:
ornek1.s
/* 10+9+8+7+5+4+3+2+1 toplaması */
       .equ    STACK_TOP, 0x20000800
       .text
       .syntax unified
       .thumb
       .global _start
       .type start , %function
_start:
       .word STACK_TOP, start
start:
       movs r0, #10
       movs r1, #0
loop:
       adds r1, r0
       subs r0, #1
       bne loop
deadloop:
       b    deadloop
       .end


Programımız yukarıda görüldüğü gibi. derleyicimiz komut satırı derleyicisi olduğu için tüm herşeyi elle yapmamız gerekmekte.

c:\>arm-none-eabi-as -mcpu=cortex-m3 -mthumb ornek1.s -o ornek1.o


yukarıda ki ilk komutumuzda; Assembler kullanarak Cotrex M3 işlemcimize thumb komut kümesi ile Obje dosyamızı oluşturuyoruz.

c:\>arm-none-eabi-ld -Ttext 0x0 -o ornek1.out ornek1.o


yukarıda ki ikinci komutumuzda linker kullanarak Obje dosyamızdan OUTput çıktı dosyamızı oluşturuyoruz.

c:\>arm-none-eabi-objcopy -Obinary onrnek1.out ornek1.bin


Yukarıdaki üçüncü komutumuzu kullanarak elde etiğimiz OUTput çıktı dosyamızı BINary formata çeviriyoruz.

c:\>arm-none-eabi-objdump -S ornek1.out > ornek1.list


Son komutumuz ile Disassembled listemizi oluşturuyoruz.

ornek1.out:     file format elf32-littlearm


Disassembly of section .text:

00000000 <_start>:
   0:	20000800 	.word	0x20000800
   4:	00000009 	.word	0x00000009

00000008 <start>:
   8:	200a      	movs	r0, #10
   a:	2100      	movs	r1, #0

0000000c <loop>:
   c:	1809      	adds	r1, r1, r0
   e:	3801      	subs	r0, #1
  10:	f47f affc 	bne.w	c <loop>

00000014 <deadloop>:
  14:	f7ff bffe 	b.w	14 <deadloop>