Bazı Assembly Komutlarının anlamı?

Başlatan Elektron74, 21 Kasım 2007, 14:45:01

Elektron74

Arkadaşlar aşağıda bir programdaki bilemediğim komut kullanımlarını yazdım ne anlama geldiklerini açıklayabilirmisiniz? Komutları biliyorum fakat bu kullanım şekilleri karşılaşmadığım kullanım şekilleri.
movf  _LoX,	w              ; check if one
addlw 	255 - 112		; if LoX <= 112

goto    $-1
movlw   .5
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

SpeedyX

movf  _LoX,   w              ; _LoX registerinin içeriğini W a kopyala
addlw    255 - 112      ; W = W+(255-112)

goto    $-1 ; bir üst komuta atla
movlw   .5 ; W a decimal 5 yükle (literal)

Elektron74

@SpeedyX
Teşekkürler.  Asm de  
addlw    255 - 112    
 bu  şekilde direk (255-112) çıkarma işlemi var mı? Önce iki sayıdan biri  W register yükleme yapılması gerekmiyor mu? Bir de bu işlemi neden yapıldığını anlamadım. Yani W register direk 143 eklense olmuyor mu?
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

CLR

Merhaba;

Alıntı yapılan: "Elektron74"@SpeedyX
Teşekkürler.  Asm de  
addlw    255 - 112    
 bu  şekilde direk (255-112) çıkarma işlemi var mı? Önce iki sayıdan biri  W register yükleme yapılması gerekmiyor mu? Bir de bu işlemi neden yapıldığını anlamadım. Yani W register direk 143 eklense olmuyor mu?

ADDLW     143    ; diğeriyle aynı işlem fark etmez



Çarpma, bölme,toplama,çıkarma , IF koşul ifadeleri vb. bir çok derleyinin sunduğu(MPASM yani) özel durumlar var fakat bunları asm komutlarıyla (yani çıkarma,çarpma,toplama komutları gibi) karıştırmamak gerekir. Bu işlemler sadece program derlenirken kullanılır, işlemci içinde kullanılmaz.

Kolay gelsin
Knowledge and Experience are Power

Elektron74

@eemkutay   merhaba;

Yani anlattığınıza göre böyle bir durum var. Benim sizin anlattıklarınızdan şunu anlıyorum  derleyici derleme işlemini yaparken komutu    
ADDLW     143    
 şekline çeviriyor.
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

XX_CİHAN_XX

Alıntı yapılan: "Elektron74"@eemkutay   merhaba;

Yani anlattığınıza göre böyle bir durum var. Benim sizin anlattıklarınızdan şunu anlıyorum  derleyici derleme işlemini yaparken komutu    
ADDLW     143    
 şekline çeviriyor.
aynen öyle.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

salih_arel

x.bit.pos   movlw   HIGH x.lookup
   movwf   PCLATH
   movfw   vox.x
   addwf   PCL,F
x.lookup   retlw   1<<4
   retlw   1<<3
   retlw   1<<2
   retlw   1<<1
   retlw   1<<0


Bu kodların anlamını açıklayabilirmisiniz. Gerçekten çok gerekli..

CLR

Alıntı yapılan: salih_arel - 05 Ağustos 2011, 23:50:06
x.bit.pos   movlw   HIGH x.lookup
   movwf   PCLATH
   movfw   vox.x
   addwf   PCL,F
x.lookup   retlw   1<<4
   retlw   1<<3
   retlw   1<<2
   retlw   1<<1
   retlw   1<<0

Bu kodların anlamını açıklayabilirmisiniz. Gerçekten çok gerekli..

Merhaba,

Programı yazan kişi assembly dilinde macrolar ve/veya atama işlemleri oluşturmuş ve bunları program içinde kullanmış. Aşağıdakilerin hepsi macro/atama işlemi gibi görünüyor.
x.bit.pos,
x.lookup,
vox.x,

Macrolar/atama işlemleri programın başında tanımlanır,  incelersen veya buraya yazarsan bakar çözeriz. 

