Bölüm 6: Montaj Diliyle Modern Bilgisayar Mimarisinin Temelleri

Bolum 6 Montaj Diliyle Modern Bilgisayar Mimarisinin Temelleri



6.1 Giriş

Modern genel amaçlı bilgisayarlar iki türdür: CISC ve RISC. CISC, Karmaşık Komut Seti Bilgisayarı anlamına gelir. RISK, Azaltılmış Komut Seti Bilgisayarı anlamına gelir. Commodore-64 bilgisayarına uygun olarak 6502 veya 6510 mikroişlemciler, CISC mimarisinden çok RISC mimarisine benzer.

RISC bilgisayarları genellikle CISC bilgisayarlarına kıyasla daha kısa montaj dili talimatlarına (bayt sayısına göre) sahiptir.







Not : CISC, RISC veya eski bilgisayarla ilgili olsun, bir çevre birimi dahili bir bağlantı noktasından başlar ve bilgisayarın sistem biriminin (ana birim) dikey yüzeyindeki harici bir bağlantı noktasından dışarı ve harici aygıta doğru gider.



Bir CISC bilgisayarının tipik bir talimatı, birkaç kısa montaj dili talimatının, sonuçta ortaya çıkan talimatı karmaşık hale getiren daha uzun bir montaj dili talimatında birleştirilmesi gibi görülebilir. Özellikle, bir CISC bilgisayarı işlenenleri bellekten mikroişlemci yazmaçlarına yükler, bir işlem gerçekleştirir ve ardından sonucu tek bir talimatla tekrar belleğe kaydeder. Öte yandan, bu RISC bilgisayarı için en az üç talimattır (kısa).



İki popüler CISC bilgisayar serisi vardır: Intel mikroişlemcili bilgisayarlar ve AMD mikroişlemcili bilgisayarlar. AMD, Gelişmiş Mikro Cihazlar anlamına gelir; yarı iletken üretim şirketidir. Intel mikroişlemci serileri, gelişim sırasına göre 8086, 8088, 80186, 80286, 80386, 80486, Pentium, Core, i Serisi, Celeron ve Xeon'dur. 8086 ve 8088 gibi eski Intel mikroişlemcilerinin montaj dili talimatları çok karmaşık değildir. Ancak yeni mikroişlemciler için bunlar karmaşıktır. CISC serisi için en yeni AMD mikroişlemcileri Ryzen, Opteron, Athlon, Turion, Phenom ve Sempron'dur. Intel ve AMD mikroişlemcileri x86 mikroişlemcileri olarak bilinir.





ARM, Gelişmiş RISC Makinesi anlamına gelir. ARM mimarileri, çok çeşitli uygulamalarda kullanıma uygun bir RISC işlemci ailesini tanımlar. Masaüstü Kişisel Bilgisayarlarda birçok Intel ve AMD mikroişlemci kullanılırken, birçok ARM işlemci, otomotiv kilitlenme önleyici frenler gibi güvenlik açısından kritik sistemlerde gömülü işlemciler olarak ve akıllı saatler, taşınabilir telefonlar, tabletler ve dizüstü bilgisayarlarda genel amaçlı işlemciler olarak hizmet vermektedir. . Küçük ve büyük cihazlarda her iki mikroişlemci türü de görülebilmesine rağmen, RISC mikroişlemcileri büyük cihazlara göre küçük cihazlarda daha fazla bulunur.

Bilgisayar Kelimesi
Bir bilgisayarın 32 bitlik bilgisayar olduğu söylenirse, bu, bilgilerin anakartın iç kısmında otuz iki bitlik ikili kodlar halinde saklandığı, aktarıldığı ve değiştirildiği anlamına gelir. Bu aynı zamanda bilgisayarın mikroişlemcisindeki genel amaçlı yazmaçların 32 bit genişliğinde olduğu anlamına da gelir. 6502 mikroişlemcinin A, X ve Y kayıtları genel amaçlı kayıtlardır. Bunlar sekiz bit genişliğindedir ve dolayısıyla Commodore-64 bilgisayarı sekiz bitlik bir kelime bilgisayarıdır.



Bazı Kelime Bilgisi
X86 Bilgisayarlar

X86 bilgisayarlar için byte, word, doubleword, quadword ve double-quadword anlamları aşağıdaki gibidir:

  • Bayt : 8 bit
  • Kelime : 16 bit
  • Çift kelime : 32 bit
  • Dört kelime : 64 bit
  • Çift dörtlü kelime : 128 bit

ARM Bilgisayarları
ARM bilgisayarlar için byte, halfword, word ve doubleword’ün anlamları aşağıdaki gibidir:

  • Bayt : 8 bit
  • Yarım ol : 16 bit
  • Kelime : 32 bit
  • Çift kelime : 64 bit

X86 ve ARM adlarının (ve değerlerinin) farklılıkları ve benzerliklerine dikkat edilmelidir.

Not : Her iki bilgisayar türünde de işaret tamsayıları ikinin tümleyenidir.

Bellek Konumu
Commodore-64 bilgisayarında, bir bellek konumu genellikle bir bayttır ancak işaretçiler dikkate alındığında ara sıra iki ardışık bayt da olabilir (dolaylı adresleme). Modern bir x86 bilgisayarda, 16 baytlık (128 bit) bir çift dörtlü sözcükle uğraşırken bellek konumu 16 ardışık bayt, 8 baytlık (64 bit) dörtlü sözcükle uğraşırken 8 ardışık bayt, çift sözcükle (64 bit) uğraşırken 4 ardışık bayttır. 4 bayt (32 bit), 2 baytlık (16 bit) bir sözcükle uğraşırken 2 ardışık bayt ve bir baytla (8 bit) uğraşırken 1 bayt. Modern bir ARM bilgisayarında, bellek konumu 8 baytlık (64 bit) bir çift sözcükle uğraşırken 8 ardışık bayt, 4 baytlık (32 bit) bir sözcükle uğraşırken 4 ardışık bayt, yarım sözcükle uğraşırken 2 ardışık bayttır. 2 bayt (16 bit) ve bir bayt (8 bit) ile uğraşırken 1 bayt.

Bu bölümde CISC ve RISC mimarilerinde nelerin ortak olduğu ve farklılıklarının neler olduğu açıklanmaktadır. Bu, uygun olduğu yerlerde 6502 µP ve Commodore-64 bilgisayarıyla karşılaştırılarak yapılır.

6.2 Modern PC'nin Anakart Blok Şeması

PC, Kişisel Bilgisayar anlamına gelir. Aşağıda, kişisel bir bilgisayar için tek bir mikroişlemciye sahip modern bir anakartın genel temel blok şeması yer almaktadır. Bir CISC veya RISC anakartını temsil eder.


Şekil 6.21 Modern PC'nin Temel Anakart Blok Şeması

Diyagramda üç dahili bağlantı noktası gösterilmektedir, ancak pratikte daha fazlası vardır. Her portun, portun kendisi olarak görülebilecek bir kaydı vardır. Her port devresinde 'durum kaydı' olarak adlandırılabilecek en az başka bir kayıt bulunur. Durum kaydı, mikroişlemciye kesme sinyali gönderen programın bağlantı noktasını gösterir. Farklı bağlantı noktalarından gelen farklı kesme hatları arasında ayrım yapan ve µP'ye yalnızca birkaç hat içeren bir kesme kontrol devresi (gösterilmemiştir) vardır.

Diyagramdaki HD.C, Sabit Sürücü Kartı anlamına gelir. NIC, Ağ Arayüz Kartı anlamına gelir. Sabit sürücü kartı (devre), modern bilgisayarın ana biriminin (sistem birimi) içindeki sabit sürücüye bağlanır. Ağ arayüz kartı (devre) harici bir kablo aracılığıyla başka bir bilgisayara bağlanır. Diyagramda, sabit disk kartına ve/veya ağ arayüz kartına bağlanan bir bağlantı noktası ve bir DMA (aşağıdaki çizime bakın) bulunmaktadır. DMA, Doğrudan Bellek Erişimi anlamına gelir.

Commodore-64 bilgisayar bölümünden, baytları bellekten disk sürücüsüne veya başka bir bilgisayara göndermek için, her baytın ilgili dahili bağlantı noktasına kopyalanmadan önce mikroişlemcideki bir kayda kopyalanması ve ardından otomatik olarak kopyalanması gerektiğini unutmayın. cihaza. Baytları disk sürücüsünden veya başka bir bilgisayardan belleğe almak için, her baytın belleğe kopyalanmadan önce ilgili dahili bağlantı noktası kaydından bir mikroişlemci kaydına kopyalanması gerekir. Akıştaki bayt sayısı büyükse bu normalde uzun sürer. Hızlı aktarımın çözümü mikroişlemciden geçmeden Doğrudan Bellek Erişimi (devre) kullanılmasıdır.

DMA devresi bağlantı noktası ile HD arasındadır. C veya NIC. DMA devresinin doğrudan bellek erişimiyle, büyük bayt akışlarının aktarımı, mikroişlemcinin sürekli katılımı olmadan doğrudan DMA devresi ile bellek (RAM) arasındadır. DMA µP yerine adres veriyolunu ve veri yolunu kullanır. Transferin toplam süresi µP hard'ın kullanılmasına göre daha kısadır. Hem HD C. hem de NIC, RAM (bellek) ile aktarım için büyük bir veri akışına (bayt) sahip olduklarında DMA'yı kullanır.

GPU, Grafik İşlem Birimi anlamına gelir. Anakart üzerindeki bu blok, metinlerin ve hareketli ya da hareketsiz görüntülerin ekrana gönderilmesinden sorumludur.

