ARM asm'sinde bir registera 32 bitlik constant değer yükleme

Başlatan yamak, 08 Aralık 2013, 11:20:53

yamak

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

z

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)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

yamak


z

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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

yamak

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?

z

Dedim ya ASM derleyici yapiyor. Pseudo bir komut bu. LDR R0,[PC,#xxx] gibi bir sey aslinda.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

yamak