Knowledge and Experience are Power

Tagli

Burada makro yok. x.bit.pos ve x.lookup birer etiket sadece. vox.x bir register adresi. 1<<2 ise örneğin b'00000100' yazmanın kısa ve daha okunaklı şekli. Kod ise basit bir retlw tablosu uygulaması, oldukça standart.

Öte yandan, etiket isimlerinin içinde nokta olabileceğini bilmiyodum. Öğrenmiş oldum...
Gökçe Tağlıoğlu

unalmustafa1977

__IDLOCS H'0100'                 Arkadaşlar bu komutun anlamı nedir aca ba

; Clear RAM

   BCF STATUS,IRP
   MOVLW 32
   MOVWF FSR
CR1
   CLRF INDF
   INCF FSR,F              Buradaki   F ne   anlama geilyor
   
   BTFSS FSR,7
   GOTO CR1
   BSF FSR,5
CR2
   CLRF INDF
   INCF FSR,F
   MOVLW H'F0'
   SUBWF FSR,W
   BTFSS STATUS,ZERO
   GOTO CR2
   BSF STATUS,IRP
   MOVLW 16
   MOVWF FSR
CR3
   CLRF INDF
   INCF FSR,F
   MOVLW H'70'
   SUBWF FSR,W
   BTFSS STATUS,ZERO
   GOTO CR3
   MOVLW 144
   MOVWF FSR
CR4
   CLRF INDF
   INCF FSR,F
   MOVLW H'F0'
   SUBWF FSR,W
   BTFSS STATUS,ZERO
   GOTO CR4

Tagli

__IDLOCS, PIC'in içinde cihaz ID (kimlik) numarası için ayrılmış alana programcının belirleyeceği kimlik numarasının yerleştirilmesini sağlar. Bu şekliyle PIC16 ve PIC12 için. PIC18 için fazladan bir de adres vermek gerekiyor. Seri üretim falan yapmıyorsan muhtemelen hiçbir işine yaramaz, bu satırı yazmasan da olur.

Komut sonundaki virgülden sonra gelen F, yanlış hatırlamıyorsam gerçekte "1". İşlem sonucunun yine işlemin kaynağı olan register'a saklanması gerektiğini belirtiyor. Eğer F yerine W olsaydı, ki gerçekte "0"dır, FSR değişmeyecek, komut sonunda elde edilecek değer W'de saklanacaktı.

Emin değilim ama sanırım yazılmadığı zaman assembler varsayılan değer olarak F'yi alıyor. Ancak hiçbir zaman varsayılan değerlere güvenmemek gerekir.
Gökçe Tağlıoğlu

salih_arel

retlw uygulamasını biraz daha açabilirmisiniz. Ben daha yeni başlıyorum ve elimde gerçekten çok zor bir program var.

Tagli

retlw tablosu, aslında elemanlarına hızla erişilebilen bir dizidir. C'de char x[] = {5, 10 ,15}; yazıldığında x[1]'in 10 olması gibi bir durum yani. Ancak assembly'de sistem program counter'ın (PC) çalışma sırasında değiştirilmesi mantığına dayanıyor.

goto tabloları ise bu yöntemin bir benzerinin şartlı dallanma için kullanılmasıdır. C'deki switch veya if yapılarına benzetilebilir.

Uygulamasını ise zamanında bu başlıkta ayrıntıları ile açıklamıştım.
Gökçe Tağlıoğlu

salih_arel

1<<2   b'00000100' ise

1<<3 de b'00001000' mi abi kaydırma gibi bi işlem mi yapıyor.

Tagli

Evet, yapılan işlem tam olarak kaydırma. Ancak bunu PIC yapmıyor, assembler, yani bilgisayar yapıp PIC'in içine sabit sayı gömüyor. Yani buradaki amaç yazım veya belki de okuma kolaylığı (bence daha çok yazım kolaylığı var, okuması biraz daha zorlaşmış gibi).
Gökçe Tağlıoğlu