Modern bilgisayarlarda (PC'ler), Salt Okunur Bellek (ROM) yoktur. Ancak bir tür kalıcı RAM olan BIOS veya UEFI vardır. BIOS'taki bilgiler aslında bir pil tarafından korunur. Pil aslında saat zamanlayıcının bilgisayar için doğru saat ve tarihte kalmasını sağlayan şeydir. UEFI, BIOS'tan sonra icat edildi ve BIOS'un yerini aldı, ancak BIOS hala modern bilgisayarlarla oldukça alakalı. Bunları daha sonra tartışacağız!

Modern PC'lerde µP ile dahili port devreleri (ve bellek) arasındaki adres ve veri yolları paralel veri yolları değildir. Bir yönde iletim için iki iletkene ve ters yönde iletim için başka iki iletkene ihtiyaç duyan seri veri yollarıdır. Bu, örneğin 32 bitin her iki yönde de seri olarak (bir bit ardına) gönderilebileceği anlamına gelir.

Seri iletim yalnızca tek yönde, iki iletkenle (iki hat) yapılıyorsa buna yarı çift yönlü denir. Seri iletim her iki yönde de dört iletkenle, her iki yönde bir çift ise buna tam çift yönlü denir.

Modern bilgisayarın tüm belleği hala bir dizi bayt konumundan oluşur: bayt başına sekiz bit. Modern bir bilgisayarın en az 4 giga baytlık bir bellek alanı vardır = 4 x 210 x 2 10 x 2 10 = 4x1.073.741.824 10 bayt = 4 x 1024 10/alt> x 1024 10 x 1024 10 = 4x1.073.741.824 10 .

Not : Önceki anakartta zamanlayıcı devresi gösterilmese de tüm modern anakartlarda zamanlayıcı devreleri bulunmaktadır.

6.3 x64 Bilgisayar Mimarisinin Temelleri

6.31 x64 Kayıt Seti
X86 serisi mikroişlemcilerin 64 bitlik mikroişlemcisi, 64 bitlik bir mikroişlemcidir. Aynı serinin 32 bit işlemcisini değiştirmek oldukça modern. 64 bit mikroişlemcinin genel amaçlı yazmaçları ve adları aşağıdaki gibidir:


Şekil 6.31 x64 için Genel Amaçlı Kayıtlar

Verilen şekilde on altı (16) genel amaçlı kayıt gösterilmektedir. Bu kayıtların her biri 64 bit genişliğindedir. Sol üst köşedeki kayıt defterine bakıldığında 64 bit RAX olarak tanımlanır. Bu aynı kaydın ilk 32 biti (sağdan) EAX olarak tanımlanır. Bu aynı kaydın ilk 16 biti (sağdan) AX olarak tanımlanır. Aynı kaydın ikinci baytı (sağdan) AH (burada H yüksek anlamına gelir) olarak tanımlanır. Ve (aynı kaydın) ilk baytı AL olarak tanımlanır (L burada düşük anlamına gelir). Sağ alt köşedeki kayıt defterine bakıldığında 64 bit R15 olarak tanımlanır. Aynı kaydın ilk 32 biti R15D olarak tanımlanır. Aynı kaydın ilk 16 biti R15W olarak tanımlanır. Ve ilk bayt R15B olarak tanımlanır. Diğer kayıtların (ve alt kayıtların) adları da benzer şekilde açıklanmaktadır.

Intel ve AMD µP'ler arasında bazı farklılıklar vardır. Bu bölümdeki bilgiler Intel içindir.

6502 µP ile yürütülecek bir sonraki talimatı tutan Program Sayacı kaydı (doğrudan erişilemez) 16 bit genişliğindedir. Burada (x64), program sayacına Talimat İşaretçisi adı verilir ve 64 bit genişliğindedir. RIP olarak etiketlenmiştir. Bu, x64 µP'nin 264 = 1,844674407 x 1019 (aslında 18,446,744,073,709,551,616) bellek bayt konumuna kadar adresleyebileceği anlamına gelir. RIP genel amaçlı bir kayıt değildir.

Yığın İşaretçisi Kaydı veya RSP, 16 genel amaçlı kayıt arasında yer alır. Bellekteki son yığın girişini gösterir. 6502 µP'de olduğu gibi x64 yığını aşağı doğru büyür. X64 ile RAM'deki yığın, altprogramların dönüş adreslerini depolamak için kullanılır. Aynı zamanda “gölge alanını” depolamak için de kullanılır (aşağıdaki tartışmaya bakınız).

6502 µP, 8 bitlik bir işlemci durum kaydına sahiptir. X64'teki eşdeğerine RFLAGS kaydı denir. Bu kayıt, işlemlerin sonuçları ve işlemciyi (μP) kontrol etmek için kullanılan bayrakları saklar. 64 bit genişliğindedir. Daha yüksek olan 32 bit ayrılmıştır ve şu anda kullanılmamaktadır. Aşağıdaki tabloda RFLAGS kaydında yaygın olarak kullanılan bitlerin adları, dizinleri ve anlamları verilmektedir:

Tablo 6.31.1
En çok kullanılan RFLAGS Bayrakları (Bitler)
Sembol Biraz İsim Amaç
CF 0 Taşımak Bir aritmetik işlemin, sonucun en anlamlı bitinden bir elde etme veya ödünç alma oluşturup oluşturmadığı ayarlanır; aksi takdirde temizlenir. Bu bayrak işaretsiz tamsayı aritmetiği için taşma durumunu belirtir. Çok duyarlıklı aritmetikte de kullanılır.
PF 2 Parite Sonucun en az anlamlı baytı çift sayıda 1 bit içeriyorsa ayarlanır; aksi takdirde temizlenir.
İLE İLGİLİ 4 Ayarlamak Bir aritmetik işlemin sonucun 3. bitinden bir elde etme veya ödünç alma oluşturup oluşturmadığı ayarlanır; aksi takdirde temizlenir. Bu bayrak ikili kodlu ondalık (BCD) aritmetikte kullanılır.
ZF 6 Sıfır Sonuç sıfır ise ayarlanır; aksi takdirde temizlenir.
SF 7 İmza İşaretli bir tamsayının işaret biti olan sonucun en anlamlı bitine eşitse ayarlanır (0, pozitif bir değeri ve 1, negatif bir değeri belirtir).
İLE İLGİLİ on bir Taşma Tamsayı sonucunun, hedef işlenene sığmayacak kadar büyük bir pozitif sayı veya çok küçük bir negatif sayı (işaret biti hariç) olması durumunda ayarlanır; aksi takdirde temizlenir. Bu bayrak, işaretli tamsayı (ikinin tamamlayıcısı) aritmetiği için bir taşma koşulunu belirtir.
DF 10 Yön Yön dizisi talimatlarının çalışıp çalışmadığı (arttırma veya azaltma) ayarlanır.
İD yirmi bir Tanılama Değiştirilebilirliğin CPUID komutunun varlığını göstermesi durumunda ayarlanır.

Daha önce belirtilen on sekiz adet 64 bitlik kayda ek olarak, x64 mimarisi µP, kayan nokta aritmetiği için sekiz adet 80 bitlik geniş kayda sahiptir. Bu sekiz kayıt aynı zamanda MMX kayıtları olarak da kullanılabilir (aşağıdaki açıklamaya bakın). XMM için ayrıca on altı adet 128 bitlik kayıt vardır (aşağıdaki açıklamaya bakın).

Bu sadece kayıtlarla ilgili değil. Segment kayıtları (çoğunlukla x64'te kullanılmayan), kontrol kayıtları, bellek yönetimi kayıtları, hata ayıklama kayıtları, sanallaştırma kayıtları, her türlü dahili parametreyi (önbellek isabetleri/kaçırmaları, yürütülen mikro işlemler, zamanlama) izleyen performans kayıtları olan daha fazla x64 kaydı vardır. , ve daha fazlası).

SIMD

SIMD, Tek Komutlu Çoklu Veri anlamına gelir. Bu, bir montaj dili talimatının, bir mikroişlemcide aynı anda birden fazla veri üzerinde işlem yapabileceği anlamına gelir. Aşağıdaki tabloyu göz önünde bulundurun:

1 2 3 4 5 6 7 8
+ 9 10 on bir 12 13 14 on beş 16
= 10 12 14 16 18 yirmi 22 24

Bu tabloda, sekiz cevap verecek şekilde sekiz çift sayı paralel olarak (aynı sürede) eklenir. Bir montaj dili talimatı, MMX kayıtlarındaki sekiz paralel tamsayı toplama işlemini gerçekleştirebilir. Benzer bir şey XMM kayıtları için de yapılabilir. Yani, tamsayılar için MMX talimatları ve kayan sayılar için XMM talimatları vardır.

6.32 Bellek Haritası ve x64

Komut İşaretçisinin (Program Sayacı) 64 bit olması, 264 = 1.844674407 x 1019 bellek bayt konumunun adreslenebileceği anlamına gelir. Onaltılı sistemde en yüksek bayt konumu FFFF,FFFF,FFFF,FFFF16'dır. Bugün hiçbir sıradan bilgisayar bu kadar geniş bir bellek (tam) alanı sağlayamaz. Yani x64 bilgisayarı için uygun bir hafıza haritası aşağıdaki gibidir:

0000,8000,0000,000016 ile FFFF,7FFF,FFFF,FFFF16 arasındaki boşluğun bellek konumu olmadığına (bellek RAM bankası yok) dikkat edin. Bu oldukça büyük bir FFFF,0000,0000,000116 farkıdır. Kanonik yüksek yarıda işletim sistemi bulunurken, kanonik düşük yarıda kullanıcı programları (uygulamalar) ve veriler bulunur. İşletim sistemi iki bölümden oluşur: küçük bir UEFI (BIOS) ve sabit sürücüden yüklenen büyük bir bölüm. Bir sonraki bölümde modern işletim sistemleri hakkında daha fazla bilgi verilmektedir. Bu bellek haritası ile Commodore-64 için 64KB'nin çok fazla bellek gibi görünebileceği benzerliğe dikkat edin.

Bu bağlamda işletim sistemine kabaca “çekirdek” adı verilmektedir. Çekirdek, Commodore-64 bilgisayarının Kernal'ına benzer, ancak çok daha fazla alt programa sahiptir.

X64'ün endianlığı küçük endian'dır; bu, bir konum için daha düşük adresin, bellekteki daha düşük içerik baytına işaret ettiği anlamına gelir.

6.33 x64 için Assembly Dili Adresleme Modları

Adresleme modları, bir talimatın µP kayıtlarına ve belleğe (dahili port kayıtları dahil) erişebilmesinin yollarıdır. x64'ün birçok adresleme modu vardır, ancak burada yalnızca yaygın olarak kullanılan adresleme modları ele alınmaktadır. Buradaki bir talimatın genel sözdizimi şöyledir:

işlem kodu hedefi, kaynak

Ondalık sayılar herhangi bir önek veya sonek olmadan yazılır. 6502 ile kaynak örtülüdür. X64'ün 6502'den daha fazla işlem kodu vardır, ancak bazı işlem kodlarının anımsatıcıları aynıdır. Bireysel x64 talimatları değişken uzunluktadır ve boyutları 1 ila 15 bayt arasında değişebilir. Yaygın olarak kullanılan adresleme modları aşağıdaki gibidir:

Anında Adresleme Modu
Burada kaynak işleneni bir adres veya etiket değil, gerçek bir değerdir. Örnek (yorumu okuyun):

EAX EKLE, 14; 64 bit RAX'ın 14 ila 32 bit EAX'ını ondalık sayıyla ekleyin, yanıt EAX'te (hedef) kalır

Adresleme Moduna Kayıt Olmak için Kayıt Olun
Örnek:

R8B, AL EKLE; 64 bit R8'in R8B'sine RAX'in 8 bit AL'sini ekleyin - yanıtlar R8B'de (hedef) kalır

Dolaylı ve İndekslenmiş Adresleme Modu
6502 µP ile dolaylı adresleme, talimatta verilen adresin konumunun son konumun etkin adresine (işaretçisine) sahip olduğu anlamına gelir. Benzer bir şey x64'te de olur. 6502 µP ile indeks adresleme, µP kaydının içeriğinin, etkin adrese sahip olmak için talimatta verilen adrese eklendiği anlamına gelir. Benzer bir şey x64'te de oluyor. Ayrıca x64 ile kaydın içeriği verilen adrese eklenmeden önce 1 veya 2 veya 4 veya 8 ile çarpılabilir. X64'ün mov (kopyala) talimatı hem dolaylı hem de indekslenmiş adreslemeyi birleştirebilir. Örnek:

MOV R8W, 1234[8*RAX+RCX] ; kelimeyi adrese taşı (8 x RAX + RCX) + 1234

Burada R8W, R8'in ilk 16 bitine sahiptir. Verilen adres 1234'tür. RAX kaydı 8 ile çarpılmış 64 bitlik bir sayıya sahiptir. Sonuç, 64 bitlik RCX kaydının içeriğine eklenir. Bu ikinci sonuç, etkin adresi elde etmek için verilen 1234 adresine eklenir. Etkin adresin konumundaki sayı, R8 kaydının ilk 16 bitlik yerine (R8W) taşınır (kopyalanır), orada ne varsa değiştirilir. Köşeli parantezlerin kullanımına dikkat edin. X64'teki bir kelimenin 16 bit genişliğinde olduğunu unutmayın.

RIP Göreceli Adresleme
6502 µP için göreceli adresleme yalnızca dallanma talimatlarıyla birlikte kullanılır. Burada, işlem kodunun tek işleneni, etkili talimat adresi (veri adresi değil) için Program Sayacı içeriğine eklenen veya çıkarılan bir ofsettir. Benzer bir şey, Program Sayacı'nın Talimat İşaretçisi olarak adlandırıldığı x64'te de olur. X64'lü talimatın yalnızca dallanma talimatı olması gerekmez. RIP'e bağlı adreslemeye bir örnek:

HAREKET AL, [RIP]

RAX'in AL'si, bir sonraki talimata işaret etmek için RIP'deki (64 bit talimat işaretçisi) içeriğe eklenen veya çıkarılan 8 bitlik işaretli bir sayıya sahiptir. Bu talimatta kaynak ve hedefin istisnai olarak yer değiştirdiğine dikkat edin. Ayrıca RIP içeriğini ifade eden köşeli parantezlerin kullanımına da dikkat edin.

6.34 x64'ün Yaygın Olarak Kullanılan Talimatları

Aşağıdaki tabloda *, bir işlem kodu alt kümesinin farklı olası son ekleri anlamına gelir:

Tablo 6.34.1
x64'te Yaygın Olarak Kullanılan Talimatlar
İşlem kodu Anlam
MOV Bellek ve kayıtlar arasında/bellekten/belleğe taşıma (kopyalama)
CMOV* Çeşitli koşullu hareketler
XCHG Değişme
BSWAP Bayt değişimi
İT/POP Yığın kullanımı
EKLE/ADC Ekle/taşıma ile
ALT/KKG Çıkarma/taşıma ile
MUL/IMUL Çarp/imzasız
DIV/IDIV Böl/imzasız
INC/DEC Arttırma/Azaltma
NEG Reddet
CMP Karşılaştırmak
VE/VEYA/XOR/DEĞİL Bitsel işlemler
SHR/SAR Sağa mantıksal/aritmetik kaydırma
SHL/SAL Mantıksal/aritmetik sola kaydır
ROR/ROL Sağa/sola döndür
RCR/RCL Taşıma ucu boyunca sağa/sola döndürün
BT/BTS/BTR Bit testi/ve ayarlama/ve sıfırlama
JMP Koşulsuz atlama
JE/JNE/JC/JNC/J* Eşitse/eşit değilse atla/taşır/taşımaz/diğerleri
YÜRÜYÜŞ/YÜRÜYÜŞ/YÜRÜYÜŞ ECX ile döngü
ÇAĞRI/Geri Alt programı çağır/dönüş
hayır İşlem yok
CPUID'si CPU bilgisi

X64 çarpma ve bölme talimatlarına sahiptir. µP'sinde çarpma ve bölme donanım devreleri bulunmaktadır. 6502 µP'de çarpma ve bölme donanım devreleri bulunmamaktadır. Çarpma ve bölme işlemlerini donanımla yapmak, yazılımla yapmaktan daha hızlıdır (bitlerin kaydırılması dahil).

Dize Talimatları
Bir dizi dizi talimatı vardır, ancak burada tartışılacak olan tek şey C000 adresinden başlayan bir dizeyi kopyalamak için MOVS (dizgeyi taşımak için) talimatıdır. H . C100 adresinden başlamak için H , aşağıdaki talimatı kullanın:

MOVS [C100H], [C000H]

Onaltılı sayı için H son ekine dikkat edin.

6.35 x64'te döngü

6502 µP'de döngü için dallanma talimatları bulunur. Bir dal talimatı, yeni talimatın bulunduğu adres konumuna atlar. Adres konumu “döngü” olarak adlandırılabilir. X64'te döngü için LOOP/LOOPE/LOOPNE talimatları bulunur. Bu ayrılmış montaj dili kelimeleri 'döngü' etiketiyle (tırnak işaretleri olmadan) karıştırılmamalıdır. Davranış aşağıdaki gibidir:

LOOP, ECX'i azaltır ve ECX'in sıfır olup olmadığını kontrol eder. Bu koşul (sıfır) karşılanırsa belirtilen etikete atlar. Aksi takdirde başarısız olur (aşağıdaki tartışmadaki talimatların geri kalanıyla devam edin).

LOOPE, ECX'i azaltır ve ECX'in sıfır olmadığını (örneğin 1 olabilir) ve ZF'nin (1'e) ayarlandığını kontrol eder. Bu koşullar karşılanırsa etikete atlar. Aksi halde düşer.

LOOPNE, ECX'i azaltır ve ECX'in sıfır olmadığını ve ZF'nin ayarlanmadığını (yani sıfır olduğunu) kontrol eder. Bu koşullar yerine getirilirse etikete atlar. Aksi halde düşer.

X64 ile RCX kaydı veya onun ECX veya CX gibi alt parçaları sayaç tamsayısını tutar. LOOP komutlarıyla sayaç normal olarak her atlama (döngü) için 1 azalarak geri sayar. Aşağıdaki döngü kodu bölümünde, EAX kaydındaki sayı on yinelemede 0'dan 10'a çıkarken, ECX'teki sayı 10 kez sayılır (azalır) (yorumları okuyun):

MOV EAX, 0 ;
MOV ECX, 10; Her yineleme için bir kez olmak üzere varsayılan olarak 10 kez geri sayım yapın
etiket:
INC EAX; EAX'i döngü gövdesi olarak artırın
DÖNGÜ etiketi; EAX'i azaltın ve EAX sıfır değilse, döngü gövdesini 'label:'den yeniden çalıştırın.

Döngü kodlaması “etiket:” ile başlar. Kolon kullanımına dikkat edin. Döngü kodlaması, EAX'in azaltılmasını söyleyen “LOOP etiketi” ile biter. İçeriği sıfır değilse, “label:”den sonraki talimata geri dönün ve “LOOP etiketi”ne kadar aşağıya doğru gelen herhangi bir talimatı (tüm gövde talimatlarını) yeniden yürütün. 'Etiket'in hâlâ başka bir isme sahip olabileceğini unutmayın.

6.36 x64 Girişi/Çıkışı

Bölümün bu kısmı, verilerin bir çıkış (dahili) bağlantı noktasına gönderilmesi veya verilerin bir giriş (dahili) bağlantı noktasından alınmasıyla ilgilidir. Yonga seti sekiz bitlik bağlantı noktalarına sahiptir. Ardışık iki 8 bitlik bağlantı noktası, 16 bitlik bağlantı noktası olarak değerlendirilebilir ve ardışık dört bağlantı noktası, 32 bitlik bağlantı noktası olabilir. Bu şekilde işlemci harici bir cihaza veya cihazdan 8, 16 veya 32 bit aktarabilir.

Bilgi, işlemci ile dahili bağlantı noktası arasında iki şekilde aktarılabilir: bellek eşlemeli giriş/çıkış olarak bilinen yöntemi kullanarak veya ayrı bir giriş/çıkış adres alanını kullanarak. Bellek eşlemeli G/Ç, bağlantı noktası adreslerinin aslında tüm bellek alanının bir parçası olduğu 6502 işlemcide olana benzer. Bu durumda veri belirli bir adres lokasyonuna gönderilirken hafıza bankasına değil porta gider. Bağlantı noktalarının ayrı bir G/Ç adres alanı olabilir. Bu ikinci durumda, tüm bellek bankalarının adresleri sıfırdan başlar. 0000H'den FFFF16'ya kadar ayrı bir adres aralığı vardır. Bunlar yonga setindeki bağlantı noktaları tarafından kullanılır. Anakart, bellek eşlemeli G/Ç ile ayrı G/Ç adres alanı arasında karışıklık yaratmayacak şekilde programlanmıştır.

Bellek Eşlemeli G/Ç
Bununla portlar hafıza konumları olarak kabul edilir ve µP ile portlar arasındaki veri aktarımı için hafıza ile µP arasında kullanılacak normal işlem kodları kullanılır. Dolayısıyla, F000H adresindeki bir bağlantı noktasından bir baytı RAX:EAX:AX:AL µP kaydına taşımak için aşağıdakileri yapın:

MOV AL, [F000H]

Bir dize bellekten bir bağlantı noktasına veya tam tersi şekilde taşınabilir. Örnek:

MOVS [F000H], [C000H] ; kaynak C000H'dir ve hedef F000H'deki bağlantı noktasıdır.

Ayrı G/Ç Adres Alanı

Bununla birlikte giriş ve çıkış için özel talimatların kullanılması gerekir.

Tek Öğelerin Aktarılması
Aktarım için işlemci kaydı RAX'tır. Aslında doubleword için RAX:EAX, word için RAX:EAX:AX ​​ve byte için RAX:EAX:AX:AL şeklindedir. Dolayısıyla, bir baytı FFF0h'deki bir bağlantı noktasından RAX:EAX:AX:AL'ye aktarmak için aşağıdakini yazın:

AL'DA, [FFF0H]

Ters aktarım için aşağıdakini yazın:

ÇIKIŞ [FFF0H], AL

Yani, tek öğeler için talimatlar IN ve OUT şeklindedir. Bağlantı noktası adresi RDX:EDX:DX kaydında da verilebilir.

Dizeleri Aktarma
Bir dize bellekten yonga seti bağlantı noktasına veya tam tersi şekilde aktarılabilir. FFF0H adresindeki bir bağlantı noktasından belleğe bir dize aktarmak için C100H'den başlayın, şunu yazın:

INS [ESI], [DX]

aşağıdakiyle aynı etkiye sahiptir:

INS [EDI], [DX]

Programcı FFF0H'nin iki baytlık bağlantı noktası adresini RDX:EDX:Dx kaydına ve C100H'nin iki baytlık adresini RSI:ESI veya RDI:EDI kaydına koymalıdır. Ters aktarım için aşağıdakileri yapın:

INS [DX], [ESI]

aşağıdakiyle aynı etkiye sahiptir:

INS [DX], [EDI]

6.37 x64'teki Yığın

6502 işlemci gibi, x64 işlemcinin de RAM'de bir yığını vardır. X64'ün yığını 2 olabilir 16 = 65.536 bayt uzunluğunda veya 2 olabilir 32 = 4,294,967,296 bayt uzunluğunda. Aynı zamanda aşağıya doğru da büyür. Bir yazmacın içeriği yığına itildiğinde, RSP yığın işaretçisindeki sayı 8 azalır. x64 için bellek adresinin 64 bit genişliğinde olduğunu unutmayın. µP'deki yığın işaretçisindeki değer, RAM'deki yığındaki bir sonraki konuma işaret eder. Bir yazmacın içeriği (veya bir işlenendeki değer) yığından bir kayda gönderildiğinde, RSP yığın işaretçisindeki sayı 8 artar. Yığın boyutuna ve RAM'de nerede başlayacağına işletim sistemi karar verir. ve aşağıya doğru büyür. Bir yığının, bu durumda aşağı doğru büyüyen ve yukarı doğru daralan bir Son Giren İlk Çıkar (LIFO) yapısı olduğunu unutmayın.

µP RBX kaydının içeriğini yığına göndermek için aşağıdakileri yapın:

RBX'E BASIN

Yığındaki son girişi RBX'e geri göndermek için aşağıdakileri yapın:

POP RBX

6.38 x64'teki prosedür

X64'teki alt programa 'prosedür' adı verilir. Yığın burada 6502 µP için kullanılandan daha fazla kullanılıyor. Bir x64 prosedürünün sözdizimi şöyledir:

işlem_adı:
prosedür organı

Sağ

Devam etmeden önce, bir x64 alt yordamının işlem kodlarının ve etiketlerinin (genel olarak derleme dili talimatları) büyük/küçük harfe duyarlı olmadığına dikkat edin. Yani proc_name, PROC_NAME ile aynıdır. 6502 gibi, prosedür adının (etiket) adı da montaj dili için metin düzenleyicide yeni bir satırın başında başlar. Bunu 6502'de olduğu gibi boşluk ve işlem kodu değil, iki nokta üst üste izler. Alt rutin gövdesi bunu takip eder ve 6502 µP'de olduğu gibi RTS ile değil RET ile biter. 6502'de olduğu gibi, RET de dahil olmak üzere gövdedeki her talimat satırının başlangıcında başlamaz. Buradaki etiketin 8 karakterden uzun olabileceğini unutmayın. Bu yordamı, yazılan yordamın üstünden veya altından çağırmak için aşağıdakileri yapın:

işlem_adı ÇAĞRI

6502 ile etiketin adı yalnızca çağırmak için yazılır. Ancak burada, ayrılmış kelime “CALL” veya “call” yazılır ve ardından bir boşluktan sonra prosedürün adı (alt program) gelir.

Prosedürlerle uğraşırken genellikle iki prosedür vardır. Bir prosedür diğerini çağırır. Çağıran prosedüre (çağrı talimatına sahip olan) “arayan”, çağrılan prosedüre ise “çağrılan” denir. Uyulması gereken bir sözleşme (kurallar) vardır.

Arayanın Kuralları

Arayan, bir altyordamı çağırırken aşağıdaki kurallara uymalıdır:

1. Bir altyordamı çağırmadan önce, arayan kişi, arayan tarafından kaydedilen olarak belirlenen belirli kayıtların içeriğini yığına kaydetmelidir. Arayan tarafından kaydedilen kayıtlar R10, R11 ve parametrelerin yerleştirildiği tüm kayıtlardır (RDI, RSI, RDX, RCX, R8, R9). Bu kayıtların içeriğinin alt program çağrısı boyunca korunması gerekiyorsa, bunları RAM'e kaydetmek yerine yığına itin. Bunların yapılması gerekir çünkü kayıtların aranan kişi tarafından önceki içerikleri silmek için kullanılması gerekir.

2. Eğer prosedür örneğin iki sayı eklemekse, bu iki sayı yığına aktarılacak parametrelerdir. Parametreleri alt programa aktarmak için, bunlardan altısını sırayla aşağıdaki kayıtlara yerleştirin: RDI, RSI, RDX, RCX, R8, R9. Alt programda altıdan fazla parametre varsa geri kalanını ters sırayla yığına itin (yani son parametre önce). Yığın büyüdükçe, ekstra parametrelerden ilki (aslında yedinci parametre) en düşük adreste depolanır (parametrelerin bu ters çevrilmesi, tarihsel olarak fonksiyonların (alt rutinlerin) değişken sayıda parametreyle geçirilmesine izin vermek için kullanılmıştır).

3. Alt programı (prosedür) çağırmak için çağrı talimatını kullanın. Bu talimat, dönüş adresini yığındaki (en düşük konum) parametrelerin üstüne ve alt program kodunun dallarına yerleştirir.

4. Alt program geri döndükten sonra (yani çağrı talimatının hemen ardından), arayan kişinin tüm ek parametreleri (kayıtlarda saklanan altı parametrenin ötesinde) yığından kaldırması gerekir. Bu, yığını çağrı gerçekleştirilmeden önceki durumuna geri yükler.

5. Arayan kişi, RAX kaydındaki alt yordamın dönüş değerini (adresini) bulmayı bekleyebilir.

6. Arayan, arayanın kaydettiği kayıtların (R10, R11 ve parametre geçiş kayıtlarındaki herhangi biri) içeriğini yığından çıkararak geri yükler. Arayan kişi, altprogram tarafından başka hiçbir kaydın değiştirilmediğini varsayabilir.

Çağırma kuralının yapılandırılma şekli nedeniyle, genellikle bu adımların bazılarının (veya çoğunun) yığında herhangi bir değişiklik yapmaması söz konusudur. Örneğin, altı veya daha az parametre varsa bu adımda yığına hiçbir şey gönderilmez. Benzer şekilde, programcılar (ve derleyiciler) genellikle aşırı itme ve açmaları önlemek için önem verdikleri sonuçları 1. ve 6. adımlarda arayan tarafından kaydedilen kayıtların dışında tutarlar.

Parametreleri bir alt programa aktarmanın iki yolu daha vardır, ancak bunlar bu çevrimiçi kariyer kursunda ele alınmayacaktır. Bunlardan biri genel amaçlı yazmaçlar yerine yığının kendisini kullanıyor.

Callee'nin Kuralları

Çağrılan altprogramın tanımı aşağıdaki kurallara uygun olmalıdır:

1. Yerel değişkenleri (prosedür dahilinde geliştirilen değişkenler) kayıtları kullanarak veya yığında yer açarak tahsis edin. Yığın aşağı doğru büyüdüğünü hatırlayın. Bu nedenle yığının tepesinde yer açmak için yığın işaretçisinin azaltılması gerekir. Yığın işaretçisinin azaltılacağı miktar, gerekli yerel değişken sayısına bağlıdır. Örneğin, yerel kayan nokta ve yerel uzun (toplam 12 bayt) gerekiyorsa, bu yerel değişkenlere yer açmak için yığın işaretçisinin 12 oranında azaltılması gerekir. C gibi yüksek seviyeli bir dilde bu, değerleri atamadan (başlatmadan) değişkenleri bildirmek anlamına gelir.

2. Daha sonra, fonksiyon tarafından kullanılan, aranan tarafından kaydedilen (arayan tarafından kaydedilmeyen genel amaçlı kayıtlar) tüm kayıtların değerlerinin kaydedilmesi gerekir. Kayıtları kaydetmek için bunları yığının üzerine itin. Arananların kaydettiği kayıtlar RBX, RBP ve R12'den R15'e kadardır (RSP ayrıca çağrı kuralı tarafından korunur, ancak bu adım sırasında yığına itilmesi gerekmez).

Bu üç eylem gerçekleştirildikten sonra alt programın asıl işlemi devam edebilir. Altprogram geri dönmeye hazır olduğunda çağrı kuralı kuralları devam eder.

3. Alt program tamamlandığında, alt programın dönüş değeri, eğer halihazırda orada değilse, RAX'a yerleştirilmelidir.

4. Alt programın, çağrılan tarafından kaydedilen, değiştirilen kayıtların (RBX, RBP ve R12'den R15'e kadar) eski değerlerini geri yüklemesi gerekir. Kayıt içerikleri yığından çıkarılarak geri yüklenir. Kayıtların, itildikleri sıranın tersi sırayla açılması gerektiğini unutmayın.

5. Daha sonra yerel değişkenlerin yerini değiştiriyoruz. Bunu yapmanın en kolay yolu, 1. adımda RSP'den çıkarılan tutarın aynısını RSP'ye eklemektir.

6. Son olarak geri alma komutunu uygulayarak arayana geri dönüyoruz. Bu talimat uygun dönüş adresini bulup yığından kaldıracaktır.

“myFunc” olan başka bir altprogramı çağırmak için arayan altprogramının gövdesinin bir örneği aşağıdaki gibidir (yorumları okuyun):

; Üç işlem gerektiren 'myFunc' işlevini çağırmak istiyorsanız
; tamsayı parametresi. İlk parametre RAX'tadır.
; İkinci parametre 456 sabitidir. Üçüncü
; parametre hafızanın “değişken” konumundadır

rdi'ye basın; rdi bir parametre olacak, bu yüzden onu kaydediyorum
; uzun geridVal = işlevim(x,456,z);

mov rdi, rax; RDI'ya ilk parametreyi koy
mov rsi, 456; RSI'ya ikinci parametreyi koy
mov rdx, [değişken]; RDX'e üçüncü parametreyi koy

myFunc'u çağırın; işlevi çağır

pop rdi; kayıtlı RDI değerini geri yükle
; myFunc'un dönüş değeri artık RAX'ta mevcut

Aranan işlevin bir örneği (myFunc) şöyledir (yorumları okuyun):

işlevim:
; ∗∗∗ Standart altprogram önsözü ∗∗∗
alt rsp, 8; “alt” işlem kodunu kullanan 64 bit yerel değişken (sonuç) için yer

rbx'e basın; arananı kaydet-kayıtları kaydet
rbp'ye basın; her ikisi de myFunc tarafından kullanılacak

; ∗∗∗ Alt rutin Gövde ∗∗∗
mov rax, rdi; parametre 1'den RAX'a
mov rbp, rsi; parametre 2'den RBP'ye
mov rbx, rdx; parametre 3'ten rb x'e
mov [ rsp + 1 6 ] , rbx ; rbx'i yerel değişkene koy
ekle [rsp + 1 6], rbp; yerel değişkene rbp ekleyin
mov rax, [rsp +16]; yerel değişkenin içeriğini RAX'a taşıma
; (dönüş değeri/nihai sonuç)

; ∗∗∗ Standart alt program sonsözü ∗∗∗
pop rbp; aranan kişinin kaydetme kayıtlarını kurtar
pop rbx; itildiğinde tersi
rsp'yi ekleyin, 8; yerel değişken(ler)in yerini serbest bırakın. 8, 8 bayt anlamına gelir
geri; yığından en yüksek değeri çıkar, oraya atla

6.39 x64 için Kesintiler ve İstisnalar

İşlemci, programın yürütülmesini, kesintileri ve istisnaları kesintiye uğratmak için iki mekanizma sağlar:

  • Kesinti, genellikle bir G/Ç cihazı tarafından tetiklenen eşzamansız (herhangi bir zamanda gerçekleşebilir) bir olaydır.
  • Bir istisna, işlemci bir talimatı yürütürken bir veya daha fazla önceden tanımlanmış koşulu tespit ettiğinde üretilen senkronize bir olaydır (kod yürütülürken, önceden programlanırken, bazı olaylara bağlı olarak gerçekleşir). Üç istisna sınıfı belirtilmiştir: hatalar, tuzaklar ve iptaller.

İşlemci, kesintilere ve istisnalara esasen aynı şekilde yanıt verir. Bir kesinti veya istisna sinyali verildiğinde, işlemci mevcut programın veya görevin yürütülmesini durdurur ve özellikle kesme veya istisna durumunu işlemek için yazılmış bir işleyici prosedürüne geçer. İşlemci, işleyici prosedürüne Kesinti Tanımlayıcı Tablosunda (IDT) bir giriş aracılığıyla erişir. İşleyici kesmeyi veya özel durumu işlemeyi tamamladığında program kontrolü kesintiye uğrayan programa veya göreve geri döner.

İşletim sistemi, yönetici ve/veya aygıt sürücüleri normalde kesintileri ve özel durumları uygulama programlarından veya görevlerden bağımsız olarak ele alır. Ancak uygulama programları, bir işletim sistemine dahil edilen kesme ve istisna işleyicilerine erişebilir veya onu montaj dili çağrıları aracılığıyla yönetebilir.

IDT'deki girişlerle ilişkili on sekiz (18) önceden tanımlanmış kesinti ve istisna tanımlanmıştır. İki yüz yirmi dört (224) kullanıcı tanımlı kesme de yapılabilir ve tabloyla ilişkilendirilebilir. IDT'deki her kesinti ve istisna, 'vektör' adı verilen bir sayıyla tanımlanır. Tablo 6.39.1, IDT'deki girişlerle ve ilgili vektörleriyle birlikte kesintileri ve istisnaları listelemektedir. 0'dan 8'e, 10'dan 14'e ve 16'dan 19'a kadar olan vektörler önceden tanımlanmış kesintiler ve istisnalardır. 32'den 255'e kadar olan vektörler, yazılım kesintileri veya maskelenebilir donanım kesintileri için olan yazılım tanımlı kesintiler (kullanıcı) içindir.

İşlemci bir kesinti veya istisna tespit ettiğinde aşağıdakilerden birini yapar:

  • Bir işleyici prosedürüne örtülü bir çağrı yürütme
  • Bir işleyici görevine örtülü bir çağrı yürütme

6.4 64-Bit ARM Bilgisayar Mimarisinin Temelleri

ARM mimarileri, çok çeşitli uygulamalarda kullanıma uygun bir RISC işlemci ailesini tanımlar. ARM, ALU (Aritmetik Mantık Birimi) işlemi gibi herhangi bir işlemin gerçekleştirilebilmesi için verilerin bellekten bir kayda yüklenmesini gerektiren bir yükleme/depolama mimarisidir. Sonraki bir talimat sonucu tekrar belleğe kaydeder. Bu, tek bir talimatta (elbette işlemci kayıtlarını kullanarak) doğrudan bellekteki işlenenler üzerinde çalışan x86 ve x64 mimarilerinden bir geri adım gibi görünse de, yükleme/depolama yaklaşımı pratikte birkaç ardışık işleme izin verir. Bir işlenen birçok işlemci yazmacından birine yüklendikten sonra yüksek hızda gerçekleştirilecektir. ARM işlemciler küçük endianlık veya büyük endianlık seçeneğine sahiptir. Varsayılan ARM 64 ayarı, işletim sistemleri tarafından yaygın olarak kullanılan yapılandırma olan little-endian'dır. 64 bit ARM mimarisi moderndir ve 32 bit ARM mimarisinin yerini alacak şekilde ayarlanmıştır.

Not : 64 bit ARM µP için her talimat 4 bayt (32 bit) uzunluğundadır.

6.41 64-Bit ARM Kayıt Seti
64 bitlik ARM µP için 64 bitlik kayıtların 31 genel amacı vardır. Aşağıdaki şema genel amaçlı kayıtları ve bazı önemli kayıtları göstermektedir:


Şekil 4.11.1 64-Bit Genel Amaç ve Bazı Önemli Kayıtlar

Genel amaçlı kayıtlara X0'dan X30'a kadar denir. Her kaydın ilk 32 bitlik kısmı W0'dan W30'a kadar olarak adlandırılır. 32 bit ile 64 bit arasındaki fark vurgulanmadığında “R” öneki kullanılır. Örneğin R14, W14 veya X14'e karşılık gelir.

6502 µP, 16 bitlik bir Program Sayacına sahiptir ve 2 16 bellek bayt konumları. 64 bit ARM µP, 64 bit Program Sayacına sahiptir ve 2'ye kadar adresleyebilir 64 = 1,844674407 x 1019 (aslında 18,446,744,073,709,551,616) bellek bayt konumu. Program sayacı yürütülecek bir sonraki komutun adresini tutar. ARM64 veya AArch64'ün talimatının uzunluğu tipik olarak dört bayttır. Bellekten her talimat alındıktan sonra işlemci bu kaydı otomatik olarak dört kat artırır.

Yığın İşaretçisi kaydı veya SP, 31 genel amaçlı kayıt arasında değildir. Herhangi bir mimarinin yığın işaretçisi bellekteki son yığın girişini işaret eder. ARM-64 için yığın aşağı doğru büyüyor.

6502 µP, 8 bitlik bir İşlemci Durum Kaydına sahiptir. ARM64'teki eşdeğerine PSTATE kaydı denir. Bu kayıt, işlemlerin sonuçları ve işlemciyi (μP) kontrol etmek için kullanılan bayrakları saklar. 32 bit genişliğindedir. Aşağıdaki tabloda PSTATE kaydında yaygın olarak kullanılan bitlerin adları, dizinleri ve anlamları verilmektedir:

Tablo 6.41.1
En Çok Kullanılan PSTATE Bayrakları (Bitler)
Sembol Biraz Amaç
M 0-3 Mod: Geçerli yürütme ayrıcalık düzeyi (USR, SVC vb.).
T 4 Thumb: T32 (Thumb) komut seti aktif ise ayarlanır. Temizlenmişse, ARM komut seti aktiftir. Kullanıcı kodu bu biti ayarlayabilir ve temizleyebilir.
VE 9 Endianness: Bu bitin ayarlanması big-endian modunu etkinleştirir. Temizse, küçük endian modu etkindir. Varsayılan, küçük-endian modudur.
Q 27 Kümülatif doygunluk bayrağı: Bir dizi işlemin herhangi bir noktasında bir taşma veya doygunluk meydana gelirse ayarlanır.
İÇİNDE 28 Taşma bayrağı: İşlemin imzalı taşma ile sonuçlanması durumunda ayarlanır.
C 29 Taşıma bayrağı: Toplamanın bir taşıma mı ürettiğini yoksa çıkarmanın bir borçlanma mı ürettiğini belirtir.
İLE 30 Sıfır bayrağı: Bir işlemin sonucunun sıfır olması durumunda ayarlanır.
N 31 Negatif bayrağı: Bir işlemin sonucunun negatif olması durumunda ayarlanır.

ARM-64 µP'nin başka birçok kaydı vardır.

SIMD
SIMD, Tek Talimat, Çoklu Veri anlamına gelir. Bu, bir montaj dili talimatının, bir mikroişlemcide aynı anda birden fazla veri üzerinde işlem yapabileceği anlamına gelir. SIMD ve kayan nokta işlemleriyle kullanılmak üzere 128 bit genişliğinde otuz iki kayıt vardır.

6.42 Bellek Eşlemesi
RAM ve DRAM'in her ikisi de Rastgele Erişimli Belleklerdir. DRAM, RAM'den daha yavaş çalışır. DRAM, RAM'den daha ucuzdur. Bellekte 32 gigabayttan (GB) fazla sürekli DRAM varsa, daha fazla bellek yönetimi sorunu olacaktır: 32 GB = 32 x 1024 x 1024 x 1024 bayt. 32 GB'tan çok daha büyük bir bellek alanının tamamı için, daha iyi bellek yönetimi amacıyla 32 GB'nin üzerindeki DRAM'in RAM'lerle serpiştirilmesi gerekir. ARM-64 hafıza haritasını anlamak için öncelikle 32-bit ARM Merkezi İşlem Birimi (CPU) için 4GB hafıza haritasını anlamalısınız. CPU µP anlamına gelir. 32 bitlik bir bilgisayar için adreslenebilir maksimum bellek alanı 2'dir 32 = 4x2 10 x 2 10 x 2 10 = 4 x 1024 x 1024 x 1024 = 4,294,967,296 = 4 GB.

32-Bit ARM Bellek Haritası
32 bit ARM'in hafıza haritası:

32 bit bilgisayar için tüm belleğin maksimum boyutu 4 GB'tır. 0GB adresinden 1GB adresine kadar ROM İşletim Sistemi, RAM ve G/Ç konumları bulunur. ROM işletim sistemi, RAM ve I/O adreslerinin tamamı, olası 6502 CPU'lu Commodore-64'ün durumuna benzer. Commodore-64 için OS ROM, bellek alanının en üst ucundadır. Buradaki ROM işletim sistemi Commodore-64'ünkinden çok daha büyüktür ve tüm bellek adres alanının başlangıcındadır. Diğer modern bilgisayarlarla karşılaştırıldığında, buradaki ROM işletim sistemi, sabit disklerindeki işletim sistemi miktarıyla karşılaştırılabilir olması anlamında eksiksizdir. İşletim sisteminin ROM entegre devrelerinde bulunmasının iki ana nedeni vardır: 1) ARM CPU'lar çoğunlukla akıllı telefonlar gibi küçük cihazlarda kullanılır. Çoğu sabit disk, güvenlik nedeniyle akıllı telefonlardan ve diğer küçük cihazlardan daha büyüktür 2). İşletim sistemi Salt Okunur bellekte olduğunda, bilgisayar korsanları tarafından bozulamaz (parçaların üzerine yazılamaz). RAM bölümleri ve giriş/çıkış bölümleri de Commodore-64'e göre çok büyük.

