Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

duplicate label

Başlatan ido2323, 10 Ocak 2015, 09:47:11

ido2323

hayırlı günler bu goto komutu için özel bir kullanım mı var acaba çünkü bir türlü alt programın içine "BASLAK" adında bir bir değişken yazıp goto BASLAK şeklinde çalıştıramıyorum sürekli hata veriyor. Ve hatayı sadece BASLAK için veriyor goto da sıkıntı yok (duplicate label or redefining the label...) aynı hata ne kadar değişken tanımlarsam artıyor artık çaresizce  goto $+5 ve ya goto $-9 şeklinde tanımlıyorum fakat aşşağıdaki kodda bunu yapamam mecbur değişken lazım.

ikinci sorumda şu; şimdi biz adres tanımlarken "BASLAK EQU 34H" şeklinde tanımlama yerine bu işi programa yaptırsak mesela şöyle bi kod var mı "EQU AUTO" bunun gibi birşey yazsakta program otomatik olarak en optimum adresi tanımlasa bu mümkün mü ya da böyle bi kod var mı?

cevir ; temel olarak 1 baytl?k veriyi sürekli olarak basamaklar?na ay?r?r biz 2 bayt? ay?raca??m?z için binler ve onbinlerde var.

CLRF   BIRLER
CLRF   ONLAR
CLRF   YUZLER
BASLA
       MOVLW  0x00
       SUBWF  NUM,F
       BTFSC  STATUS,Z
       GOTO BASLAK
       DECF   NUM,F
       INCF   BIRLER,F ;--------
       MOVLW  0x0A
       SUBWF  BIRLER,W
       BTFSS  STATUS,Z ;
       GOTO   BASLA
       CLRF   BIRLER
       INCF   ONLAR,F;---------
       MOVLW  0x0A
       SUBWF  ONLAR,W
       BTFSS  STATUS,Z
       GOTO   BASLA
       CLRF   ONLAR
       INCF   YUZLER,F;----------
       MOVLW  0x0A
       SUBWF  YUZLER,W
       BTFSS  STATUS,Z
       GOTO   BASLA
       CLRF   YUZLER
       INCF   BINLER,F ;--------
       MOVLW  0x0A
       SUBWF  BINLER,W
       BTFSS  STATUS,Z
       GOTO   BASLA
       CLRF   BINLER
       INCF   OBINLER,F ;--------
       GOTO   BASLA
BASLAK
return

Kabil ATICI

#1
Özellikle bu kopyala yapıştır ile çoğaltılan kodlamalarda sıkıntıdır. Eğer kod üzerinde özel bir yapı yoksa alt proagram mantığı ile çalışılabilir, yoksa kodu kopyaladığın alanda Label 'ları değiştirmen gerekir. Bu işin başka yolu bildiğim kadarı yok ($ ile kulllanılanlar hariç)

O yüzden kod büyükse kodu başka bir yere kopyalayıp, Label 'ları bul değiştir ile değiştirip ondan sonra programa yapıştırıyorum.

Etiket'de (Label) derleme esnasında derleyici tarafından atanan adrestir.
Eğer değişken ve adrese aynı ismi verirsen kafa iyice karışır. Onun için istiyorsan,
değişken için veri_basla

label için  label_basla veya adres_basla şeklinde kullanabilirsin.
değişken bulmakta sıkıntı çekiyorsan sonuna rakam ekle.Bu biraz karışıklığa yol açabilir,dikkatli olmak gerekir.

BASLAK EQU 34H
Kek1
kek2
...

şeklinde olabiliyordu. Bazen derleyiciler sıkıntı yapabiliyor. (derleyiciye göre değişiyor.)
ambar7

ido2323

http://s3.dosya.tc/server30/uu42QW/LM35.X.rar.html
müsayitsen bir  bak istersen hocam sadece orada hata var.

Kabil ATICI

#3
baslak diye bir değikenin var da ondan.
Değişken ve label aynı isimli olmaz. olmaması gerekir.
Değişkene goto yapamazsızsınz. Yaparsan gittiği adresten sonra ne olacak. O adreste program yok

BASLAK    equ 25h; 


basla   olarak
basla  ; analog cevrim baslar ve biter

bsf ADCON0,0 ; analog cevirim devrede
bsf ADCON0,1 ; analog cevrime baslar
muo
btfsc ADCON0,1; analog cevrim bittimi
goto muo
bcf ADCON0,0
return


ve de

cevir ; temel olarak 1 baytl?k veriyi sürekli olarak basamaklar?na ay?r?r biz 2 bayt? ay?raca??m?z için binler ve onbinlerde var.

CLRF   BIRLER
CLRF   ONLAR
CLRF   YUZLER
BASLA
       MOVLW  0x00
       SUBWF  NUM,F
       BTFSC  STATUS,Z
       GOTO BASLAK
       DECF   NUM,F
       INCF   BIRLER,F ;--------
       MOVLW  0x0A
       SUBWF  BIRLER,W
       BTFSS  STATUS,Z ;
       GOTO   BASLA
       CLRF   BIRLER
       INCF   ONLAR,F;---------
       MOVLW  0x0A
       SUBWF  ONLAR,W
       BTFSS  STATUS,Z
       GOTO  BASLA
       CLRF   ONLAR
       INCF   YUZLER,F;----------
       MOVLW  0x0A
       SUBWF  YUZLER,W
       BTFSS  STATUS,Z
       GOTO   BASLA
       CLRF   YUZLER
       INCF   BINLER,F ;--------
       MOVLW  0x0A
       SUBWF  BINLER,W
       BTFSS  STATUS,Z
       GOTO   BASLA
       CLRF   BINLER
       INCF   OBINLER,F ;--------
       GOTO   BASLA
BASLAK
return

var.


Hata veren şeyi bulamıyorsan kullandığın programda bul (find)  komutu var. Bu hata veren öğeyi yaz ve arat. Bu işin en kolayıdır. Derleyiciler aynı isimdeki büyük/küçük harfle yazılanı yazıları bazısı aynı, bazısı farklı kabul eder. Sen yinede bu tür şeylerden kaçınmaya çalış, hata bulması zor olabilir

Not; Gönderdiğin kodda derleyicinin başlangıç dosyaları olmuyor senin, her seferinde derleyici dosyalarını oluşturmam gerekiyor. O yüzden daha önceki sorunu cevaplamadım.
Derleyici başlangıç dosyası olmayacaksa bari hiç değilse sadece dosyanın kendisi olsun,çüplük gibi gönderme..
ambar7

ido2323

teşekkürler hocam sabah çay içmeden işe başlayınca böyle oluyor. Fark edemedim kusuruma bakma;
"Değişkene goto yapamazsınız. Yaparsan gittiği adresten sonra ne olacak. O adreste program yok"