Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: yamak - 08 Aralık 2013, 11:20:53

Başlık: ARM asm'sinde bir registera 32 bitlik constant değer yükleme
Gönderen: yamak - 08 Aralık 2013, 11:20:53
ARM asm'sinde bir register a 32 bitlik bir değeri bir kere de nasıl yüklüyoruz.Sonuçta hex code 32 bitlik olduğundan 32 bitlik bir değeri hexcode içine yerleştirilemez.Bu durumda nasıl bir yol izleniyor.ARM asm sini bilmiyorum.Sadece bir anda aklıma geldi.Diğer mimarilerde iki hamlede yükleniyor galiba.Ama literal pool diye bi olay var galiba ne olduğu tam anlamadım.Mesela aşağıdaki gibi bir komutta nasıl bir yol izlenir.

LDR R0,$A2A0B2FF
Başlık: Ynt: ARM asm'sinde bir registera 32 bitlik constant değer yükleme
Gönderen: z - 08 Aralık 2013, 13:00:47
Bir kac yontemi var.

- Derleyici 32 bit sabiti program alanina  yazar. Registere yuklenecegi zaman bu yazilan adresden okunur. Bu kendi icinde, PC yada bir baska registerin index register kullanimi olarak ikiye ayriliyor.

- H16 ve L16 registerlere iki asamada yuklenir,

- Eger yuklenecek sabit  8 bitlik bir sayinin sola kayridirilmasi ile elde edilebiliyorsa zaten dogrudan yuklemede sorun yok.

LDR R0,=0x12345678  ; (PC'a indexli)

LDR R1,[R2] ; (Bir baska registere indexli)

MOV R3,#0x6789          ; (iki asamali yukleme)
MOVT R3,#0x1234

MOV  R1,#0x1E000000   ; (Kaydirmali yukleme)
Başlık: Ynt: ARM asm'sinde bir registera 32 bitlik constant değer yükleme
Gönderen: yamak - 08 Aralık 2013, 15:08:41
Hocam ilk yöntemi biraz daha açıklayabilir misiniz?
Başlık: Ynt: ARM asm'sinde bir registera 32 bitlik constant değer yükleme
Gönderen: z - 08 Aralık 2013, 16:54:05
Derleyici yuklenecek degeri programin sonlarinda bir yere yerlestiriyor.
Bu degeri yuklemek istediginiz komut satirinda PC"in degeri belli. Programin sonundaki 32 bit verinin saklandigi adres de belli.
Ikisi arasindaki fark PC indexli olarak komut parametresine yaziliyor.

Mesela diyorki su anki PC dan 128 byte ileride 32bit veri var. Onu oku.

Neyseki bunu derleyici yapiyor yoksa gicik bir is olurdu.
Başlık: Ynt: ARM asm'sinde bir registera 32 bitlik constant değer yükleme
Gönderen: yamak - 08 Aralık 2013, 16:58:05
Alıntı yapılan: z - 08 Aralık 2013, 16:54:05
Derleyici yuklenecek degeri programin sonlarinda bir yere yerlestiriyor.
Bu degeri yuklemek istediginiz komut satirinda PC"in degeri belli. Programin sonundaki 32 bit verinin saklandigi adres de belli.
Ikisi arasindaki fark PC indexli olarak komut parametresine yaziliyor.

Mesela diyorki su anki PC dan 128 byte ileride 32bit veri var. Onu oku.

Neyseki bunu derleyici yapiyor yoksa gicik bir is olurdu.
Bwn de onu merak ediyodum. Böyle bi hesabı kullanıcının yapması çok zor olurdu.Peki siz asm ile kod yazarken nasıl oluyor.Bu hesabı yapmak zorunda kalmıyo musunuz?
Başlık: Ynt: ARM asm'sinde bir registera 32 bitlik constant değer yükleme
Gönderen: z - 08 Aralık 2013, 16:58:37
Dedim ya ASM derleyici yapiyor. Pseudo bir komut bu. LDR R0,[PC,#xxx] gibi bir sey aslinda.
Başlık: Ynt: ARM asm'sinde bir registera 32 bitlik constant değer yükleme
Gönderen: yamak - 08 Aralık 2013, 17:33:25
Anladım hocam teşekkürler.