merhaba keilde bunları yazarken ;
LDR r0,=2_01100001
LDR r1,=2_10011111
ADD r2,r1,r0
r0'ın decimal karşılğı 97 r1'in ise 2ye tamamlama yoluyla -lisini aldım yani -97 ,ama bu sayı aynı zamanda
159 yani şimdi benim 97 ile -97'yi toplamam için ne yapmam, 97 ile 159'u toplamam için ne yapmam lazım ?
ASM ile kod yazmıyorum ama yapman gereken 8 bitlik data boyutundan 16 bitlik olana geçmelisin ki 159 rakamını işleye bilesin. 8 bitlik değişken boyutu ile işaretli olarak işlem yapacaksan -128 ile 127 arasındaki tam sayıları işleyebilirsin. Bu durumda yapacağın işlemin mutlak değeri 128 i taşmaması gerekli. Son bit yani 7. bit işaret olarak kullanılmakta sayı pozitif mi negatif mi bu bit kontrol edilerek anlaşılmakta.
asm komut setine bakarsanız, size daha fazla yardımcı olacaktır.
Örneğin, 1 bayt değerini aşarsa c elde biti taşar, elde biti taşarsa, eldeli toplama komutunu kullanacaksınız, böylece değeriniz 1 bayt değil 2 bayt olarak yoluna devam edecek. (ADC komutu eldeli toplama)
Diğer durumlar için durum bayraklarını kontrol etme yöntemlerini izlemeniz gerekecek.
TST komutu ile izlemekte olduğunu sanının durumunu durum bitlerinden öğrenebilinsiniz.
Stm32 nin registerleri 32 bitdir
-97 = 2_10011111 = 0x9F bu değildir bu 159 dur
-97 = 11111111111111110011111 = 0xFFFFFFF9F işte budur.
Yada toplamı 8 bit olarak kullanacasın.
Registerlere okumuş olduğun işaretli 8 bit veriyi SXTB komutu ile 32 bite yayarsın.
(Mesela R2 registerindeki işaretli 8 bit veriyi 32 bite yaymak için SXTB R2,R2)
Bu C deki (int) tipi type casting işlemine karşı gelir.
Ardından toplama işlemine geçersin. Artık toplama sonucundaki veri işaretli sayı olarak ele alınabilir.
cevap yazan arkadaşlara çok teşekkürler konuyu şimdi anladım :)