2010-11-18 17 views
1

Başka şeylerin yanı sıra bir for döngüsü kullanmayı gerektiren bir program yazmaya çalışıyorum. Diğer web sitelerinde bunun gibi temel kod örneklerini bulmaya çalışmak için çok zamanım var.68k kurulumunda temel for döngüsü?

Eğer birisi bana basit bir döngü sunabilirse, ya da bakmam gereken talimatları bile kullanabilirim. Ve lütfen, 68k yeni başlayanlar için iyi bir kaynak biliyorsanız, aşağıya yorum yapın!

Teşekkürler!

+0

Bunun için 68000 işlemci ve derleyici (herhangi bir dil) var mı? –

+0

Easy68k (bir emülatör ve derleyici) kullanıyorum. – Blackbinary

cevap

5

[değiştir] bağlantısından

eklenti cevap

68000 sahiptir Sorgunuzun (google arama 3 sonuç '68000 montaj') için bir cevap here görün ayrı adres ve veri kayıtlarına sahip olan nadir (benzersiz?) karakteristik. Sekiz veri kaydı vardır, D0-D7 ve sekiz adres kaydı, A0-A7. A7 ayrıca yığın işaretçisidir, SP. Bu, 68000 derleme dilinin daha kolay izlenebileceği anlamına gelir, çünkü hangi yazmaçların veri tuttuğunu ve hangi adresleri tutacağını kolayca söyleyebilirsiniz. Örneğin, bu sözcüklerin bir dizi toplamını hesaplamak 68000 düzeneğidir:

moveq #0, d0 
    moveq #0, d1 
    moveq #5, d2 
loop: 
    move.w (a0)+, d0 
    add.l d0, d1 
    dbra d2, loop 

[/ değiştir] EASy68K yardımı belirtilen aşağıdaki gibidir

+0

Tüm sayfayı okudum (aslında daha önce de söyledim, dediğim gibi, biraz araştırma yaptım), özellikle hangi kısma başvurduğunuzu işaret edebilir misiniz? Teşekkürler. – Blackbinary

+1

68000 temel bilgilerinde, döngü: bölüm bir 'for' döngüsüdür. D2 kaydının setini atlarlar, ancak DBRA, Decrement BRAnch 0'a eşit değildir. Bu nedenle D2, 0 – KevinDTimm

+0

'a eşit olana dek azalır. Teşekkürler, şimdi aldım. – Blackbinary

0

, 68K döngü için bir söz dizimi

FOR[.size] op1 = op2 TO op3 [BY op4] DO[.extent] 
    code 
ENDF 

veya başka bir deyişle

FOR[.size] op1 = op2 DOWNTO op3 [BY op4] DO[.extent] 
    code 
ENDF 

:

for.size counter_location = starting_condition to ending_condition step_size 
    operations to be executed each loop 
end of for loop 

Step_size ve .size her ikisi de isteğe bağlıdır.

Pratikte bir örnek.
Aşağıdaki kod Aşağıdaki değişken büyük dc.b 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', bu döngü adres a2 tarafından işaret adres, a1 tarafından işaret 26 bayt hareket 0

lea uppercase, a1 ; points a1 at the start of the uppercase variable 
lea $002000, a2  ; points a2 at the start of the destination address 

for d1 = #1 to #26 do.s 
    move.b (a1)+, (a2)+ 
endf 

; Memory locations $002000 - $002019 now contain ABCDEFGHIJKLMNOPQRSTUVYWXYZ 

varsayar. Sayaç d1'de saklanacaktır. Döngü 1'de başlar (# 1, ondalık formda bir 'ham sayıyı gösterir), her seferinde artar ve 26'da biter. İlk satırın sonundaki do.s, ilerideki dalın boyutuyla ilgilidir. kullanın. Ayrıca isteğe bağlı, ancak EASy68K'de bir uyarı atar. Bu nedenle, şube koşulunu ayarlamanız gerekmiyorsa, aşağıdaki for döngüsü de çalışır. Bir öğretici ilgili

for d1 = #1 to #26 
    move.b (a1)+, (a2)+ 
endf 

, ben http://mrjester.hapisan.com/04_MC68/ öneriyoruz. Daha gelişmiş komutlar ve konuların bazılarıyla ilgilenmez, ancak temel/orta seviyedeki şeylerin iyi bir şekilde anlaşılmasını sağlar.

İlgili konular