folder Tahribat.com Forumları
linefolder Assembly - Reverse Engineering
linefolder 8086 - Robotun Mevcut Koordinatlarını Okuma



8086 - Robotun Mevcut Koordinatlarını Okuma

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    swalker
    swalker's avatar
    Kayıt Tarihi: 22/Mart/2012
    Erkek

    Merhaba; 

    8086 Programlama ile ilgili bir sorum var. Okulda bir ödev verdiler nasıl yapacağımı çözmeye çalışıyorum ama bir noktada kitlendim. Şimdi 6x9 luk bir matriks üstünde lamba ve duvarlar var çeşitli kareler üstünde. Robot random bir şekilde geziniyor bir engelle karşılaştığı zaman onun ne olduğunu algılayabiliyor. Robotun gezinmesi kısmını hallettim, engellerle karşılaştığı zaman yolunu değiştirmesini de çözdüm fakat engellerin koordinatlarını nasıl alabileceğimi bilmiyorum. Yani örnek olarak robot duvarla karşılaştı o duvarın satır ve sütün değerlerini nasıl alabilirim?

    0,0 noktasından başladığını varsayarak her hareket sonucunda x ve y yi increase ya da decrease edebilirim diye düşündüm. Ama onda da işin içinden çıkamadım. Çok karmaşık bir hal aldı. Çünkü atıyorum case ler iç içe artıyor ve dil assembly olunca ben de çok anlamayınca yapamadım. Başka bir yol bilen var mı?

    Bu arada kodu emu8086 ın içinde vb ile yazılmış robot.exe diye bir programda test ediyorum. Program 9 10 ve 11. porttan haberleşiyor assembly koduyla. 

    Yardımcı olabilecek biri varsa gerçekten çok makbule geçer.

    swalker tarafından 29/Ara/15 17:54 tarihinde düzenlenmiştir
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    uLtRaLoVeR
    uLtRaLoVeR's avatar
    Kayıt Tarihi: 25/Haziran/2007
    Erkek
    swalker bunu yazdı

    Merhaba; 

    8086 Programlama ile ilgili bir sorum var. Okulda bir ödev verdiler nasıl yapacağımı çözmeye çalışıyorum ama bir noktada kitlendim. Şimdi 6x9 luk bir matriks üstünde lamba ve duvarlar var çeşitli kareler üstünde. Robot random bir şekilde geziniyor bir engelle karşılaştığı zaman onun ne olduğunu algılayabiliyor. Robotun gezinmesi kısmını hallettim, engellerle karşılaştığı zaman yolunu değiştirmesini de çözdüm fakat engellerin koordinatlarını nasıl alabileceğimi bilmiyorum. Yani örnek olarak robot duvarla karşılaştı o duvarın satır ve sütün değerlerini nasıl alabilirim?

    0,0 noktasından başladığını varsayarak her hareket sonucunda x ve y yi increase ya da decrease edebilirim diye düşündüm. Ama onda da işin içinden çıkamadım. Çok karmaşık bir hal aldı. 

    Yardımcı olabilecek biri varsa gerçekten çok makbule geçer.

    Bence doğru düşünmüşsün.

     

             c
             |
             v

    r-> (0,0) (0,1) (0,2) (0,3) ...
           (1,0)
           (2,0)
              .
              .

    Şeklinde (r,c) şeklinde indislendiğini düşünürsek matrisin, sağa her adımda c değeri bir artacak, sola gidişinde azalacak. Aşağı giderken r değeri artacak, yukarı çıkarken azalacak.

    (0,0) da başlayıp 3 kez sağa 1 kez aşağı giderse, (1,3)'e gelecek.

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    swalker
    swalker's avatar
    Kayıt Tarihi: 22/Mart/2012
    Erkek

    Hocam dile hiç hakim değilim o yüzden saçmalıyor olabilirim ama şöyle bir sorun oldu o şekilde yaparken onu aşamadım.

    Mesela yönü +x e doğru. sola dön ilerle diye bir procedure yazdık, orada y artacak. ama mesela 5 hamle sonra yönü -x e doğruyken sola dön ilerle procedure unu çağırdığımızda x artacak. Orada karışıyor işler benim için. Bir de bilginiz varsa, ben bu değerleri nerede tutabilirim. Yani bana 3 tane değişken olsa çözerim gibi bu şekilde. birincisi x değerini ikincisi y değerini 3. su de burnumun nereye baktığını tutsa 3. değere göre switch etsem farklı procedure ları çağırsam olur gibi. Ama kodda sadece bh bl boşta geri kalan tüm değerler kullanılıyor. Onu nasıl yapabilirim? Arrayle olur mu?

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    uLtRaLoVeR
    uLtRaLoVeR's avatar
    Kayıt Tarihi: 25/Haziran/2007
    Erkek
    swalker bunu yazdı

    Hocam dile hiç hakim değilim o yüzden saçmalıyor olabilirim ama şöyle bir sorun oldu o şekilde yaparken onu aşamadım.

    Mesela yönü +x e doğru. sola dön ilerle diye bir procedure yazdık, orada y artacak. ama mesela 5 hamle sonra yönü -x e doğruyken sola dön ilerle procedure unu çağırdığımızda x artacak. Orada karışıyor işler benim için. Bir de bilginiz varsa, ben bu değerleri nerede tutabilirim. Yani bana 3 tane değişken olsa çözerim gibi bu şekilde. birincisi x değerini ikincisi y değerini 3. su de burnumun nereye baktığını tutsa 3. değere göre switch etsem farklı procedure ları çağırsam olur gibi. Ama kodda sadece bh bl boşta geri kalan tüm değerler kullanılıyor. Onu nasıl yapabilirim? Arrayle olur mu?

    8086 hakkında hiç bir fikrim yok ben algoritmayı anlatmaya çalıştım.

    3 değişken yeterli gibi geliyor. Konumu ve yönü. Sonrasında yeni konumu hesaplarken dediğin gibi yöne göre hareket edeceksin. Anlattıklarından anladığım 3 operasyon var: ileri git, sola dön, sağa dön. Dönme işlemi yerinde oluyorsa yalnızca ileri git konum değiştirecek. O da yönü hangi eksene bakıyorsa o şekilde. +x'e bakıyorsa x artacak, -y'ye bakıyorsa y azalacak.

    Bir de verdiğin örnekte anlamadığım 2 yer var.
    1) +x'e bakarken sola dönersem +y'ye bakarım ve ilerlersem y artar. Ama 5 hamle sonra yönü neden -x oluyor? Arada başka hamleler mi yapıyor -x'e dönecek şekilde?
    2) -x'e bakarken sola dönersem -y'ye bakarım ilerlersem y azalır. Neden x artacak dedin ki?

     

     

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    swalker
    swalker's avatar
    Kayıt Tarihi: 22/Mart/2012
    Erkek

    Ben o kafayla yanlış düşünmüşüm hocam. Dediğiniz gibi olacak, bitirdim ben de kodu. Buraya yazayım, ileride karşılaşan olursa, aratırsa faydalansın.

    Bunları yaparken 0,0 noktasından +x yönüne bakarak hareket ettiğini varsayıyoruz.

    Bir tane array  tanımladım. 0. eleman x koordinatını, 1. eleman y koordinatını 2. eleman da burnunun yönünü tutacak. Bir engelle karşılaştığı zaman random turn adında bir procedure çağıracak. O procedure sonunda, dönüş yönüne göre array'ın 2. elemanının değerini değiştireceğiz. 

    Daha sonra ileri hareket edeceği procedure un içinde önce 2. elemanı karşılaştıracağız. Onun değerine göre hareket komutunu verdikten sonra arrayın 0. ve 1. değerlerini değiştireceğiz.

    Bir engelle karşılaştığı zaman da yine burnunun yönüne göre x ve y koordinatının +-1 değerini alarak başka bir arrayın içinde store edeceğiz.  

Toplam Hit: 1994 Toplam Mesaj: 5
assembly robot intel x86 port 8086 control