Sunu3 TR

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 29

Subscribe to DeepL Pro to translate larger documents.

Visit www.DeepL.com/pro for more information.

Talimatlar : Bilgisayarın Dili


III
Özge ÖZTİMUR KARADAĞ
ALKÜ - Bilgisayar Mühendisliği Bölümü
Geçen Hafta
MIPS'te Mantıksal İşlemler
• Mantıksal Talimatlar:
• Bitleri kelimeler içinde gruplama

• sll : sola kaydırma mantıksal


• srl : sağa kaydırma mantıksal
Vardiya Çalışması
• Bir sözcükteki tüm bitleri sola veya sağa taşıyarak boşalan bitleri
0'larla doldurur.
• Örn: $s0 kaydedicisi 4 bit sola kaydırılır:

• Shamt: vardiya miktarı


Sola Kaydırma - Çarpma
• Sola i bit kaydır: 2 ile çarpmai
VE İşlemi
• Bit bit ve işlem
• $t2:
• $t1:

• $t0:

• Maske işlemi
VEYA İşlem
• Bit bit VEYA İşlemi
• $t2:
• $t1:

• $t0:
Çalışmıyor
• Bir işlenen alır
• 0'ları 1'lere, 1'leri 0'lara dönüştürür

• MIPS tasarımcıları, tüm komutların üç işlenen aldığından emin olmak için NOT yerine
NOR kullanır.
• A NE 0 = DEĞIL (A VEYA 0) = DEĞIL (A)
• $t1:
• $t3: 0

• $t0:
andi & ori
• AND ve OR mantıksal işlemlerinde sabitleri kullanmayı etkinleştirin:
• andi: ve hemen
• ori: veya acil

• Soru 16 bitlik bir sabiti addi kullanarak 32 bitlik bir yazmaca nasıl
yerleştirebiliriz? Aynı yerleştirmeyi andi kullanarak nasıl
yapabiliriz?
• addi - işaret uzantısı ile
• andi - 0'ları ilk 16 bit ile değiştirir.
Kontrol Talimatları
• Bir sonraki PC değerini yürütmezseniz kullanılır.
• Kontrolü komut alanının başka bir bölümüne aktarın.
• İki grup talimat:
• Şubeler
• Kontrolün şartlı devri
• Hedef adres mevcut bilgisayar konumuna yakındır
• artırılmış PC değerinden dal mesafesi anlık alana sığar
• örneğin: döngüler, eğer ifadeleri
• Jumpes
• kontrolün koşulsuz devri
• hedef adresin mevcut bilgisayar konumundan uzakta olması
• örneğin: alt rutin çağrıları
MIPS Dallanma Talimatları
• Dallanma talimatları: koşullu kontrol transferi
• Karşılaştırın:
• iki kaydın eşitliği veya eşitsizliği
• Opcode rs, rt, hedef
• rs, rt: karşılaştırılacak kayıtlar
• hedef: şube hedefi
• <,>,≤, ≥ bir kaydın & 0
• Opcode rs, hedef
• rs: örtük bir 0 ile karşılaştırılacak kayıt
• hedef: şube hedefi
• Dallanmayı izleyen komuttan işaretli bir yer değiştirme (komut sayısı olarak ifade edilir) olan bir hedefe dallanma
• Bazı örnekler:
beq $t0, $t1, Hedef # $t0 == $t1 ise Hedefe dallanma
bgez $t0, Hedef # $t0 ≥ 0 ise Hedefe dallanma
MIPS Dallanma Talimatları
• beq, bne, bgtz, bltz, bgez, blez
• tek koşullu dallanma işlem kodlarıdır
• İki kayıt arasındaki >, <, ≤, ≥ karşılaştırmaları için slt (set on less
then) kullanın
• Slt rd, rs, rt # rs <rt ise, rd = 1; aksi takdirde rd = 0
• Bir örnek:
• ilk yazmaç operandı ikinciden küçükse dallanma slt $t0,
$t1, $t2 # $t1 < $t2 ise $t0 = 1; aksi halde $t0 = 0 bne
$t0, $0, L1 # $t0 = 1 ise L1'e dallanma
• Pseudoinstruction:
• assembler tarafından sağlanan ancak donanımda uygulanmayan bir
komut
• assembly dili programcıları tarafından bir kısayol olarak kullanılır
• blt $t1, $t2, L1 # $t1 < $t2 ise L1'e dallanma için sözde komut
assembler şu şekilde genişler:
slt $at, $t1, $t2
bne $at, $0, L1
(assembler tarafından $at ($1) kullanımına
dikkat edin) ayrıca bgt, bge, ble
MIPS Dallanma Talimatları
• Dallanma talimatları için hangi talimat biçimi kullanılır?
MIPS Brach Talimatları
• Şube Mesafesi
• Bir şube hedef adresinin yer değiştirmesini genişletme
• Ofset, işaretli 16 bitlik bir ofsettir
• Baytları değil, talimat sayısını temsil eder
• Artırılmış PC'ye eklendi
• Hedef adres bir bayt adresi değil, bir sözcük adresidir
• Alt 2 bit sıfırdır
• Assembly dilinde, sembolik bir hedef adres kullanın
MIPS Dallanma Talimatları
• Şube Mesafesi
• Şube ofseti iyi bir boyuttadır
• 16 bit ofset
• Artırılmış PC'ye eklendi
• Bir sözcük adresini temsil eder

