Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

ASSEMBLY DİLİ YARDIM

Başlatan refikos, 05 Nisan 2018, 14:29:54

refikos

 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 ?

yas

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.

Kabil ATICI

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.
ambar7

devrecii

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.

Zoroaster

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.



Seytan deliginden kacti.

refikos

cevap yazan arkadaşlara çok teşekkürler konuyu şimdi anladım  :)