32 bit ROM işletim sistemiyle güç açıldığında, işletim sisteminin 0x00000000 adresinden veya HiVEC'ler etkinse 0xFFFF0000 adresinden başlaması (önyükleme yapması) gerekir. Yani sıfırlama aşamasından sonra güç açıldığında CPU donanımı Program Sayacına 0x00000000 veya 0xFFFF0000 yükler. “0x” öneki Onaltılık anlamına gelir. ARMv8 64bit CPU'ların önyükleme adresi tanımlanmış bir uygulamadır. Ancak yazar, bilgisayar mühendisine geriye dönük uyumluluk adına 0x00000000 veya 0xFFFF0000'den başlamasını tavsiye ediyor.

Eşlenen giriş/çıkış 1 GB'tan 2 GB'a kadardır. Eşlenen G/Ç ile 0 GB ile 1 GB arasında bulunan yalnızca G/Ç arasında bir fark vardır. I/O ile her portun adresi Commodore-64'te olduğu gibi sabittir. Eşlenen G/Ç ile her bağlantı noktasının adresinin bilgisayarın her işlemi için aynı olması gerekmez (dinamik).

2GB'tan 4GB'a kadar DRAM'dir. Bu beklenen (veya normal) RAM'dir. DRAM, Dinamik RAM anlamına gelir; bilgisayarın çalışması sırasında adresin değişmesi anlamına gelmez, fiziksel RAM'deki her hücrenin değerinin her saat darbesinde yenilenmesi gerektiği anlamına gelir.