• Peki ya şube hedefine ulaşmak için çok küçükse?


• Assembler koşulsuz bir atlama ekler
• Koşullu dallanma orijinal yanlış yol koduna dallanır (koşul yanlış olarak
değerlendirilir) veya atlama yoluyla düşer
• Örnek:
MIPS Atlama Talimatları
• Atlama talimatları: koşulsuz kontrol devri
MIPS Atlama Talimatları
MIPS Karar Verme Talimatları
• eğer, ifadelere gidin:
• eşitse brach (beq)

• brach if not equal (bne)

• Örn: Aşağıdaki kod ifadesinde f, g, h, i ve j değişkenlerdir. Eğer f ile j arasındaki beş değişken
$s0 ile $s4 arasındaki beş yazmaca karşılık geliyorsa, bu ifade için derlenmiş MIPS kodu
nedir?
j: koşulsuz şube

Derleyiciler sıklıkla yüksek seviyeli programlama dilinde görünmeyen dallar ve


etiketler oluşturur. Açıkça yazma yükünden kaçınmak
Yüksek seviyeli programlama dillerinde yazmanın bir avantajı olarak etiketler ve dallar.
MIPS'te Döngüler
• Örnek:
• i ve k'nın $s3 ve $s5 yazmaçlarına karşılık geldiğini ve dizi kaydının
tabanının $s6'da olduğunu varsayın. Bu C deyimine karşılık gelen
MIPS assembly kodu nedir?
• i 🡪 $s3
• k -> $s5
• Tasarruf tabanı $s6
Temel Blok
• Dallanma içermeyen bir talimat dizisi
• Bloğun sonunda dallanma ve bloğun başında etiketler olabilir.
• Derlemenin ilk aşamalarında, program temel bloklara ayrılır.
Karşılaştırma Talimatları
• slt (set on less than)
• İki kaydı karşılaştırır, birincisi ikincisinden küçükse üçüncü bir kaydı
1'e ayarlar, aksi takdirde üçüncü kaydı 0'a ayarlar.

• slti (acilden daha az olarak ayarlanmış)


• Sabit ile karşılaştırma
İşaretsiz Karşılaştırma
• sltu (işaretsizden daha aza ayarlanmış)
• sltiu (sen on less than immediate unsigned)

• İşaretli ve işaretsiz karşılaştırma arasındaki fark nedir?

• Eski:
• $s0:
• $s1:
• Karşılaştırmalardan sonra kayıtlardaki değerler nedir?

$t0:1
$t1:0
Kasa / Anahtar
• If-then-else ifadeleri şeklinde olabilir
• atlama adresi tablosu: alternatif talimat sırasını gösteren tablo.
• Tablo etiketlerin adreslerini tutar.

• jr (atlama kaydı), kayıttaki adrese atlamayı ve yürütmeye oradan


devam etmeyi sağlar.
Kasa/Anahtar Örneği
• C kodu:
switch(k){
case 0: f=i+j;break;
durum 1: f=g+h;break;
durum 2: f=g-h;break;
durum 3: f=i-j;break;
}
f, g, h, i, j, k değişkenlerinin $s0-$s5 yazmaçlarına karşılık geldiğini, $t2 değerinin 4 olduğunu ve $t4 değerinin JumpTable için temel adres
olduğunu varsayarak verilen C kodunu MIPS assembly diline dönüştürün.
slt $t3, $s5, $zero# test if k<0
bne $t3, $zero, Exit# k<0 ise Exit'e git
slt $t3, $s5, $t2# test if k<4 C kodu:
beq $t3, $zero, Exit# k>=4 ise Exit'e git switch(k){
add $t1, $s5, $s5#$t1 =2*k case 0: f=i+j;break;
add $t1, $t1, $t1#$t1 =4*k
add $t1, $t1, $t4#$t1= JumpTable[k] adresi
durum 1: f=g+h;break;
lw $t0, 0($t1) #$t0=JumpTable[k] durum 2: f=g-h;break;
jr $ #t0 yazmacına göre atlama durum 3: f=i-j;break;
L0: add $s0,$s3,$s4
j Çıkış }
L1: $s0,$s1,$s2 ekleyin
j Çıkış
L2: sub $s0,$s1,$s2
j Çıkış
L3: sub $s0,$s3,$s4
Çıkın:
Referanslar
• Bilgisayar Organizasyonu ve Tasarımı: Donanım/Yazılım Arayüzü,
Hennessy, Patterson

You might also like