Neden ASM ile yazılan kodlar güncel mimarilerde daha yavaş çalışır...

Başlatan gerbay, 07 Eylül 2016, 00:33:32

z

Tamam bazı mağazalar özellikle de kitapçılar vs kitapları vs paket yapar iple bağlar sonra da bu tutamacı ipe geçirirdi.

Büyük olasılıkla Türkiye'deki bilgisayarlardan tonlarca delikli kart hurdası çıkıyordu. Birileri de bu kartları satın alıp bu bahsettiğim aparatı yapıyordu.

Belki de Türk icadı bir aparattır.  Haa bu arada bazen bu aparat normal kartondan da olurdu. Bazıları ise delikli kart kartonunun dan. Ancak dağıtıp içini  açınca delikli mi deliksiz mi anlaşılırdı.

Sen hangi senelerden bahsediyorsun?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

89 -90 yılı olsa gerek. Arkadaş bilgisayar almıiştı. Sabit diski vardı. 2Mb   müthiş bir olay.
Sabit diskli bilgisayar olması çok önemli idi. çünkü genelde sistem disketi ile açıyorduk. 5.25"  disk.

MC_Skywalker

ben 85 sonrasından bahsediyorum. zira 90'a varmadan o karton taşıma apartları kalmamıştı. ama 91-93 yıllarında staj yaptığım fabrikada PDP-8 vardı bobin sarma makinlarında kullanıyordu. aynı makinların motor sürücülerin olduğu kabinde punch kartlı sistem yardı.

z

Yok ben 70 li yıllardan bahsediyorum. 80 lerde delikli kart sistemleri tükenmek üzeredir.
Gerçi bizim işyerinde 90ların ortalarına kadar delikli band kullanımda idi.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ipek

73 yılında tahtakeleden ucuz kitaplar alırdım,taşıyabilmem için ücretsiz bir tane bunlardan verirlerdi,evde içini açtım IBM yada NCR yazdığını hatırlıyorum,o devirde büyüklerime sorduğumda ise bunlar ya üniversite sınav sonuçları yada DDY istatistik bordrolarıydı,çöpe gitmesin değerledirilsin amacı güdülmüştü,Google'nin görsel motoronda güzel anadilimiz ile bir saate yakın arama yaptım,sonuç sıfır....

z

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

taydin

C/C++ programlama ile uğraşan birisinin assembly bilmesi, onun uzmanlık seviyesi açısından birkaç level atlamasını sağlar. Mesele ASM ile program yazıp yazmamak değil, mesela, her C kod satırının işlemci seviyesinde nasıl icra edildiğini bilmek.

Özellikle gömülü sistemlerde program geliştirirken, PC lerde olduğu gibi hardware'in sağlam olduğunu varsayamıyorsunuz. Hem hardware hatalı olabilir, hem sizin yazdığınız kodda bug olabilir. Yaşadığım bir olayı anlatayım:

PCI bazlı bir kartın firmware'i üzerinde çalışıyorum, yeni bir versiyon hazırladım ve test edilmeye başlandı. Yeni versiyonda bazı özellikler yanlış çalışıyor, bir öncekinde bu sorun yok. Yeni versiyonda tek farklı olan şey, birkaç istatistik hesaplıyor ve bir kenara yazıyor, o kadar. O hesabı çıkarıyorum, hakkaten problem gidiyor! Test amaçlı başka bir kod ekliyorum, firmware başka şekilde sapıtıyor.

Hatta bir tek NOP (hiçbirşey yapma!) komutunu ekliyorum, program daha değişik davranıyor! Kafayı yiyeceğim! En sonunda bu programın çalıştığı MCU'ya lojik analizörü bağladım, tüm adres ve data hatlarını kaydetmeye başladım. Programın da ASM listingini aldım. Lojik analizörün kaydettiği komut akışı ile ASM listing'deki komut akışını karşılaştırdım. Ve problem şu çıktı: RAM adres dekoderindeki bir problemden dolayı, 4000H adresinden her zaman 00h değeri okunuyor! Dolayısıyla programa yeni birşeyler eklendiğinde, artık programın neresi 4000H e denk geliyorsa orası yanlış çalışıyor.