Not :

  • 0x0000,0000 ila 0x0000 arası,FFFF, OS ROM'dur.
  • 0x0001,0000'den 0x3FFF,FFFF'ye kadar daha fazla ROM, ardından RAM ve ardından bir miktar G/Ç olabilir.
  • 0x4000,0000'den 0x7FFF,FFFF'ye kadar ek bir G/Ç'ye ve/veya eşlenmiş G/Ç'ye izin verilir.
  • 0x8000,0000'den 0xFFFF'ye kadar,FFFF beklenen DRAM'dir.

Bunlar, pratikte beklenen DRAM'in 2GB bellek sınırından başlaması gerekmediği anlamına gelir. Anakarta yeterli sayıda fiziksel RAM bankası yerleştirilmemişken programcı neden ideal sınırlara saygı duysun ki? Bunun nedeni müşterinin tüm RAM bankalarına yetecek kadar parasının olmamasıdır.

36-Bit ARM Bellek Haritası
64 bit ARM bilgisayar için 32 bitin tümü belleğin tamamını adreslemek için kullanılır. 64 bitlik bir ARM bilgisayar için, ilk 36 bit tüm belleği adreslemek için kullanılabilir; bu durumda bu 2'dir. 36 = 68.719.476.736 = 64GB. Bu zaten çok fazla hafıza. Günümüzde sıradan bilgisayarların bu kadar belleğe ihtiyacı yok. Bu henüz 64 bitin erişebileceği maksimum bellek aralığına ulaşmış değil. ARM CPU için 36 bitlik bellek haritası:

