Yazan : Şadi Evren ŞEKER
Bir çeviricinin (assembler), Assembly dilinde yazılmış kaynak kod üzerinden iki kere geçen halidir. Buna göre tek geçişli olan çeviricilerden farklı olarak dilde etiket (label) tanımları yapılabilmekte ve bu etiketlerin anlamları bir tabloda tutularak daha sonra kullanılabilmektedir.
2 geçişli bir çevirici sırasıyla şu işlemleri yapar:
1. Geçişte koddaki semboller (symbols) ve ifadeler (literals) tanımlanarak hafızada saklanır
2. Geçişte hedef kod (makine dilinde) üretilir
Bu sırada kullanılan veri yapıları (data structures) aşağıda açıklanmıştır:
Konum Sayacı (Location Counter (LC)): Programın mevcut durumunu ve bundan sonra çalıştıracağı kodu tutar.
İşlem Kodu Tercüme Tablosu (Op-code translation table): Kaynak kodda bulunan komutların ve dile özgü işlemlerin çevirimlerini tutan tablodur.
Dizgi saklama belleği (String Storage Buffer (SSB)): Kaynak kodda geçen dizgilerin (kelime ve yazıların (strings)) ASCII kod karşılıklarının durduğu tablodur.
İşaret tablosu (Configuration Table): Dizgi saklama belleğinde saklanan dizgilerin üretilecek olan kodda tam olarak nereye tekabül ettiğini tutan tablodur. (bir dizginin (string) anlamı belirlenince bu tablo marifetiyle üretilecek koddaki yeri bulunarak buraya yazılacaktır)
Yukarıdaki şekilde iki geçişli bir çeviricinin ( two pass assembler) her iki aşaması tasvir edilmiştir. Buna göre assembly dilindeki kaynak kodun üzerinden bir kere geçen çevirici (Assembler) dildeki sembolleri ve dizgileri (Strings) algılayarak geçici bir veri yapısında tutar. İkinci geçişte ise bu veri yapılarını da kullanarak makine dilini üretir.
Aşağıda örnek bir kod ve bu kodun çalışması anlatılmıştır:
Yukarıdaki temsili kod’un çalıştırılması sırasında oluşturulan tablolar aşağıda verilmiştir:
Sembol Tablosu
Symbol | Address |
LOOP | 0106 |
LIST | 0112 |
COUNT | 0115 |
Yukarıdaki tabloda, kodda bulunan her sembol için ( dilde tanımsız kelimeler için) birer kayıt tutulması ve bu kelimelerin geçtiği adreslerin tutulmasıdır.
İşaret Tablosu:
Adresi (offset) |
Sembolun SSB işaretçisi |
0007 | DC00 |
000A | DC05 |
İşaret tablosunda (configuration table) da kodumuzda karşılığı belirsiz olan sembollerin adresleri bulunur. Örneğin LIST kelimesi SSB içerisinde DC00 adresindedir. LIST kelimesinin işaret tablosuna yerleştirilme sebebi ise henüz tanımlanmadan kodun içerisinde kullanılmış olmasıdır.
SSB:
DC00 |
4CH | L |
DC01 |
49H | I |
DC02 |
53H | S |
DC03 |
54H | T |
DC04 |
5EH | Ayırma sembolü ASCII olarak |
DC05 |
C |