Assembly bildiğim için bu problemi çözebildim. Bilmeseydim de belki çözebilirdim ama haftalarca deneme yanılma gitmem gerekecekti.
Timur Aydın (mekatronik.org)

taydin

Bu arada ASM ile program yazmak sadece mazoşistlerin yaptığı, ticari olarak anlamsız bir uğraş olarak görmek de doğru değil. Şu örnekleri düşünün:

- Resetten itibaren 0000H adresinden komut icra etmeye başlayan bir MCU için startup kodunu yazacaksınız. Bunun assembly'de yazılması lazım, çünkü belli adreslere belli şeyler koymak istiyoruz, ayrıca MCU yapılandırması ile ilgili bazı temel assembly komutlarını çağırmamız gerekiyor.

- ARM'larda boot kodu, linux kernel'e kontrolü transfer ettiğinde, linux kernel'da ilk başta kısa bir assembly rutin çalışır. işlemci çalışma modu ve başka temel yapılandırmalar yapıldıktan sonra linux kernel'in C bölümü çalışmaya başlar.

- Dijital sinyal işleme yapam işlemcilerde (DSP), belli algoritmik yapıların çok hızlı bir şekilde yapılmasını sağlayan assembly komutlar var. Örneğin TI DSP'lerde iki değerin çarpımını alıp, sonucu akümülatöre toplayan ve bu işi TEK CLOCK DÖNGÜSÜNDE yapan assembly komutu var. Eğer çok hızlı bir şekilde FIR, IIR dijital filtre gerekiyorsa, bunu assembly'de yapmak çok mantıklı.

- Genel olarak, bir işlemciden, vereceği performansı son kırıntısına kadar almanız gerekiyorsa, maliyet de önemli değilse (askeri uygulamaları düşünün), gene bazı performans kritik kod bölümlerinin assembly ile yazılması mantıklıdır.

- Debugger yazanların ASM bilmesi lazım :) Çünkü debug edilen kodun dissambly listing'ini üretilmesi lazım.

- Derleyici yazanların ASM bilmesi lazım. Çünkü birçok derleyici, C/C++ kodunu önce assembly'ye dönüştürür, sonra da bir assembler nihai object kodunu üretir.

- Hacker'ların da ASM bilmesi lazım ki başarılı bir şekilde bir bilgisayara kötü niyetli kod koyabilsin.

- Virüs yazanların da ASM bilmesi lazım ki, var olan bir EXE'yi değiştirip kötü niyetli kod koyabilsin.

Siz şu anda bu faaliyetleri yapmıyor olabilirsiniz, ama yapanlar var ve belki birgün sizin de bunları yapmanız gerekecek! İran uranyum santrifüjlerini darmadağan eden StuxNet'i kimler yazdı? Merdivan altı hacker'lar değil, son derece yetkin bilgisayar mühendisleri yazdı!
Timur Aydın (mekatronik.org)

MuratHp

@taydin yazdıklarınızı okudum ve gayet güzeller fakat size bir soru sormak isterim. ASM öğrenmek isteyen biri için nasıl bir yol önerirsiniz?

ipek


taydin

Alıntı yapılan: MuratHp - 11 Eylül 2019, 20:12:30@taydin yazdıklarınızı okudum ve gayet güzeller fakat size bir soru sormak isterim. ASM öğrenmek isteyen biri için nasıl bir yol önerirsiniz?

Her işlemci mimarisinin assembly dili ve makina dili farklıdır. Eğer örneğin STM8 veya STM32 kullanıyorsanız, onun debugger'ini edinip yazdığınız bir C programını assembly seviyesinde adım adım çalıştırabilirsiniz. Burada register'leri, stack'ı ve program akışının her assembly komutu ile nasıl değiştiğini takip edebilirsiniz. Ayrıca kullandığınız STM32 için, derleyici firmasının yazdığı bir startup kodu vardır. Bu kodun, işlemcinin kontrolünü aldığında neler yaptığını anlamaya çalışmak (hepsini anlayamayabilirsiniz) da öğretici olacaktır.

