Swap komutu yerine geçecek programı nasıl yazabiliriz ?
Yardımcı olabilecek fikir verebilecek yok mu ? 4 kez sola kaydırma işlemi yaptığımda aslında yer değiştirebiliyorum ama nasıl art arda sola kaydırabiliriz ?
x = (x<<4) | (x>>4) ;
Alıntı yapılan: xoom - 31 Mart 2017, 21:01:47
x = (x<<4) | (x>>4) ;
Biraz açıklayabilir misiniz anlamadım
Alıntı yapılan: robikod - 31 Mart 2017, 21:03:33
Biraz açıklayabilir misiniz anlamadım
x değişkenini 4 bit sola ve 4 bit sağ kaydırıp toplarsanız swap() yapmış olursunuz..yani nibble'lar yer değiştirir.
x= 1000 0110 olsun..
4 bit sola kaydırırsanız = 0110 0000
4 bit sağa kaydırırsanız = 0000 1000 olur..
Toplarsanız
x= 0110 1000 olur..
Alıntı yapılan: xoom - 31 Mart 2017, 21:20:40
x değişkenini 4 bit sola ve 4 bit sağ kaydırıp toplarsanız swap() yapmış olursunuz..yani nibble'lar yer değiştirir.
x= 1000 0110 olsun..
4 bit sola kaydırırsanız = 0110 0000
4 bit sağa kaydırırsanız = 0000 1000 olur..
Toplarsanız
x= 0110 1000 olur..
Şu şekilde yaptığımda olmaz mı peki ?
LIST P=16F877A
INCLUDE "P16F877A.INC"
SAYAC EQU h'21'
ORG 0x00
CLRF PORTC
BSF STATUS,5;Bank 1 e geç
BCF STATUS,0; Carry Flag temizlendi
CLRF TRISC; port c çıkış olarak ayarlandı.
BCF STATUS,5;bank 0 a geç
MOVLW 0xFF;
MOVWF PORTB; giriş olarak ayarlandı
MOVLW 0x04
MOVWF SAYAC
SOLA
;sola kaydırmayı görmek istemediğimiz için gecikme vermedik
RLF PORTB,F; Port b deki veriyi sola kaydır
DECFSZ SAYAC,F; sayaç sıfır mı ?
GOTO SOLA ; değişse sayaç sıfır olana kadar dönsün
END
Alıntı yapılan: robikod - 31 Mart 2017, 21:30:00
Şu şekilde yaptığımda olmaz mı peki ?
LIST P=16F877A
INCLUDE "P16F877A.INC"
SAYAC EQU h'21'
ORG 0x00
CLRF PORTC
BSF STATUS,5;Bank 1 e geç
BCF STATUS,0; Carry Flag temizlendi
CLRF TRISC; port c çıkış olarak ayarlandı.
BCF STATUS,5;bank 0 a geç
MOVLW 0xFF;
MOVWF PORTB; giriş olarak ayarlandı
MOVLW 0x04
MOVWF SAYAC
SOLA
;sola kaydırmayı görmek istemediğimiz için gecikme vermedik
RLF PORTB,F; Port b deki veriyi sola kaydır
DECFSZ SAYAC,F; sayaç sıfır mı ?
GOTO SOLA ; değişse sayaç sıfır olana kadar dönsün
END
Asm bilmiyorum maalesef.
Hocam sorunun tam mahiyetini okumadım ama iki değişkeni swap yapmanın en iyi yolu ikisini XOR yapmaktır. Başka yerlerde işine yarayabilir.
Alıntı yapılan: mir_as82 - 31 Mart 2017, 21:41:00
Hocam sorunun tam mahiyetini okumadım ama iki değişkeni swap yapmanın en iyi yolu ikisini XOR yapmaktır. Başka yerlerde işine yarayabilir.
Swap komutunun algoritmasını çözmeye ve kendim yazmaya çalışıyorum asembly ile