0GB adresinden 4GB adresine kadar 32 bitlik hafıza haritasıdır. “Ayrılmış”, kullanılmadığı ve gelecekte kullanılmak üzere saklandığı anlamına gelir. Bu alan için anakartın üzerine yerleştirilmiş fiziksel bellek bankalarının olması gerekmez. Burada DRAM ve eşlenen G/Ç, 32 bit bellek haritasıyla aynı anlamlara sahiptir.

Uygulamada aşağıdaki durumla karşılaşılabilir:

  • 0x1 0000 0000 – 0x3 FFFF FFFF; rezerve. 12GB adres alanı ileride kullanılmak üzere ayrılmıştır.
  • 0x4 0000 0000 – 0x7 FFFF FFFF; eşlenen G/Ç. Dinamik olarak eşlenen G/Ç için 16 GB adres alanı mevcuttur.
  • 0x8 0000 0000 – 0x8 7FFF FFFF FFFF; Delik veya DRAM. 2 GB adres alanı aşağıdakilerden birini içerebilir:
    • DRAM cihazı bölümlendirmesini etkinleştirmek için delik (aşağıdaki açıklamada açıklandığı gibi).
    • DRAM.
  • 0x8 8000 0000 – 0xF FFFF FFFF; DRAM. DRAM için 30 GB adres alanı.

Bu bellek haritası, 32 bitlik adres haritasının bir üst kümesidir; ek alan, içinde isteğe bağlı bir delik bulunan %50 DRAM (1/2) ve %25 eşlenmiş G/Ç alanı ve ayrılmış alan (1/4) olarak bölünür. ). Kalan %25 (1/4) 32 bitlik hafıza haritası içindir ½ + ¼ + ¼ = 1.

Not : 32 bitten 360 bit'e, 36 bitin en anlamlı tarafına 4 bitin eklenmesidir.

40-Bit Bellek Haritası
40 bitlik adres haritası, 36 bitlik adres haritasının bir üst kümesidir ve içindeki isteğe bağlı bir deliğin %50 DRAM'i, %25'i eşlenmiş G/Ç alanı ve ayrılmış alan ve geri kalan %25'lik DRAM ile aynı modeli izler. önceki hafıza haritası için alan (36 bit). Bellek haritasının diyagramı şu şekildedir:

Deliğin boyutu 544 – 512 = 32GB’tır. Uygulamada aşağıdaki durumla karşılaşılabilir:

  • 0x10 0000 0000 – 0x3F FFFF FFFF; rezerve. 192GB adres alanı ileride kullanılmak üzere ayrılmıştır.
  • 0x40 0000 0000 – 0x7F FFFF FFFF; haritalandı. G/Ç Dinamik olarak eşlenen G/Ç için 256 GB adres alanı mevcuttur.
  • 0x80 0000 0000 – 0x87 FFFF FFFF; delik veya DRAM. 32 GB adres alanı aşağıdakilerden birini içerebilir:
    • DRAM cihazı bölümlendirmesini etkinleştirmek için delik (aşağıdaki açıklamada açıklandığı gibi)
    • DRAM
  • 0x88 0000 0000 – 0xFF FFFF FFFF; DRAM. DRAM için 480 GB adres alanı.

Not : 36 bitten 40 bit'e, 36 bitin en anlamlı tarafına 4 bitin eklenmesidir.

DRAM Deliği
32 bitin ötesindeki bellek haritasında ya bir DRAM Deliğidir ya da DRAM'in üstten devamıdır. Bir delik olduğunda şu şekilde takdir edilmelidir: DRAM deliği, büyük bir DRAM cihazını birden fazla adres aralığına bölmenin bir yolunu sağlar. İsteğe bağlı DRAM deliği, daha yüksek DRAM adres sınırının başlangıcında önerilmektedir. Bu, büyük kapasiteli bir DRAM cihazını fiziksel olarak daha düşük adresli bölgeye bölerken basitleştirilmiş bir kod çözme şemasına olanak tanır.

Örneğin, 64 GB'lik bir DRAM parçası, yüksek dereceli adres bitlerinde basit bir çıkarmayla gerçekleştirilen adres ofsetleri ile aşağıdaki gibi üç bölgeye alt bölümlere ayrılır:

Tablo 6.42.1
Delikli 64 GB DRAM Bölümleme Örneği
SoC'deki Fiziksel Adresler Telafi etmek Dahili DRAM adresi
2 GB (32 bit harita) 0x00 8000 0000 – 0x00 FFFF FFFF -0x00 8000 0000 0x00 0000 0000 – 0x00 7FFF FFFF
30 GB (36 bit harita) 0x08 8000 0000 – 0x0F FFFF FFFF -0x08 0000 0000 0x00 8000 0000 – 0x07 FFFF FFFF
32 GB (40 bit harita) 0x88 0000 0000 – 0x8F FFFF FFFF -0x80 0000 0000 0x08 0000 0000 – 0x0F FFFF FFFF

ARM CPU'lar için Önerilen 44-Bit ve 48-Bit Adresli Bellek Haritaları
Bir Kişisel Bilgisayarın 1024 GB (= 1 TB) belleğe sahip olduğunu varsayalım; bu çok fazla hafıza demektir. Ve böylece, sırasıyla 16 TB ve 256 TB için ARM CPU'lar için 44 bit ve 48 bit adresli bellek haritaları, yalnızca gelecekteki bilgisayar ihtiyaçları için önerilerdir. Aslında ARM CPU'lara yönelik bu öneriler, önceki bellek haritalarıyla aynı orana göre bellek bölünmesini takip ediyor. Yani: İçinde isteğe bağlı bir delik bulunan %50 DRAM, %25 eşlenmiş G/Ç alanı ve ayrılmış alan ve geri kalan %25 alan önceki bellek haritası için.

52-bit, 56-bit, 60-bit ve 64-bit adresli bellek haritaları, uzak gelecekte ARM 64 bitleri için hala önerilecektir. O zamanın bilim adamları tüm hafıza alanının 50:25:25 oranında bölümlenmesini hala faydalı buluyorlarsa, bu oranı koruyacaklardır.

Not : SoC, µP çipindeki aksi takdirde orada olmayacak devreleri ifade eden System-on-Chip anlamına gelir.

SRAM veya Statik Rastgele Erişim Belleği, daha geleneksel DRAM'den daha hızlıdır ancak daha fazla silikon alanı gerektirir. SRAM'in yenilenmesi gerekmez. Okuyucu RAM'i SRAM olarak hayal edebilir.