Ama en iyi öğrenme şekli, ASM kullanmayı gerektirecek bir problem ile karşılaşmak, ve işvereninizin de sizden en kısa zamanda sonuç beklemesi olacaktır :)
Timur Aydın (mekatronik.org)

M.Salim GÜLLÜCE

Artık pek popüler olmasada oldukça fazla fan ı war genede.
80 lerde assembly yazdığım işlemci Z80 idi.
Bu günlerde artık o kadar çok kaynak warki bu konuda...
Online olarak assembly yazıp derleyip çalıştırabiliyorsunuz.
Biz bilgisayarın el kitabından 1000 e yakın kodun makine dili karşılığını basice aktarıp oradan çalıştırıyorduk.
Hem televizyon lazım hem de uygun bir ortam.
Kimse televizyonu size bırakmazdı.



Şimdilerde şu kadar basit..
http://clrhome.org/asm/
http://clrhome.org/table/

1K assebly program yazmıştım..
Bilgisayara yüklenebilen tüm programların proteklerini kırıp yeniden (Teyp kasedine) kaydediyordu.
1 hafta uğraşmıştım.
Lakin Assembly derleyici edindikten sonraydı.

devrecii

90'lı yıllarda Asm de usta olmak çok değerli bir şey olabilir ama artık kimseye asm de kod yazıyor diye aferin denmez. Çağımız tamamen metaryalist ,  Sen ne kadar iyi bir kodersin => Ne kadar para kazanıyorsun, istersen yama yap scprit kod yaz yeter ki paran çok olsun  ::ok  ::op

ipek

ilk bu bilgisayarı almıştım zannediyorum 84' idi,Korhan Sökmen üstadın yanında merhum Dr Deniz Tanyel vardı,Edge Connector'e 2 yda 4K bir EEprom takmıştı kasetten buna yükleniyordu, kartın üstündeki düğmeye basıp Randomize USR Bilmemne yazıyorduk program 2 saniyede açılıyordu dehşet bişeydi.Sir Clive Sinclair bunu düşünememişti...

taydin

Alıntı yapılan: iboibo - 13 Eylül 2019, 00:22:0190'lı yıllarda Asm de usta olmak çok değerli bir şey olabilir ama artık kimseye asm de kod yazıyor diye aferin denmez. Çağımız tamamen metaryalist ,  Sen ne kadar iyi bir kodersin => Ne kadar para kazanıyorsun, istersen yama yap scprit kod yaz yeter ki paran çok olsun  ::ok  ::op

Mesele assembly ile kod yazmak değil, mesele bilgisayar programlama konusunda derinlikli bilgiye sahip olmak. Böyleleri rahatlıkla piyasa ortalamasının 10 katı ücretle çalışır ve işten ayrıldıklarında yerleri çok zor doldurulur.

Sizin dediğiniz "yaz bir Java programı, bitir işi" tarzı eleman piyasada çok. Bunlar Mikrosoft teknolojilerini çok iyi bilirler, MSVC ve C# a bayılırlar. Ama çok az ücretle çalışırlar ve çalıştıkları yerden istifa ettikleri zaman zaten onların yerini alacak on kişi vardır sırada. Daha önce karşılaştıkları bir problem olursa, onu hemen script falan bir şekilde hallederler. Ama daha önce karşılaşmadıkları bir problem ortaya çıkarsa, internette de başkasının yaptığı aynı şeyi bulamıyorlarsa afallayıp kalırlar. Birisi "şöyle bir kontrol sistemi lazım" deyince "al bir arduino yap" derler, ama sıfırdan bir arduino donanımının tasarımını yapmayı bilmezler.

Evet, Türkiye bugüne kadar böyle herşeyi hazır alarak bir şekilde idare etti. Ama ABD ambargosu yakın, Avrupa da bu ambargoya katılacak ve artık hazırına alıştığımız şeyleri eskisi gibi kolay alamayacağız. O zaman işte herşeyi sıfırdan yapmamız gerekecek, ama yapana kadar da büyük bedel ödeyeceğiz.
Timur Aydın (mekatronik.org)