Assembler Dili Programlama

oy
0

Ben pozitif bir sayı 10'dan az girer ve birinci sayının toplamını çıktılar bir program yazmaya çalışıyorum. Örnek 5 + 4 + 2 + 3 + 1 5 olur. değil 0. Burada kimse bana yardımcı olabilir eğer komutları Durdur, Yük, Mağaza, ekleme, Sum, çarpın, bölün, Giriş, Çıkış, Şubesi, Şube 0 eğer, ve şube bulunmaktadır. Ben biraz şaşırıp. iyi ne yazdım geçerli:

      IN    n
      LD    n
      ADD   sum
      STO   sum
      LD    n
      SUB   one
      ADD   sum
      STO   sum
      BRGT  haw
      LD    n
      BR    done
haw:  OUT   sum
done: STOP
      DC    n   4
      DC    sum 0
      DC    one 1  

Gelirken çalışma gördüğüm kadarıyla bazı n sayısını yüklemek ve 0 bir miktar ekleyin ve sonra n + toplamı olarak bu miktar saklamak olduğunu. Sonra yüklemek n tekrar 1 çıkarın ve yeni toplamı olarak o saklayın. Ama n bunu nasıl Yani 0'a ulaştığında bu kadar tekrarlamanız gerekir?

Tamam bu yüzden yapmanız gereken ben bunu düşünüyorum 0. değilse 0 eğer şube ve şube kullanmalısınız? yani:

     IN    n
     LD    n
     ADD   sum
     STO   sum  
     BR    CAW
CAW: LD    n  
     SUB   ONE  
     STO   n
     BRGT  HAW
     BZ    TAW
HAW: ADD   SUM  
     STO   SUM  
     BR    CAW  
TAW: OUT   SUM
     DC    SUM 0
     DC    ONE 1

DC = Sabit Belirlenmiş değil sıfır BRGT ve şube ise sıfır BZ ve şube, LD yük BR ise n 0. Şube ulaşıncaya kadar ne tekrarlamanız gerekir teker da çıkarmak ve toplamı ekleyerek olduğunu. Ben tekrarlamanız gerekir biliyorum ama birleştirici dili bunu nasıl bilmiyorum.

Oluştur 08/01/2010 saat 04:46
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
5

Bu ödev gibi geliyor beri, bazı parçaları ile başlayacağız.

  1. Henüz bu sorunun mantığı dışarı çalıştınız mı? "Takılıp Kind" Bu yapılması gereken ne hiçbir fikrim yok, yoksa mevcut talimatlara nasıl uygulanacağı konusu emin değiliz anlamına gelebilir. Eğer mantık dışarı işe yaramadıysa, bu düşünün - nasıl bunları birlikte nasıl eklerim, terimler ile gelip yoksa ve sonuçları ile ne yaparsınız?

  2. Eğer mantık dışarı çalıştı, sonra hangi her bölümü gerçekleştirecek komutları?

Eğer varsa daha spesifik sorular güncellemek için çekinmeyin cevap veririz, ama genelde SO politika sadece (mümkünse?) ödev soruları için kod yazmak yerine rehberlik sunmaktır.

Düzenleme : Tamam harika, bazı kod var ve sen orada henüz doğru yoldayız ama gibi görünüyor. Size sormak istiyorum ilk şey kağıt üzerinde kod çalıştırmak için çalıştık olup olmadığıdır. Keyfi bir girişi seçin (diyelim ki 5, senin örnekte olduğu gibi) ve program gerçekleştiren mantık 1. adımda Şu anda programın inanmak ile geldi mantığını takip olmadığını görmek için bir seferde kod gelen bir talimatla adım adım yazıldığı gibi çalışmaz; öğrenebilirsiniz görmek niçin ve sana bir ipucu vereyim değilse.

Düzenleme 2 : müthiş, zaten cevabı var ve sadece bu kodu gerektirecek kadar yakınsın. Sen hangi n 0 olup olmadığına bağlı olarak iki kola birini alsın komutu, çalışmıyorsun Yani 0'a ulaşana kadar tekrarlamak istediğini söyledi

3 düzenleyin : Eğer 0 / şube, ama senin son kod bulunanların herhangi görmüyorum değil 0 eğer dal almaya gerek olduğunu varsayarak içinde doğrudur. Bir şey mi kaçırdım? Ayrıca, DC bu durumda ne işe yarar? Tam olarak kullandığınız hangi talimatları biliyorum böylece bir tuşa postalıyorsanız yararlı olabilir. Daha önce de dediğim gibi, elle programınızı yürütme deneyin - böcek nerede olduğunu size gösterecektir. Sana olan ipucu şu an ihtiyacı da kod bölümünün tekrar tekrar yürütülecek belirlemek ve aslında tekrar tekrar idam eğer bulmaktır.

Cevap 08/01/2010 saat 04:50
kaynak kullanıcı

oy
2

İlk üst düzey bir sözde kodu sorunu yazmayı deneyin.

Ardından montaj dile çevirmek.

Burada montaj dilinde programlama yardım bulabilirsiniz

http://www.laynetworks.com/assembly%20tutorials.htm

Bir okul ödevi gibi bu koku, bu yüzden o olacak sizin için yeterli olması gerektiğini düşünüyorum.

Cevap 08/01/2010 saat 04:51
kaynak kullanıcı

oy
0

C düşün (biliyorsanız varsayarak)

int sumnumbers(int input)
{
    int output = 0;

    input = max(input, 10);

    switch (input)
    {
        case 5:
            output += 5;
        case 4:
            output += 4;
        case 3:
            output += 3;
        case 2:
            output += 2;
        case 1:
            output += 1;
        case 0:
            output += 0;
            break;
    }

    return input;
}

(0'th durumda hariç) mola tabloların eksikliği not edin.

Bu yardımcı olur mu?

Cevap 10/01/2010 saat 21:51
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more