6.43 ARM 64 için Assembly Dili Adresleme Modları
ARM, Aritmetik Mantık İşlemi gibi herhangi bir işlemin gerçekleştirilebilmesi için verilerin bellekten işlemci kaydına yüklenmesini gerektiren bir yükleme/depolama mimarisidir. Sonraki bir talimat sonucu tekrar belleğe kaydeder. Bu, tek bir talimatta doğrudan bellekteki işlenenler üzerinde çalışan x86 ve onu takip eden x64 mimarilerinden bir geri adım gibi görünse de, pratikte yükleme/depolama yaklaşımı, yüksek hızda birçok ardışık işlemin gerçekleştirilmesine izin verir. bir işlenen birçok işlemci kaydından birine yüklendiğinde.

ARM montaj dilinin formatı x64 (x86) serisiyle benzerlik ve farklılıklara sahiptir.

  • Telafi etmek : Temel kayda imzalı bir sabit eklenebilir. Ofset, talimatın bir parçası olarak yazılır. Örneğin: ldr x0, [rx, #10] r0'ı r1+10 adresindeki kelimeyle yükler.
  • Kayıt olmak : Bir kayıt defterinde saklanan imzasız bir artış, bir temel kayıttaki değere eklenebilir veya bu değerden çıkarılabilir. Örneğin: ldr r0, [x1, x2] r0'ı x1+x2 adresindeki kelimeyle yükler. Kayıtlardan herhangi biri temel kayıt olarak düşünülebilir.
  • Ölçeklendirilmiş kayıt : Bir kayıttaki bir artış, temel kayıt değerine eklenmeden veya temel kayıt değerinden çıkarılmadan önce belirtilen sayıda bit konumu kadar sola veya sağa kaydırılır. Örneğin: ldr x0, [x1, x2, lsl #3] r0'ı r1+(r2×8) adresindeki kelimeyle yükler. Kaydırma, boş bit konumlarına sıfır bitler ekleyen mantıksal bir sola veya sağa kaydırma (lsl veya lsr) veya boş konumlarda işaret bitini kopyalayan bir aritmetik sağa kaydırma (asr) olabilir.

İki işlenen söz konusu olduğunda, hedef kaynaktan önce (solda) gelir (bunun bazı istisnaları vardır). ARM derleme dilinin işlem kodları büyük/küçük harfe duyarlı değildir.

Anında ARM64 Adresleme Modu
Örnek:

mov r0, #0xFF000000 ; 32 bitlik FF000000h değerini r0'a yükleyin

Ondalık değer 0x içermez ancak önünde hala # bulunur.

Doğrudan Kayıt Ol
Örnek:

hareket x0, x1; x1'i x0'a kopyala

Dolaylı Kayıt Ol
Örnek:

dizi x0, [x3] ; x0'ı x3'teki adrese saklayın

Ofset ile Dolaylı Kayıt
Örnekler:

ldr x0, [x1, #32] ; r0'ı [r1+32] adresindeki değerle yükleyin; r1 temel kayıttır
str x0, [x1, #4] ; r0'ı [r1+4] adresine saklayın; r1 temel kayıttır; sayılar 10 tabanındadır

Ofset ile Dolaylı Kayıt (Önceden artırılmış)
Örnekler:

ldr x0, [x1, #32]! ; r0'ı [r1+32] ile yükleyin ve r1'i (r1+32) olarak güncelleyin
str x0, [x1, #4]! ; r0'ı [r1+4]'e kaydedin ve r1'i (r1+4)'e güncelleyin

“!” Kullanımına dikkat edin. sembol.

Ofset ile Dolaylı Kayıt (Sonradan Artışlı)
Örnekler:

ldrx0, [x1], #32 ; [x1]'i x0'a yükleyin, ardından x1'i (x1+32) olarak güncelleyin
dizi x0, [x1], #4 ; x0'ı [x1]'e saklayın, ardından x1'i (x1+4)'e güncelleyin

Çift Kayıtlı Dolaylı
İşlenenin adresi, bir temel yazmaç ve bir artış yazmacının toplamıdır. Kayıt adları köşeli parantezlerle çevrilidir.
Örnekler:

ldr x0, [x1, x2] ; x0'ı [x1+x2] ile yükle
str x0, [rx, x2] ; x0'ı [x1+x2]'ye depola

Göreceli Adresleme Modu
Göreceli adresleme modunda, etkili talimat Program Sayacındaki bir sonraki talimat artı bir indekstir. Endeks pozitif veya negatif olabilir.
Örnek:

ldr x0, [pc, #24]

Bu, PC içeriğinin işaret ettiği kelime artı 24 ile X0 yük kaydı anlamına gelir.

6.44 ARM 64 İçin Yaygın Olarak Kullanılan Bazı Talimatlar
Yaygın olarak kullanılan talimatlar şunlardır:

6.45 Döngü

İllüstrasyon
Aşağıdaki kod, X8'deki değer sıfır olana kadar X10 kaydındaki değeri X9'daki değere eklemeye devam eder. Tüm değerlerin tamsayı olduğunu varsayalım. X8'deki değer her yinelemede 1 çıkarılır:

döngü:
CBZ X8, atla
X9, X9, X10 EKLE; ilk X9 hedef ve ikinci X9 kaynaktır
ALT X8, X8, #1; ilk X8 hedef ve ikinci X8 kaynaktır
B döngüsü
atlamak:

6502 µP ve X64 µP'de olduğu gibi ARM 64 µP'deki etiket de satırın başında başlar. Talimatların geri kalanı satırın başlangıcından sonraki bazı boşluklarda başlar. x64 ve ARM 64 ile etiketin ardından iki nokta üst üste ve yeni bir satır gelir. 6502'de etiketin ardından bir boşluktan sonra bir talimat gelir. Önceki kodda ilk komut olan “CBZ X8, skip”, eğer X8’deki değer sıfır ise, “skip:” etiketinden devam edin, aradaki talimatları atlayın ve aşağıdaki talimatların geri kalanına devam edin anlamına gelir. 'atlamak:'. “B döngüsü”, “döngü” etiketine koşulsuz bir atlamadır. “Döngü” yerine başka herhangi bir etiket adı kullanılabilir.

Yani, 6502 µP'de olduğu gibi, ARM 64 ile bir döngü oluşturmak için dallanma talimatlarını kullanın.

6.46 ARM 64 Giriş/Çıkış
Tüm ARM çevre birimleri (dahili bağlantı noktaları) bellek eşlemelidir. Bu, programlama arayüzünün bir dizi bellek adresli kayıt (dahili bağlantı noktaları) olduğu anlamına gelir. Böyle bir kaydın adresi, belirli bir bellek taban adresinden bir sapmadır. Bu, 6502'nin giriş/çıkış yapmasına benzer. ARM'nin ayrı G/Ç adres alanı seçeneği yoktur.

6.47 ARM 64 Yığını
ARM 64'ün hafızasında (RAM) 6502 ve x64'e benzer şekilde bir yığın bulunur. Ancak ARM64'te push veya pop işlem kodu yoktur. ARM 64'teki yığın da aşağı doğru büyüyor. Yığın işaretçisindeki adres, yığına yerleştirilen son değerin son baytından hemen sonrasını gösterir.

ARM64 için genel bir pop veya push işlem kodunun bulunmamasının nedeni, ARM 64'ün yığınını ardışık 16 baytlık gruplar halinde yönetmesidir. Ancak değerler bir bayt, iki bayt, dört bayt ve 8 baytlık bayt gruplarında bulunur. Böylece yığına bir değer yerleştirilebilir ve 16 baytı telafi edecek geri kalan yerler (bayt konumları) yapay baytlarla doldurulur. Bunun hafızayı boşa harcama dezavantajı vardır. Daha iyi bir çözüm, 16 baytlık konumu daha küçük değerlerle doldurmak ve 16 baytlık konumdaki değerlerin nereden geldiğini (kayıtlar) izleyen bir programcının yazılı kodlara sahip olmasını sağlamaktır. Bu ekstra koda değerlerin geri çekilmesinde de ihtiyaç duyulur. Buna bir alternatif, iki adet 8 baytlık genel amaçlı kaydı farklı değerlerle doldurmak ve ardından iki adet 8 baytlık yazmacın içeriğini bir yığına göndermektir. Yığına giren ve yığından ayrılan belirli küçük değerleri izlemek için burada hala ekstra bir koda ihtiyaç vardır.

Aşağıdaki kod yığına dört adet 4 baytlık veri depolar:

str w0, [sp, #-4]!
str w1, [sp, #-8]!
str w2, [sp, #-12]!
str w3, [sp, #-16]!

Kayıtların ilk dört baytı (w) - x0, x1, x2 ve x3 - yığındaki 16 ardışık bayt konumuna gönderilir. “Push” yerine “str” kullanımına dikkat edin. Her talimatın sonundaki ünlem işaretine dikkat edin. Bellek yığını aşağıya doğru büyüdüğünden, ilk dört baytlık değer, önceki yığın işaretçisi konumunun eksi dört bayt altındaki bir konumda başlar. Dört baytlık değerlerin geri kalanı aşağı doğru gidiyor. Aşağıdaki kod bölümü, dört baytı açmanın doğru (ve sırayla) eşdeğerini yapacaktır:

ldr w3, [sp], #0
ldr w2, [sp], #4
ldr w1, [sp], #8
ldr w0, [sp], #12

Pop yerine ldr işlem kodunun kullanıldığına dikkat edin. Ayrıca burada ünlem işaretinin kullanılmadığını unutmayın.

X0 (8 bayt) ve X1'deki (8 bayt) tüm baytlar yığındaki 16 baytlık konuma aşağıdaki şekilde gönderilebilir:

adım x0, x1, [sp, #-16]! ; 8 + 8 = 16

Bu durumda x2 (w2) ve x3 (w3) kayıtlarına ihtiyaç duyulmaz. İstenilen tüm baytlar X0 ve X2 kayıtlarındadır. Kayıt içeriği çiftlerini RAM'e depolamak için stp işlem kodunu not edin. Ayrıca ünlem işaretine de dikkat edin. Pop eşdeğeri:

ldp x0, x1, [sp], #0

Bu talimat için ünlem işareti yoktur. Bellekten iki µP kaydına ardışık iki veri konumu yüklemek için LDR yerine LDP işlem kodunu not edin. Ayrıca, bellekten bir µP kaydına kopyalamanın yükleme olduğunu, bir dosyayı diskten RAM'e yüklemekle karıştırılmaması gerektiğini ve bir µP kaydından RAM'e kopyalamanın depolama olduğunu unutmayın.

6.48 Alt Program
Altprogram, isteğe bağlı olarak bazı argümanlara dayalı olarak bir görevi gerçekleştiren ve isteğe bağlı olarak bir sonuç döndüren bir kod bloğudur. Geleneksel olarak, R0 ila R3 kayıtları (dört kayıt) argümanları (parametreleri) bir alt programa iletmek için kullanılır ve R0, bir sonucu arayan kişiye geri iletmek için kullanılır. 4'ten fazla girişe ihtiyaç duyan bir alt program, ek girişler için yığını kullanır. Bir altyordamı çağırmak için bağlantıyı veya koşullu dallanma talimatını kullanın. Bağlantı talimatının sözdizimi şöyledir:

BL etiketi

Burada BL işlem kodudur ve etiket altyordamın başlangıcını (adresini) temsil eder. Bu dal koşulsuz, ileri veya geri 128MB dahilindedir. Koşullu dallanma komutunun sözdizimi şöyledir:

B.cond etiketi

Burada koşul koşuldur; örneğin, eq (eşit) veya ne (eşit değil). Aşağıdaki program, iki bağımsız değişkenin değerlerini toplayan ve R0'da bir sonuç döndüren doadd alt yordamına sahiptir:

ALAN alt rotası, KOD, SADECE OKUYUNUZ; Bu kod bloğuna bir ad verin
GİRİŞ; Yürütülecek ilk talimatı işaretleyin
MOV r0, #10'u başlat; Parametreleri ayarlama
MOV r1, #3
BL adad; Alt programı çağır
MOV'u durdur r0, #0x18 ; angel_SWIreason_ReportException
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit
SVC#0x123456; ARM yarı barındırma (eski adıyla SWI)
doadd EKLE r0, r0, r1 ; Alt program kodu
BXlr; Alt programdan dönüş
;
SON ; Dosyanın sonunu işaretle

Eklenecek sayılar ondalık sayı 10 ve ondalık sayı 3'tür. Bu kod bloğundaki (program) ilk iki satır daha sonra açıklanacaktır. Sonraki üç satır R0 kaydına 10 ve R1 kaydına 3 gönderir ve ayrıca doadd alt yordamını çağırır. “Doadd” altprogramın başlangıcının adresini tutan etikettir.

Alt program sadece iki satırdan oluşur. İlk satır R0'ın 3 içeriğini R0'ın 10 içeriğine ekler, bu da R0'da 13 sonucunun elde edilmesini sağlar. BX işlem kodunu ve LR işlenenini içeren ikinci satır, alt programdan arayan koduna geri döner.

SAĞ
ARM 64'teki RET işlem kodu hala alt rutinle ilgilenir ancak 6502'deki RTS'den veya x64'teki RET'ten veya ARM 64'teki 'BX LR' kombinasyonundan farklı şekilde çalışır. ARM 64'te RET'in sözdizimi şöyledir:

DÜZ {Xn}

Bu talimat, programa arayan alt rutini olmayan bir alt rutinle devam etme veya sadece başka bir talimatla ve onu takip eden kod bölümüyle devam etme fırsatını verir. Xn, programın devam etmesi gereken adresi tutan genel amaçlı bir kayıttır. Bu talimat koşulsuz olarak dallara ayrılır. Xn verilmediği takdirde varsayılan olarak X30 içeriğine döner.

Prosedür Çağrı Standardı
Programcı, kodunun başkası tarafından yazılan bir kodla veya bir derleyici tarafından üretilen bir kodla etkileşime girmesini istiyorsa, programcının kayıt kullanımı kuralları konusunda kişi veya derleyici yazarı ile anlaşması gerekir. ARM mimarisi için bu kurallara Prosedür Çağrı Standardı veya PCS adı verilir. Bunlar iki veya üç taraf arasındaki anlaşmalardır. PCS aşağıdakileri belirtir:

  • Argümanları fonksiyona (alt program) aktarmak için hangi µP kayıtları kullanılır?
  • Arayan olarak bilinen, aramayı yapan fonksiyona sonucu döndürmek için hangi µP kayıtları kullanılır?
  • Aranan olarak bilinen, çağrılan işlevi hangi µP'nin kaydettiği bozulabilir
  • Aranan kişinin hangi µP kayıtları bozulamaz

6.49 Kesintiler
ARM işlemcisi için iki tür kesme kontrol devresi mevcuttur:

  • Standart Kesme Denetleyicisi: Kesme işleyicisi, kesme denetleyicisindeki bir aygıt bit eşlem kaydını okuyarak hangi aygıtın servise ihtiyacı olduğunu belirler.
  • Vektör Kesinti Denetleyicisi (VIC): Kesintileri önceliklendirir ve hangi cihazın kesintiye neden olduğunun belirlenmesini kolaylaştırır. Her kesmeyle bir öncelik ve bir işleyici adresi ilişkilendirildikten sonra, VIC yalnızca yeni bir kesmenin önceliği o anda yürütülen kesme işleyicisinden daha yüksekse işlemciye bir kesme sinyali gönderir.

Not : İstisna hatayı ifade eder. 32 bit ARM bilgisayarı için vektör kesme denetleyicisinin ayrıntıları aşağıdaki gibidir (64 bit benzerdir):

Tablo 6.49.1
32-Bit Bilgisayar için ARM Vektör İstisnası/Kesilmesi
İstisna/Kesinti Kısa gösterim Adres Yüksek Adres
Sıfırla SIFIRLA 0x00000000 0xffff0000
Tanımlanmamış talimat UNDEF 0x00000004 0xffff0004
Yazılım Kesintisi SWI 0x00000008 0xffff0008
Önceden getirip iptal et pabt 0x0000000C 0xffff000C
Kürtaj tarihi DABT 0x00000010 0xffff0010
Rezerve 0x00000014 0xffff0014
Kesinti İsteği IRQ 0x00000018 0xffff0018
Hızlı Kesinti İsteği FIQ 0x0000001C 0xffff001C

Bu, 6502 mimarisinin düzenlemesine benziyor; NMI , BR , Ve IRQ sıfır sayfasında işaretçiler olabilir ve karşılık gelen rutinler hafızanın üst kısmındadır (ROM OS). Önceki tablonun satırlarının kısa açıklamaları aşağıdaki gibidir:

SIFIRLA
Bu, işlemci açıldığında gerçekleşir. Sistemi başlatır ve farklı işlemci modları için yığınları ayarlar. Bu en yüksek öncelikli istisnadır. Sıfırlama işleyicisine giriş üzerine, CPSR SVC modundadır ve hem IRQ hem de FIQ bitleri 1'e ayarlanarak tüm kesintiler maskelenir.

kürtaj tarihi
İkinci en yüksek öncelik. Bu, geçersiz bir adrese okumaya/yazmaya çalıştığımızda veya yanlış erişim iznine erişmeye çalıştığımızda meydana gelir. Veri İptal İşleyicisine girildiğinde IRQ'lar devre dışı bırakılacak (I-bit seti 1) ve FIQ etkinleştirilecektir. IRQ'lar maskelenir, ancak FIQ'lar maskesiz tutulur.

FIQ
En yüksek öncelikli kesme olan IRQ ve FIQ'lar, FIQ ele alınana kadar devre dışı bırakılır.

IRQ
Yüksek öncelikli kesme, IRQ işleyicisi, yalnızca devam eden bir FIQ ve veri iptali olmadığında girilir.

Ön Getirmeyi İptal Et
Bu, veri iptaline benzer ancak adres getirme hatası durumunda gerçekleşir. İşleyiciye giriş yapıldığında IRQ'lar devre dışı bırakılır ancak FIQ'lar etkin kalır ve ön getirme iptali sırasında gerçekleşebilir.

SWI
SWI talimatı yürütüldüğünde ve diğer yüksek öncelikli istisnaların hiçbiri işaretlenmediğinde bir Yazılım Kesintisi (SWI) istisnası oluşur.

Tanımsız Talimat
Tanımsız Talimat istisnası, ARM veya Thumb talimat setinde olmayan bir talimat ardışık düzenin yürütme aşamasına ulaştığında ve diğer istisnaların hiçbiri işaretlenmediğinde ortaya çıkar. Bu, aynı anda gerçekleşebileceği için SWI ile aynı önceliktedir. Bu, yürütülmekte olan talimatın aynı anda hem SWI talimatı hem de tanımsız talimat olamayacağı anlamına gelir.

ARM İstisna yönetimi
Bir istisna meydana geldiğinde aşağıdaki olaylar meydana gelir:

  • CPSR'yi istisna modunun SPSR'sine saklayın.
  • PC, istisna modunun LR'sinde saklanır.
  • Bağlantı kaydı mevcut talimata göre belirli bir adrese ayarlanır. Örneğin: ISR için, LR = son yürütülen talimat + 8.
  • İstisna hakkında CPSR'yi güncelleyin.
  • PC'yi istisna işleyicinin adresine ayarlayın.

6.5 Talimatlar ve Veriler

Veri, değişkenleri (değerleriyle birlikte etiketler), dizileri ve diziye benzer diğer yapıları ifade eder. Dize bir karakter dizisi gibidir. Önceki bölümlerden birinde bir tamsayı dizisi görülüyor. Talimatlar işlem kodlarına ve bunların işlenenlerine atıfta bulunur. Belleğin bir sürekli bölümünde işlem kodları ve veriler karıştırılarak bir program yazılabilir. Bu yaklaşımın dezavantajları vardır ancak önerilmez.

Bir program önce talimatlarla, ardından verilerle (çoğul veri veridir) yazılmalıdır. Talimatlar ve veriler arasındaki ayrım yalnızca birkaç bayt olabilir. Bir program için hem komutlar hem de veriler hafızada bir veya iki ayrı bölümde bulunabilir.

6.6 Harvard Mimarisi

İlk bilgisayarlardan birine Harvard Mark I (1944) adı verilir. Katı bir Harvard mimarisi, program talimatları için bir adres alanı ve veriler için farklı, ayrı bir adres alanı kullanır. Bu, iki ayrı anının olduğu anlamına gelir. Aşağıdaki mimariyi göstermektedir:


Şekil 6.71 Harvard Mimarisi

Kontrol Ünitesi talimat kod çözümlemesini yapar. Aritmetik Mantık Birimi (ALU), aritmetik işlemleri kombinasyonel mantık (kapılar) ile yapar. ALU ayrıca mantıksal işlemleri de yapar (örneğin kaydırma).

6502 mikroişlemcide, veri (veri için tekil) etkileşime geçmeden önce µP kaydına gitmeden önce bir talimat önce mikroişlemciye (kontrol ünitesi) gider. Bunun için en az iki saat darbesi gerekir ve bu, talimat ve veriye eşzamanlı erişim değildir. Öte yandan, Harvard mimarisi, talimatlara ve verilere eşzamanlı erişim sağlar; hem talimat hem de veri aynı anda µP'ye girer (kontrol ünitesine işlem kodu ve µP kaydına veri), en az bir saat darbesinden tasarruf sağlar. Bu bir tür paralelliktir. Bu paralellik biçimi, modern anakartlardaki donanım önbelleğinde kullanılır (aşağıdaki tartışmaya bakın).

6.7 Önbellek

Önbellek (RAM), program talimatlarını veya verileri gelecekte kullanmak üzere geçici olarak saklayan yüksek hızlı bir bellek bölgesidir (ana belleğin hızıyla karşılaştırıldığında). Önbellek ana bellekten daha hızlı çalışır. Genellikle bu talimatlar veya veri öğeleri en son ana bellekten alınır ve kısa süre sonra tekrar ihtiyaç duyulması muhtemeldir. Önbelleğin temel amacı, aynı ana bellek konumlarına tekrar tekrar erişim hızını arttırmaktır. Etkili olması için, önbelleğe alınan öğelere erişimin, Yedekleme Deposu olarak adlandırılan talimatların veya verilerin orijinal kaynağına erişimden önemli ölçüde daha hızlı olması gerekir.

Önbelleğe alma kullanımdayken, ana bellek konumuna erişmeye yönelik her girişim, önbelleğin aranmasıyla başlar. Talep edilen öğe mevcutsa, işlemci bunu hemen alır ve kullanır. Buna Önbellek İsabeti denir. Önbellek araması başarısız olursa (bir önbellek kaçırma), talimat veya veri öğesinin yedekleme deposundan (ana bellek) alınması gerekir. İstenilen öğeyi alma sürecinde, yakın gelecekte kullanılması beklenen bir kopya önbelleğe eklenir.

Bellek Yönetim Birimi
Bellek Yönetim Birimi (MMU), anakarttaki ana belleği ve ilgili bellek kayıtlarını yöneten bir devredir. Geçmişte anakart üzerinde ayrı bir entegre devre vardı; ancak günümüzde genellikle mikroişlemcinin bir parçasıdır. MMU'nun günümüzde mikroişlemcinin bir parçası olan önbelleği (devreyi) de yönetmesi gerekir. Önbellek devresi geçmişte ayrı bir entegre devreydi.

Statik RAM
Statik RAM (SRAM), önemli ölçüde daha karmaşık devreler pahasına da olsa, DRAM'den çok daha hızlı bir erişim süresine sahiptir. SRAM bit hücreleri, entegre devre kalıbı üzerinde, eşdeğer miktarda veri depolayabilen bir DRAM cihazının hücrelerinden çok daha fazla yer kaplar. Ana bellek (RAM) tipik olarak DRAM'den (Dinamik RAM) oluşur.

Önbellek, işletim sistemleri ve uygulamalar tarafından yürütülen birçok algoritmanın referans konumunu göstermesi nedeniyle bilgisayar performansını artırır. Referans Lokalliği, yakın zamanda erişilen verilerin yeniden kullanılmasını ifade eder. Buna Geçici Yerellik denir. Modern bir anakartta önbellek, mikroişlemciyle aynı entegre devrededir. Ana bellek (DRAM) uzaktadır ve veri yollarından erişilebilir. Referans Yerelliği aynı zamanda mekansal yerelliğe de atıfta bulunur. Mekansal konum, fiziksel yakınlık nedeniyle daha yüksek veri erişimi hızıyla ilgilidir.

Kural olarak, önbellek bölgeleri, yedekleme deposuna (ana bellek) kıyasla küçüktür (bayt konumu sayısı bakımından). Önbellek aygıtları maksimum hız için tasarlanmıştır; bu da genellikle bunların, yedekleme deposunda kullanılan veri depolama teknolojisine göre bit başına daha karmaşık ve maliyetli olduğu anlamına gelir. Sınırlı boyutları nedeniyle önbellek aygıtları hızla dolma eğilimindedir. Önbellekte yeni bir girişi depolayacak uygun bir konum bulunmadığında, eski bir girişin atılması gerekir. Önbellek denetleyicisi, yeni girişin hangi önbellek girişinin üzerine yazılacağını seçmek için bir Önbellek Değiştirme Politikası kullanır.

Mikroişlemcili önbelleğin amacı, zaman içindeki önbellek isabet yüzdesini en üst düzeye çıkarmak, böylece en yüksek sürekli talimat yürütme hızını sağlamaktır. Bu amaca ulaşmak için önbellekleme mantığı, hangi talimatların ve verilerin önbelleğe yerleştirileceğini ve yakın gelecekte kullanılmak üzere saklanacağını belirlemelidir.

Bir işlemcinin önbellekleme mantığı, önbelleğe alınmış bir veri öğesinin önbelleğe yerleştirildikten sonra bir daha kullanılacağına dair güvence vermez.

Önbelleğe alma mantığı, zamansal (zaman içinde tekrarlanan) ve uzamsal (uzay) konum nedeniyle, önbelleğe alınan verilere yakın gelecekte erişilme ihtimalinin çok yüksek olması ihtimaline dayanır. Modern işlemcilerdeki pratik uygulamalarda, önbellek isabetleri genellikle bellek erişimlerinin yüzde 95 ila 97'sinde meydana gelir. Önbellek gecikmesi, DRAM gecikmesinin küçük bir kısmı olduğundan, yüksek önbellek isabet oranı, önbelleksiz tasarımla karşılaştırıldığında önemli bir performans artışına yol açar.

Önbellekle Bazı Paralellikler
Daha önce de belirtildiği gibi, iyi bir programın belleğinde verilerden ayrılmış talimatlar bulunur. Bazı önbellek sistemlerinde işlemcinin “solunda” bir önbellek devresi bulunur ve işlemcinin “sağında” başka bir önbellek devresi bulunur. Sol önbellek bir programın (veya uygulamanın) talimatlarını işler ve sağ önbellek aynı programın (veya aynı uygulamanın) verilerini işler. Bu daha iyi bir hız artışına yol açar.

6.8 Süreçler ve Konular

Hem CISC hem de RISC bilgisayarlarının süreçleri vardır. Yazılım üzerinde bir süreç var. Çalışan (çalıştırılan) bir program bir süreçtir. İşletim sistemi kendi programlarıyla birlikte gelir. Bilgisayar çalışırken işletim sisteminin bilgisayarın çalışmasını sağlayan programları da çalışır. Bunlar işletim sistemi işlemleridir. Kullanıcı veya programcı kendi programlarını yazabilir. Kullanıcının programı çalıştığında bu bir süreçtir. Programın montaj dilinde veya C veya C++ gibi üst düzey bir dilde yazılmış olması önemli değildir. Tüm işlemler (kullanıcı veya işletim sistemi) 'zamanlayıcı' adı verilen başka bir işlem tarafından yönetilir.

Bir iş parçacığı, bir sürece ait olan bir alt süreç gibidir. Bir süreç başlayabilir ve iş parçacıklarına bölünebilir ve daha sonra tek bir süreç olarak devam edebilir. İş parçacığı olmayan bir süreç ana iş parçacığı olarak düşünülebilir. İşlemler ve iş parçacıkları aynı zamanlayıcı tarafından yönetilir. Zamanlayıcının kendisi, işletim sistemi diskinde yerleşik olduğunda bir programdır. Bellekte çalışırken zamanlayıcı bir süreçtir.

6.9 Çoklu İşleme

Konular neredeyse süreçler gibi yönetilir. Çoklu işlem, birden fazla işlemin aynı anda çalıştırılması anlamına gelir. Yalnızca bir mikroişlemciye sahip bilgisayarlar vardır. Birden fazla mikroişlemciye sahip bilgisayarlar vardır. Tek bir mikroişlemci ile işlemler ve/veya iş parçacıkları aynı mikroişlemciyi serpiştirme (veya zaman dilimleme) tarzında kullanır. Bu, bir işlemin işlemciyi kullandığı ve tamamlanmadan durduğu anlamına gelir. Başka bir işlem veya iş parçacığı işlemciyi kullanıyor ve bitirmeden duruyor. Daha sonra başka bir işlem veya iş parçacığı mikroişlemciyi kullanır ve tamamlanmadan durur. Bu, zamanlayıcı tarafından kuyruğa alınan tüm işlemler ve iş parçacıkları işlemciden pay alana kadar devam eder. Buna eşzamanlı çoklu işlem denir.

Birden fazla mikroişlemci olduğunda eşzamanlılığın aksine paralel çoklu işlem söz konusudur. Bu durumda, her işlemci, diğer işlemcinin çalıştırdığından farklı olarak belirli bir işlemi veya iş parçacığını çalıştırır. Aynı anakart üzerindeki tüm işlemciler, farklı işlemlerini ve/veya farklı iş parçacıklarını aynı anda paralel çoklu işlemde çalıştırır. Paralel çoklu işlemedeki işlemler ve iş parçacıkları hala zamanlayıcı tarafından yönetilmektedir. Paralel çoklu işlem, eşzamanlı çoklu işleme göre daha hızlıdır.

Bu noktada okuyucu paralel işlemenin eşzamanlı işleme göre ne kadar hızlı olduğunu merak edebilir. Bunun nedeni, işlemcilerin aynı belleği ve giriş/çıkış bağlantı noktalarını paylaşmasıdır (farklı zamanlarda kullanmak zorunda olmaları). Önbellek kullanımıyla anakartın genel çalışması daha hızlı olur.

6.10 Çağrı

Bellek Yönetim Birimi (MMU), mikroişlemciye yakın veya mikroişlemci çipinde bulunan bir devredir. Bellek haritasını veya sayfalamayı ve diğer bellek sorunlarını ele alır. Ne 6502 µP ne de Commodore-64 bilgisayarının kendi başına bir MMU'su yoktur (ancak Commodore-64'te hala bir miktar bellek yönetimi vardır). Commodore-64, her sayfanın 256 olduğu sayfalama yoluyla belleği işler. 10 bayt uzunluğunda (100 16 bayt uzunluğunda). Belleği sayfalama yoluyla işlemesi zorunlu değildi. Hala sadece bir hafıza haritasına ve ardından kendilerini farklı belirlenmiş alanlara sığdıran programlara sahip olabilir. Sayfalama, bir veri veya programa sahip olamayacak çok sayıda bellek bölümüne sahip olmadan, belleğin verimli kullanımını sağlamanın bir yoludur.

X86 386 bilgisayar mimarisi 1985'te piyasaya sürüldü. Adres veri yolu 32 bit genişliğindedir. Yani toplam 2 32 = 4,294,967,296 adres alanı mümkündür. Bu adres alanı 1.048.576 sayfa = 1.024 KB sayfaya bölünmüştür. Bu sayfa sayısıyla bir sayfa 4.096 byte = 4 KB'tan oluşmaktadır. Aşağıdaki tabloda x86 32 bit mimarisi için fiziksel adres sayfaları gösterilmektedir:

Tablo 6.10.1
x86 Mimarisi için Fiziksel Adreslenebilir Sayfalar
Temel 16 Adres Sayfalar Temel 10 Adres
FFFFF000 – FFFFFFFF Sayfa 1.048.575 4.294.963.200 – 4.294.967.295
FFFFE000 – FFFFEFFF Sayfa 1.044.479 4.294.959.104 – 4.294.963.199
FFFFD000 – FFFFDFFF Sayfa 1.040.383 4.294.955.008 – 4.294.959.103
|
|
|
|
|
|
|
|
|
00002000 – 00002FFF Sayfa 2 8,192 – 12,288
00001000 – 00001FFF Sayfa 1 4.096 – 8.191
00000000 – 00000FFF Sayfa 0 0 – 4.095

Günümüzde bir uygulama birden fazla programdan oluşmaktadır. Bir program bir sayfadan az (4096'dan az) veya iki veya daha fazla sayfa alabilir. Yani bir uygulama, her sayfanın 4096 bayt uzunluğunda olduğu bir veya daha fazla sayfa alabilir. Her biri bir veya daha fazla sayfaya atanan farklı kişiler bir başvuru yazabilir.

Sayfa 0'ın 00000000H ile 00000FFF arasında olduğuna dikkat edin
sayfa 1 00001000H ila 00001FFFH arasındadır, sayfa 2 ise 00002000 arasındadır H – 00002FFF H , ve benzeri. 32 bitlik bir bilgisayar için, işlemcide fiziksel sayfa adreslemesi için iki adet 32 ​​bitlik kayıt vardır: biri temel adres için, diğeri indeks adresi için. Örneğin sayfa 2'nin bayt konumlarına erişmek için temel adresin kaydı 00002 olmalıdır. H bu, sayfa 2 başlangıç ​​adreslerinin ilk 20 bitidir (soldan). 000 aralığındaki bitlerin geri kalanı H FFF'ye H “indeks kaydı” adı verilen kayıt defterinde bulunur. Böylece sayfadaki tüm baytlara, indeks kaydındaki içeriği 000'dan başlayarak artırarak erişilebilir. H FFF'ye H . Etkili adresi elde etmek için indeks kaydındaki içerik, temel kayıtta değişmeyen içeriğe eklenir. Bu indeks adresleme şeması diğer sayfalar için de geçerlidir.

Ancak, montaj dili programının her sayfa için yazılması gerçekte bu şekilde değildir. Her sayfa için programcı 000. sayfadan başlayarak kodu yazar. H FFF sayfasına git H . Farklı sayfalardaki kodlar birbirine bağlı olduğundan, derleyici farklı sayfalardaki tüm ilgili adresleri birbirine bağlamak için dizin adreslemeyi kullanır. Örneğin, sayfa 0, sayfa 1 ve sayfa 2'nin bir uygulama için olduğunu ve her birinin 555 değerine sahip olduğunu varsayalım. H birbirine bağlı adresleri derleyici 555 olacak şekilde derler. H 0. sayfaya erişilecek, 00000 H temel kayıtta olacak ve 555 H indeks kaydında olacaktır. 555 ne zaman H 1. sayfaya erişilecek, 00001 H temel kayıtta olacak ve 555 H indeks kaydında olacaktır. 555 ne zaman H 2. sayfaya erişilecek, 00002 H temel kayıtta olacak ve 555H indeks kaydında olacaktır. Bu mümkündür çünkü adresler etiketler (değişkenler) kullanılarak tanımlanabilmektedir. Farklı programcılar, farklı bağlantı adresleri için kullanılacak etiketlerin adı üzerinde anlaşmaya varmalıdır.

Sayfa Sanal Belleği
Sayfalama, daha önce açıklandığı gibi, 'Sayfa Sanal Belleği' olarak adlandırılan bir teknikle belleğin boyutunu artırmak için değiştirilebilir. Daha önce açıklandığı gibi tüm fiziksel bellek sayfalarının bir şeyler (talimatlar ve veriler) içerdiğini varsayarsak, tüm sayfalar şu anda aktif değildir. O anda aktif olmayan sayfalar sabit diske gönderilir ve bunların yerini sabit diskte çalışması gereken sayfalar alır. Bu şekilde hafızanın boyutu artar. Bilgisayar çalışmaya devam ettikçe, pasif hale gelen sayfalar, sabit diskteki sayfalarla değiştirilir; bu sayfalar, hâlâ bellekten diske gönderilmiş sayfalar olabilir. Bütün bunlar Bellek Yönetim Birimi (MMU) tarafından yapılır.

6.11 Sorunlar

Okuyucunun bir sonraki bölüme geçmeden önce bir bölümdeki tüm sorunları çözmesi tavsiye edilir.

1) CISC ve RISC bilgisayar mimarilerinin benzerliklerini ve farklılıklarını verin. SISC ve RISC bilgisayarlarının her birine birer örnek verin.

2) a) CISC bilgisayarının bit cinsinden isimleri nelerdir: byte, word, doubleword, quadword ve double quadword.
b) RISC bilgisayarının bit cinsinden isimleri nelerdir: byte, halfword, word ve doubleword.
c) Evet veya Hayır. Doubleword ve quadword hem CISC hem de RISC mimarilerinde aynı anlama mı gelir?

3 a) x64 için, montaj dili talimatlarının bayt sayısı ne ile neye kadar değişir?
b) ARM 64 için tüm montaj dili talimatlarının bayt sayısı sabit mi? Evet ise, tüm talimatların bayt sayısı nedir?

4) x64 için en sık kullanılan montaj dili talimatlarını ve anlamlarını listeleyin.

5) ARM 64 için en sık kullanılan montaj dili komutlarını ve anlamlarını listeleyiniz.

6) Eski bilgisayar Harvard Architecture'ın etiketli blok diyagramını çizin. Talimatlarının ve veri özelliklerinin modern bilgisayarların önbelleğinde nasıl kullanıldığını açıklayın.

7) Bir süreç ile bir iş parçacığı arasındaki farkı ayırt edin ve çoğu bilgisayar sistemindeki süreçleri ve iş parçacıklarını yöneten sürecin adını verin.

8) Çoklu işlemenin ne olduğunu kısaca açıklayınız.

9) a) Sayfalamayı x86 386 µP bilgisayar mimarisine uygun olarak açıklayın.
b) Tüm belleğin boyutunu artırmak için bu sayfalama nasıl değiştirilebilir?