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

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir