Assembly dili

Assembly dili, bilgisayara ne yapması gerektiğini doğrudan söylemek için kullanılabilen bir programlama dilidir. Bir assembly dili, sayılar yerine sözcükler kullanması dışında, bilgisayarın anlayabileceği makine koduna neredeyse tamamen benzer. Bir bilgisayar bir assembly programını doğrudan anlayamaz. Ancak, programdaki sözcükleri temsil ettikleri sayılarla değiştirerek programı kolayca makine koduna dönüştürebilir. Bunu yapan bir programa assembler denir.

Assembly dilinde yazılan programlar genellikle bilgisayarın programı çalıştırırken gerçekleştirdiği küçük görevler olan talimatlardan oluşur. Bunlara talimat denir çünkü programcı bunları bilgisayara ne yapması gerektiğini bildirmek için kullanır. Bilgisayarın talimatları takip eden kısmı işlemcidir.

Bir bilgisayarın assembly dili düşük seviyeli bir dildir, yani yalnızca bir bilgisayarın doğrudan anlayabileceği basit görevleri yapmak için kullanılabilir. Daha karmaşık görevleri yerine getirmek için, karmaşık görevin bir parçası olan basit görevlerin her birinin bilgisayara anlatılması gerekir. Örneğin, bir bilgisayar ekranına bir cümlenin nasıl yazdırılacağını anlamaz. Bunun yerine, assembly ile yazılmış bir program, cümlenin yazdırılmasında yer alan tüm küçük adımların nasıl yapılacağını söylemelidir.

Böyle bir assembly programı, bir insan için çok basit ve temel görünen bir şeyi birlikte yapan çok sayıda talimattan oluşacaktır. Bu da insanların bir assembly programını okumasını zorlaştırır. Buna karşılık, yüksek seviyeli bir programlama dilinde PRINT "Merhaba, dünya!" gibi tek bir talimat olabilir ve bu talimat bilgisayara sizin için tüm küçük görevleri yerine getirmesini söyler.

Assembly Dilinin Geliştirilmesi

Bilgisayar bilimcileri programlanabilir makineleri ilk inşa ettiklerinde, bunları doğrudan makine koduyla programladılar; bu, bilgisayara ne yapması gerektiğini söyleyen bir dizi sayıdır. Makine dilini yazmak çok zordu ve uzun zaman alıyordu, bu yüzden sonunda montaj dili yapıldı. Assembly dili bir insanın okuması için daha kolaydır ve daha hızlı yazılabilir, ancak yine de bir insanın kullanması için insan dilini taklit etmeye çalışan yüksek seviyeli bir programlama dilinden çok daha zordur.

Makine kodunda programlama

Makine kodunda programlamak için, programcının her bir komutun ikili (veya onaltılı) olarak neye benzediğini bilmesi gerekir. Bir bilgisayar için makine kodunun ne anlama geldiğini hızlı bir şekilde anlamak kolay olsa da, bir programcı için zordur. Her komutun çeşitli biçimleri olabilir ve bunların hepsi insanlara sadece bir grup sayı gibi görünür. Birinin makine kodu yazarken yaptığı herhangi bir hata, ancak bilgisayar yanlış şeyi yaptığında fark edilecektir. Hatayı bulmak zordur çünkü çoğu insan makine koduna bakarak ne anlama geldiğini anlayamaz. Makine kodunun neye benzediğine bir örnek:

05 2A 00

Bu onaltılık makine kodu bir x86 bilgisayar işlemcisine akümülatöre 42 eklemesini söyler. Makine kodunu bilen bir kişi için bile bunu okumak ve anlamak çok zordur.

Bunun Yerine Assembly Dilini Kullanma

Assembly dilinde her komut, anımsatıcı adı verilen kısa bir sözcük olarak yazılabilir ve ardından sayılar veya diğer kısa sözcükler gibi başka şeyler gelir. Anımsatıcı, programcının bilgisayara bir şey yapmasını söylemek için gereken makine kodundaki tam sayıları hatırlamak zorunda kalmaması için kullanılır. Assembly dilindeki anımsatıcılara örnek olarak veri ekleyen add ve veriyi bir yerden başka bir yere taşıyan mov verilebilir. 'Anımsatıcı' yaygın olmayan bir kelime olduğundan, bazen bunun yerine komut türü veya sadece komut ifadesi kullanılır, genellikle de yanlış kullanılır. İlk kelimeden sonraki kelimeler ve sayılar ne yapılacağı hakkında daha fazla bilgi verir. Örneğin, bir toplama işleminden sonra gelenler hangi iki şeyin toplanacağını, taşıma işleminden sonra gelenler ise neyin taşınacağını ve nereye konulacağını söyleyebilir.

Örneğin, önceki bölümdeki makine kodu (05 2A 00) assembly'de şu şekilde yazılabilir:

 ax,42 ekle

Assembly dili ayrıca programcıların programın kullandığı gerçek verileri daha kolay bir şekilde yazmasına olanak tanır. Çoğu assembly dilinin kolayca sayı ve metin oluşturma desteği vardır. Makine kodunda, pozitif, negatif veya ondalık gibi her farklı sayı türünün manuel olarak ikiliye dönüştürülmesi ve metnin sayı olarak her seferinde bir harf tanımlanması gerekirdi.

Assembly dili, makine kodunun bir soyutlaması olarak adlandırılan şeyi sağlar. Assembly kullanırken, programcıların sayıların bilgisayar için ne anlama geldiğinin ayrıntılarını bilmesine gerek yoktur, bunun yerine assembler bunu çözer. Assembly dili aslında programcının makine koduyla kullanabileceği işlemcinin tüm özelliklerini kullanmasına izin verir. Bu anlamda, assembly dili çok iyi ve nadir bir özelliğe sahiptir: soyutladığı şeyle (makine kodu) aynı şeyleri ifade etme yeteneğine sahipken kullanımı çok daha kolaydır. Bu nedenle, makine kodu neredeyse hiçbir zaman bir programlama dili olarak kullanılmaz.

Sökme ve Hata Ayıklama

Programlar tamamlandığında, işlemcinin onları gerçekten çalıştırabilmesi için zaten makine koduna dönüştürülmüş olurlar. Ancak bazen, programda bir hata (bug) varsa, programcılar makine kodunun her bir parçasının ne yaptığını söyleyebilmek isteyeceklerdir. Disassembler'lar, programın makine kodunu anlaşılması çok daha kolay olan assembly diline geri dönüştürerek programcıların bunu yapmasına yardımcı olan programlardır. Makine kodunu assembly diline dönüştüren sökücüler, assembly dilini makine koduna dönüştüren assembler'ların tam tersini yapar.

Bilgisayar Organizasyonu

Bir assembly dili programının nasıl çalıştığını anlamak için bilgisayarların nasıl organize edildiğini, çok düşük bir seviyede nasıl çalışıyor göründüklerini anlamak gerekir. En basit düzeyde, bilgisayarların üç ana parçası vardır:

  1. Veri ve talimatları tutan ana bellek veya RAM,
  2. talimatları uygulayarak verileri işleyen bir işlemci ve
  3. giriş ve çıkış (bazen I/O olarak kısaltılır), bilgisayarın dış dünya ile iletişim kurmasını ve verileri daha sonra geri alabilmesi için ana belleğin dışında saklamasını sağlar.

Ana Bellek

Çoğu bilgisayarda bellek baytlara bölünmüştür. Her bayt 8 bit içerir. Bellekteki her baytın, baytın bellekte nerede olduğunu belirten bir sayı olan bir adresi de vardır. Bellekteki ilk baytın adresi 0'dır, bir sonrakinin adresi 1'dir ve bu böyle devam eder. Belleği baytlara bölmek onu bayt adreslenebilir yapar çünkü her bayt benzersiz bir adres alır. Bayt belleklerin adresleri, bir baytın tek bir bitine atıfta bulunmak için kullanılamaz. Bir bayt, adreslenebilen en küçük bellek parçasıdır.

Bir adres bellekteki belirli bir baytı ifade etse de, işlemciler arka arkaya birkaç bayt bellek kullanılmasına izin verir. Bu özelliğin en yaygın kullanımı, genellikle bir tamsayı olan bir sayıyı temsil etmek için arka arkaya 2 veya 4 bayt kullanmaktır. Bazen tek baytlar da tamsayıları temsil etmek için kullanılır, ancak yalnızca 8 bit uzunluğunda olduklarından, yalnızca 28 veya 256 farklı olası değeri tutabilirler. Bir satırda 2 veya 4 bayt kullanmak, farklı olası değerlerin sayısını sırasıyla 216 , 65536 veya 232 , 4294967296'ya yükseltir.

Bir program harf, sayı veya başka herhangi bir şeyi temsil etmek için bir bayt veya bir dizi baytı arka arkaya kullandığında, bu baytlar nesne olarak adlandırılır çünkü hepsi aynı şeyin parçasıdır. Nesnelerin hepsi aynı bellek baytlarında saklansa da, baytların nasıl anlaşılması gerektiğini söyleyen bir 'tür' varmış gibi ele alınır: tamsayı, karakter veya başka bir tür (tamsayı olmayan bir değer gibi). Makine kodu, talimatlar olarak yorumlanan bir tür olarak da düşünülebilir. Tür kavramı çok ama çok önemlidir çünkü nesneye ne yapılıp ne yapılamayacağını ve nesnenin baytlarının nasıl yorumlanacağını tanımlar. Örneğin, pozitif bir sayı nesnesinde negatif bir sayı saklamak geçerli değildir ve bir tamsayıda bir kesir saklamak geçerli değildir.

Çok baytlı bir nesneye işaret eden (onun adresi olan) bir adres, o nesnenin ilk baytının adresidir - en düşük adrese sahip bayt. Bir kenara not edilmesi gereken önemli bir nokta, bir nesnenin türünün ne olduğunu - hatta boyutunu - adresine bakarak söyleyemeyeceğinizdir. Aslında, bir nesnenin ne tür olduğunu ona bakarak bile söyleyemezsiniz. Bir assembly dili programının hangi bellek adreslerinin hangi nesneleri tuttuğunu ve bu nesnelerin ne kadar büyük olduğunu takip etmesi gerekir. Bunu yapan bir program tür güvenlidir çünkü nesnelere yalnızca türlerine göre yapılması güvenli olan şeyleri yapar. Bunu yapmayan bir program muhtemelen düzgün çalışmayacaktır. Çoğu programın aslında bir nesnenin türünün ne olduğunu açıkça saklamadığını, sadece nesnelere tutarlı bir şekilde eriştiğini unutmayın - aynı nesne her zaman aynı tür olarak ele alınır.

İşlemci

İşlemci, ana bellekte makine kodu olarak saklanan talimatları çalıştırır (yürütür). Depolama için belleğe erişebilmenin yanı sıra, çoğu işlemci o anda üzerinde çalışılan nesneleri tutmak için birkaç küçük, hızlı, sabit boyutlu alana sahiptir. Bu alanlara register adı verilir. İşlemciler genellikle üç tür talimat yürütür, ancak bazı talimatlar bu türlerin bir kombinasyonu olabilir. Aşağıda x86 assembly dilindeki her türün bazı örnekleri verilmiştir.

Bellek okuma veya yazma talimatları

Aşağıdaki x86 assembly dili komutu, 4096 (onaltılık olarak 0x1000) adresindeki bayttan 2 baytlık bir nesneyi 'ax' adlı 16 bitlik bir yazmaca okur (yükler):

        mov ax, [1000h]

Bu assembly dilinde, bir sayının (veya bir register adının) etrafındaki köşeli parantezler, sayının kullanılması gereken verinin adresi olarak kullanılması gerektiği anlamına gelir. Veriye işaret etmek için bir adresin kullanılmasına dolaylama denir. Bir sonraki örnekte, köşeli parantezler olmadan, başka bir yazmaç olan bx'e aslında 20 değeri yüklenir.

        mov bx, 20

Dolaylama kullanılmadığından, gerçek değerin kendisi yazmacın içine yerleştirilmiştir.

İşlenenler (anımsatıcıdan sonra gelenler) ters sırada görünürse, bellekten bir şey yükleyen bir komut bunun yerine belleğe yazar:

        mov [1000h], ax

Burada, 1000h adresindeki bellek ax değerini alır. Bu örnek bir öncekinden hemen sonra çalıştırılırsa, 1000h ve 1001h adreslerindeki 2 bayt, 20 değerine sahip 2 baytlık bir tamsayı olacaktır.

Matematiksel veya mantıksal işlemler gerçekleştiren talimatlar

Bazı talimatlar çıkarma gibi işlemler veya değil gibi mantıksal işlemler yapar:

Bu makalenin başlarındaki makine kodu örneği assembly dilinde bu şekilde olacaktır:

        ax ekle, 42

Burada, 42 ve ax toplanır ve sonuç tekrar ax içinde saklanır. x86 assembly'de bir bellek erişimini ve matematiksel işlemi bu şekilde birleştirmek de mümkündür:

        ax ekle, [1000h]

Bu komut, 1000h'de saklanan 2 baytlık tamsayının değerini ax'ye ekler ve cevabı ax'de saklar.

        veya ax, bx

Bu komut ax ve bx kayıtlarının içeriğinin or değerini hesaplar ve sonucu ax'e geri kaydeder.

Bir sonraki talimatın ne olacağına karar veren talimatlar

Genellikle talimatlar bellekte göründükleri sırayla, yani assembly kodunda yazıldıkları sırayla yürütülür. İşlemci bunları birbiri ardına çalıştırır. Ancak, işlemcilerin karmaşık şeyler yapabilmesi için, kendilerine verilen verilerin ne olduğuna bağlı olarak farklı talimatları yürütmeleri gerekir. İşlemcilerin bir şeyin sonucuna bağlı olarak farklı talimatlar yürütme yeteneğine dallanma denir. Bir sonraki talimatın ne olması gerektiğine karar veren talimatlara dallanma talimatları denir.

Bu örnekte, birinin belirli bir kenar uzunluğuna sahip bir kareyi boyamak için ihtiyaç duyacağı boya miktarını hesaplamak istediğini varsayalım. Ancak, ölçek ekonomisi nedeniyle boya mağazası bu kişiye 100 x 100'lük bir kareyi boyamak için gereken boya miktarından daha azını satmayacaktır.

Boyamak istedikleri karenin uzunluğuna bağlı olarak almaları gereken boya miktarını hesaplamak için bu adımlar dizisini buluyorlar:

  • kenar uzunluğundan 100 çıkarın
  • cevap sıfırdan küçükse, kenar uzunluğunu 100 olarak ayarlayın
  • kenar uzunluğunu kendisiyle çarpın

Bu algoritma, ax'in kenar uzunluğu olduğu aşağıdaki kodla ifade edilebilir.

        mov bx, ax     alt bx, 100    jge devam et   mov ax, 100 devam et: mul ax

Bu örnek birkaç yeni şeyi tanıtmaktadır, ancak ilk iki talimat tanıdıktır. Bunlar ax değerini bx'e kopyalar ve ardından bx'ten 100 çıkarır.

Bu örnekteki yeni şeylerden biri, genel olarak assembly dillerinde bulunan bir kavram olan etiket olarak adlandırılır. Etiketler programcının istediği herhangi bir şey olabilir (assembler'ın kafasını karıştıracak bir komut adı olmadığı sürece). Bu örnekte etiket 'continue' şeklindedir. Bu etiket assembler tarafından bir komutun adresi olarak yorumlanır. Bu durumda, mult ax'in adresidir.

Bir diğer yeni kavram ise bayraklardır. X86 işlemcilerde, birçok komut işlemcide ne yapılacağına karar vermek için bir sonraki komut tarafından kullanılabilecek 'bayraklar' belirler. Bu durumda, bx 100'den küçükse, sub sonucun sıfırdan küçük olduğunu söyleyen bir bayrak ayarlayacaktır.

Bir sonraki komut 'Jump if Greater than or Equal to' ifadesinin kısaltması olan jge'dir. Bu bir dallanma komutudur. İşlemcideki bayraklar sonucun sıfırdan büyük veya sıfıra eşit olduğunu belirtirse, işlemci bir sonraki komuta gitmek yerine devam etiketindeki komuta, yani mul ax'a atlar.

Bu örnek iyi çalışıyor, ancak çoğu programcının yazacağı gibi değil. Çıkarma komutu bayrağı doğru şekilde ayarlar, ancak üzerinde çalıştığı değeri de değiştirir, bu da ax'in bx'e kopyalanmasını gerektirir. Çoğu assembly dili, geçtikleri argümanların hiçbirini değiştirmeyen, ancak yine de bayrakları doğru şekilde ayarlayan karşılaştırma komutlarına izin verir ve x86 assembly bir istisna değildir.

        cmp ax, 100    jge devam et   mov ax, 100 devam et: mul ax

Şimdi, ax'den 100 çıkarmak, bu sayının sıfırdan küçük olup olmadığına bakmak ve ax'ye geri atamak yerine, ax değişmeden bırakılır. Bayraklar hala aynı şekilde ayarlanır ve atlama hala aynı durumlarda yapılır.

Giriş ve Çıkış

Giriş ve çıkış bilgi işlemin temel bir parçası olsa da, assembly dilinde bunların yapılmasının tek bir yolu yoktur. Bunun nedeni, G/Ç'nin çalışma şeklinin sadece ne tür bir işlemciye sahip olduğuna değil, bilgisayarın kurulumuna ve çalıştırdığı işletim sistemine bağlı olmasıdır. Örnekler bölümünde Merhaba Dünya örneği MS-DOS işletim sistemi çağrılarını, ondan sonraki örnek ise BIOS çağrılarını kullanmaktadır.

Assembly dilinde I/O yapmak mümkündür. Aslında, assembly dili genellikle bir bilgisayarın yapabildiği her şeyi ifade edebilir. Bununla birlikte, assembly dilinde her zaman aynı şeyi yapan toplama ve dallanma talimatları olsa da, assembly dilinde her zaman G/Ç yapan hiçbir talimat yoktur.

Dikkat edilmesi gereken önemli nokta, G/Ç'nin çalışma şeklinin herhangi bir assembly dilinin parçası olmadığıdır çünkü işlemcinin çalışma şeklinin bir parçası değildir.

Assembly Dilleri ve Taşınabilirlik

Assembly dili doğrudan işlemci tarafından çalıştırılmasa da - makine kodu çalıştırılır, yine de onunla çok ilgisi vardır. Her işlemci ailesi farklı özellikleri, talimatları, talimatların neler yapabileceğine ilişkin kuralları ve hangi talimat kombinasyonlarına nerede izin verildiğine ilişkin kuralları destekler. Bu nedenle, farklı işlemci türleri hala farklı assembly dillerine ihtiyaç duyar.

Assembly dilinin her sürümü bir işlemci ailesine bağlı olduğundan, taşınabilirlik denen şeyden yoksundur. Taşınabilirliği olan veya taşınabilir olan bir şey bir bilgisayar türünden diğerine kolayca aktarılabilir. Diğer programlama dilleri taşınabilir olsa da, assembly dili genel olarak taşınabilir değildir.

Assembly Dili ve Yüksek Seviye Diller

Assembly dili, işlemcinin tüm özelliklerini kullanmanın kolay bir yolunu sunsa da, çeşitli nedenlerden dolayı modern yazılım projelerinde kullanılmamaktadır:

  • Basit bir programı assembly'de ifade etmek çok çaba gerektirir.
  • Makine kodu kadar hataya eğilimli olmasa da, assembly dili hatalara karşı çok az koruma sağlar. Neredeyse tüm assembly dilleri tip güvenliği sağlamaz.
  • Assembly dili modülerlik gibi iyi programlama uygulamalarını desteklemez.
  • Her bir assembly dili komutunu anlamak kolay olsa da, onu yazan programcının amacının ne olduğunu söylemek zordur. Aslında, bir programın assembly dilini anlamak o kadar zordur ki, şirketler insanların programlarını parçalarına ayırmasından (assembly dilini elde etmesinden) endişe duymazlar.

Bu dezavantajların bir sonucu olarak, çoğu proje için Pascal, C ve C++ gibi yüksek seviyeli diller kullanılmaktadır. Bu diller, programcıların işlemciye her adımda ne yapması gerektiğini söylemekle uğraşmak yerine fikirlerini daha doğrudan ifade etmelerini sağlar. Programcının aynı miktarda kodla ifade edebileceği fikirler daha karmaşık olduğu için yüksek seviyeli olarak adlandırılırlar.

Derlenmiş yüksek seviyeli dillerde kod yazan programcılar, kodlarını assembly diline dönüştürmek için derleyici adı verilen bir program kullanırlar. Derleyicileri yazmak assembler'ları yazmaktan çok daha zordur. Ayrıca, yüksek seviyeli diller programcıların işlemcinin tüm özelliklerini kullanmasına her zaman izin vermez. Bunun nedeni yüksek seviyeli dillerin tüm işlemci ailelerini destekleyecek şekilde tasarlanmış olmasıdır. Sadece tek tip işlemciyi destekleyen assembly dillerinin aksine, yüksek seviyeli diller taşınabilirdir.

Derleyiciler montajcılardan daha karmaşık olsalar da, onlarca yıldır derleyicilerin yapımı ve araştırılması onları çok iyi hale getirmiştir. Artık çoğu projede assembly dilini kullanmak için pek bir neden kalmadı, çünkü derleyiciler genellikle programların assembly dilinde nasıl ifade edileceğini programcılar kadar iyi ya da daha iyi çözebiliyor.

Örnek Programlar

x86 Assembly ile yazılmış bir Merhaba Dünya Programı:

adosseg .model small .stack 100h .data hello_message db 'Merhaba, Dünya! ',0dh,0ah,'$' .code main proc mov ax,@data mov ds,ax mov ah,9 mov dx,offset hello_message int 21h mov ax,4C00h int 21h main endp end main

NASM x86 assembly'de yazılmış BIOS kesmelerini kullanarak ekrana bir sayı yazdıran bir işlev. Assembly'de modüler kod yazmak mümkündür, ancak ekstra çaba gerektirir. Bir satırda noktalı virgülden sonra gelen her şeyin bir yorum olduğunu ve assembler tarafından yok sayıldığını unutmayın. Assembly dili koduna yorum koymak çok önemlidir çünkü büyük assembly dili programlarını anlamak çok zordur.

; void printn(int number, int base); printn: push    bp      mov     bp, sp itmek        balta   itmek   bx      itmek   cx      itmek   dx      itmek   si      mov     si, 0       mov     ax, [bp + 4]   ; numara       mov     cx, [bp + 6]   baz gloop:     inc        si             ; dize uzunluğu        mov     dx, 0          ; sıfır dx     div        cx             ; tabana bölme cmp     dx, 10         Ge 10 mu?      jge     num         ekle    dx, '0'        ; dx'e sıfır ekleyin   jmp     anum num:      ekle    dx, ('A'- 10)      ; hex değeri, dx - 10'a 'A' ekleyin. anum:    itme    dx             ; dx'i yığına yerleştirin.       cmp     ax, 0          devam etmeli miyiz?    jne        gloop  mov     bx, 7h         ; kesme tloop'u için:  pop     balta          ; değerini al    mov     ah, 0eh        kesinti için   int     10h            ; karakter yaz     dec     si             karakterden kurtulun   jnz     tloop  pop            si         pop     dx      pop     cx      pop     bx      pop     balta   pop     bp      ret        4

Sorular ve Yanıtlar

S: Assembly dili nedir?


C: Assembly dili, bilgisayara ne yapması gerektiğini doğrudan söylemek için kullanılabilen bir programlama dilidir. Sayılar yerine sözcükler kullanması dışında neredeyse tam olarak bir bilgisayarın anlayabileceği makine koduna benzer.

S: Bir bilgisayar bir assembly programını nasıl anlar?


C: Bir bilgisayar bir assembly programını doğrudan anlayamaz, ancak programdaki sözcükleri temsil ettikleri sayılarla değiştirerek programı kolayca makine koduna dönüştürebilir. Bu işlem bir assembler kullanılarak yapılır.

S: Assembly dilindeki talimatlar nelerdir?


C: Bir assembly dilindeki talimatlar, bilgisayarın programı çalıştırırken gerçekleştirdiği küçük görevlerdir. Talimat olarak adlandırılırlar çünkü bilgisayara ne yapması gerektiğini söylerler. Bilgisayarın bu talimatları takip etmekten sorumlu kısmına işlemci denir.

S: Assembly ne tür bir programlama dilidir?


C: Assembly dili düşük seviyeli bir programlama dilidir, yani yalnızca bir bilgisayarın doğrudan anlayabileceği basit görevleri yapmak için kullanılabilir. Daha karmaşık görevleri yerine getirmek için, her bir görevi kendi bileşenlerine ayırmak ve her bir bileşen için ayrı ayrı talimatlar sağlamak gerekir.

S: Bunun yüksek seviyeli dillerden farkı nedir?


C: Yüksek seviyeli dillerde PRINT "Merhaba, dünya!" gibi tek komutlar olabilir, bu da bilgisayara tüm bu küçük görevleri bir assembly programında yapmanız gerektiği gibi tek tek belirtmenize gerek kalmadan otomatik olarak gerçekleştirmesini söyleyecektir. Bu da yüksek seviyeli dillerin insanlar tarafından okunmasını ve anlaşılmasını birçok ayrı talimattan oluşan assembly programlarından daha kolay hale getirir.

S: İnsanlar için bir assembly programını okumak neden zor olabilir?


C: Çünkü ekrana bir şey yazdırmak veya veri kümeleri üzerinde hesaplamalar yapmak gibi karmaşık bir görev için birçok ayrı talimatın belirtilmesi gerekir - doğal insan dilinde ifade edildiğinde çok basit ve basit görünen şeyler - bu nedenle bir talimatı oluşturan birçok kod satırı olabilir, bu da bilgisayarların dahili olarak nasıl çalıştığını bilmeyen insanlar için bu kadar düşük bir seviyede takip etmeyi ve içinde neler olup bittiğini yorumlamayı zorlaştırır.

AlegsaOnline.com - 2020 / 2023 - License CC3