Elbette durum her seferinde kontrol edilir. Ancak kontrol edildiğinde CPU boru hattına çok uzak. Bu arada, diğer talimatlar boru hattına da girmiştir ve çeşitli uygulama aşamalarındadır.
Genellikle, bir koşulu derhal ardından koşul TRUE olarak değerlendirilirse dallanan veya koşul FALSE olarak değerlendirilirse düştüğü koşullu bir dallanma talimatı izlenir. Bu, koşulun DOĞRU veya YANLIŞ olarak değerlendirilip değerlendirilmediğine bağlı olarak, koşul talimatı ve dal talimatından sonra boru hattına yüklenebilecek iki farklı talimat akışı olduğu anlamına gelir. Ne yazık ki, koşul talimatını ve dal talimatını yükledikten hemen sonra CPU, koşulun ne için değerlendirileceğini henüz bilmiyor, ancak yine de boru hattına malzeme yüklemeye devam etmesi gerekiyor. Bu nedenle, koşulun neye göre değerlendirileceğine dair bir tahmine dayanarak iki talimat setinden birini seçer.
Daha sonra, durum talimatı boru hattında ilerlerken, değerlendirilme zamanı gelmiştir. O zaman, CPU tahmininin doğru mu yanlış mı olduğunu anlar.
Tahmin doğru çıktığında, şube doğru yere gitti ve doğru talimatlar boru hattına yüklendi. Tahminin yanlış olduğu ortaya çıkarsa, koşullu branş talimatından sonra boru hattına yüklenen tüm talimatlar yanlıştı, atılmaları gerekir ve talimatların alınması doğru yerden tekrar başlamalıdır.
düzeltme
StarWeaver'ın yorumuna cevaben, tek bir komut uygulamak için CPU'nun ne yapması gerektiğine dair bir fikir vermek için:
MOV AX,[SI+10]
İnsanların naif bir şekilde "SI plus 10 kelimesiyle AX yükleyin" olarak düşündüğümüz kadar basit bir şey düşünün . Kabaca, CPU'nun yapması gerekenler:
- PC içeriğini ("program sayaç yazıcısı") adres veriyoluna gönderir;
- opbus veri kodundan talimat kodunu oku;
- artım PC;
- onunla ne yapılacağını anlamak için opcode kodunu çözmek
- PC içeriğini adres veriyoluna yayar;
- komut işlecini (bu durumda 10) veri yolundan okuyun;
- artım PC;
- operand ve SI değerini toplayıcıya besleyin;
- toplayıcı sonucunu adres veriyoluna gönderir;
- veri yolundan AX'ı okuyun.
Bu bir kuyruklu 10 adımdır. Bu adımlardan bazıları boru hattı olmayan CPU'larda bile optimize edilebilecektir, örneğin CPU hemen hemen her zaman bir sonraki adıma paralel olarak PC'yi artıracaktır; bu, PC'nin çok özel bir kayıt olduğu için yapılması kolay bir şeydir. hiçbir zaman başka bir iş için kullanılmadığı için, bu özel kayıt defterine erişim için CPU'nun farklı bölümleri arasında çekişme olasılığı yoktur. Ancak yine de, bu kadar basit bir talimat için 8 adım kaldı, ve CPU adına zaten bir dereceye kadar karmaşıklığa sahip olduğumu farz ediyorum, mesela, örneğin, CPU için ilave bir adım atmaya gerek olmayacağını tahmin ediyorum. Toplayıcı, sonuçtan okunmadan önce eklemeyi gerçekten gerçekleştirecek,
Şimdi, sonuçlarını hesaplamak için aslında CPU içinde döngüler yapan daha karmaşık adresleme modları, MOV AX, [DX+SI*4+10]
hatta hatta çok daha karmaşık talimatlar olduğunu düşünün MUL AX, operand
.
Yani, buradaki amacım, "atomik seviye" metaforunun CPU komut seviyesi için uygun olmaktan uzak olduğu. Gerçek mantık geçidi seviyesine çok fazla inmek istemiyorsanız, boru hattı adım seviyesi için uygun olabilir.