Benim işlemcim seninkini, benim C senin ASM yi döver.

Başlatan z, 13 Kasım 2009, 16:01:07

gallavi

Alıntı Yap
C# dilide C++ ve ansi C89 dilinden daha iyi bunuda kabul ediyorum

C# C++ dan daha iyi bi programlama dilideğildir. Bence :)
DemirHan=gallavi;

z

Biraz yavaşladık ve ortalığı karıştıralım.

Asm balık tutmayı bilmeyenlere pratik olarak balık yemeyi öğretir.

Yeni bir işlemci için C derleyicisi geliştiren bir grup düşünün. Bu grup içinde asm bilmeyen birini düşünebilirmisiniz?

Bir derleyicinin hatalarını bulmak için derleyicinin asm kodlarına bakmak gerekir.

Bir program hatalı çalışıyor ve sebebi anlaşılamıyorsa,

Zamanlama açısından kritik bir fonksiyon yazılacaksa,

Kütüphane fonksiyonları ile kullanılamayan bir donanım için etkili bir kod yazılacaksa

ASM kaçınılmazdır.

Acaba C nin standart kütüphaneleri hangi dille yazılıyor? Gerçekten merak ettim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

azimli

yazdıkların eminim doğrudur ben asm yi hiç bilmiyorum ne olduğunun kavramı hakkında bilgim var ama asm ile işlemci üzerine program yazmayı bilmiyorum yola ANSI C89 ile çıktım ve zamanla C bilgimi arttırıp C++ 'ıda atlayıp direkt C# daldım.C# da şu anda beklemede kaldı zamanla pc üzerinden görsel yazılımlar yazarım diye birde işlemcilerin gelecekteki çok çekirdekli yapısının derleyicisini C# olarak gördüğüm için bir ara eğitimini alıp ufak bir giriş yaptım diyebilirim.C den iyi anlayan biri için C# öğrenimi karmaşık gelmese gerek.ama birden öğrenilecek diyede bir şey yok uygulama ve hataları ayıklama vede zaman şart.

işlemci olarakda microchip firmasının dsPIC30F ve PIC32 haricindeki işlemcileri bilmem ticari olarakda hep dsPIC30F lerle çalışma yaptım bu zmana kadar benim gözüme kestirdiğim kendi işlerimde dışarıya aldığım ve yaptığım işlerin tamamında dsPIC30F serisi bana yettide arttı bile denilebilir bu işlemci ailesi ile yaptığım işlerimdeki bir takım uzamalar ve gecikmelerin nedenide ne bu işlemcileri programladığım C nin suçu nede işlemcinin suçu, suç benim yazılım ve donanım eksikliğimdendir.buda bilirsiniz zamanla deneyim ve tecrübeyle araştırmayla risk almakla aşılır derler

evet asm bilmediğim açık ortada elden bir şey gelmez ama çok şey kaybedeceğimi sanmam

bazen benimde çok tekrarlı kullandığım komut ve fonksiyonlarımı özel bir matematiksel hesaplamalar sıralamalı işlemlerimi kütüphane dosyası şeklinde kaydettiğim olur ve programı derlerken "*.h" şeklinde kod sayfama ilave edip derlediğim olur ama hepsi C üzerinden kod yazımla olur.asm ile değil ama derlediğim programlarımın asm kod üretimlerinede bakarım gözüme çarpan risk gördüğüm noktaları telafi aderim ama C30 derleyicisi zamanla geliştirildiğinden eskisi gibi müdahalelerim yok denecek kadar az aslında müdahele etmiyorum diyebilirim bunu asm yi bilmeden nasıl yapıyorum işlemcinin 84 komutlu asm yazım kelimelerinin yaptığı gecikme saykıllarını kataloğundan bilerek.

z,

zaten ben derleyicimin hazır olarak kullandığım kütüphane dosyalarımın içini bir şekilde göremiyorum siz görebiliyormusunuz varsa bir yöntem görmek istediğim kütüphane dosyaları var aslında orası ne ile yazılı bakmış da oluruz hem.

derleyici olarak Microchip C30 (16 bit dsPIC30F işlemcisi için), C32 (32 bit
PIC32 işlemcisi için) kullanıyorum.

nasıl görürüz hazır kütüphane fonksiyonlarının içini varmı bir yöntemi ben göremiyorum.

z

Bırakın interneti, kitabın bile bulunamadığı dönemlerde mağara duvarlarına hayvan resimleri kazırken sıkça örneğini vediğim y=sin(x) fonksiyonunu ecnebiler nasıl hesaplamış diye merak ederken

void main()
{
    .asm {
               nop
               nop
               nop
               nop
               nop
               nop
             }

    y=sin(x);

    .asm {
               nop
               nop
               nop
               nop
               nop
               nop
             }
}


gibi kod parçacığını derleyip exe üretir ardından da debug bilmemne.exe
yaparak asm kodların arasına dalardık.

Daha sonrada 5..6 tane nop arasına sıkışmış satırı bulup call edilen yeri saatlerce günlerce izlerdik.

Aynı işlemi sen de disasm ile yapabilirsin.

Ama neyseki günümüzde resimleri mağara duvarlarına değilde kağıda hatta bilgisayarda çiziyoruz.

İnternette yok yok.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

bigbey

Ben de C bilmeyen ve ASM kullanan biri olarak. Hep C öğrenmek istemişimdir. Fakat Bu güne kadar ASM ile kendi ihtiyaçlarımı karşılayacak kütüphaneyi oluşturduğum için ASM bana hiç zor gelmiyor.
Bana göre ben de mutlaka iyi düzeyde C editörünü iyi kullanan biri olmalıyım diye düşünüyorum.
Şimdi bir soru var aklımda; Acaba,

C de bir işlem yapsak. Örnek;
A=PORTC   ; A değişkenine portcyi atayalım
B=PORTD   ; B değişkenine portcyi atayalım
Z= 15 x A   ; Z değişkenini oluşturalım
Y= 12 x B   ; Y değişkenini oluşturalım
bu tip bir yazılımıda C derleyicisi nasıl davranır merak ediyorum.

kullandığı satırları hex dosyasından disassembly yapıp ASM yazılım mantığı ile karşılaştırmak isterim.
TA6R

azimli

bu kodların Microchip dsPIC30F serisi için C30 dan asm dönüşüm kodlarını çok merak ediyorsan ve istoyorsan hemen derler ve buraya yapıştırıım ama bu C30 kodların ASM30 daki karşılığının çok farkedeceğini sanmam hatta kılesik bir ASM30 kullanıcısından daha öz çalışan kısa bir kod verirsede şaşırmam.

sizden anladığım siz ASM yi iyi derecede biliyorum bununla işlerimi zaten kalıplaştırdığım için rahatça zorlanmadan yapıyorum demenize karşın ama C yide illa öğrenmeliyim diye bir istekde bulunuyorsunuz.

tam aksine ben ASM nin mümkünse yüzünü bile görmek istemiyor hatta
ilaveten insana yakın dillerden delphi/pascal - basic dillerine bile göz atmıyorum gerek yok çünkü benim bu işin eğitimini aldığım çevreden ve işin profesyonellerinden gördüğüm bu.

geleceğin çok çekirdekli 32-64 bit endüstriyel mikro işlemcilerinin programlanacağı dil C temelli diller C++ ve C# olacak.gelişmeler ve yatırımlar bu alanda.

bir ara asm olmadan işlemci programlanmaz işin mantığı temeli kavranmaz ilk okulu bitirmeden ortaokula başlanmaz tarzı lafları çok dinleyip hiç takmamıştım kararımdan son derece memnunum
birde milleti dinleyip 16-18F serisi ile asm üzerinden işe başlasaydım yanmıştım.hemde cayır cayır.

ama bundan 7 sene önce ve daha eskisi olsaydı dsPIC ve C30 derleyicisinden bahsetmek ne mümkündü mecburen ozaman eski tarz çalışmala devam edecektik.

bigbey

@azimli,
Herhangi bir yarıştırma durumu yok. sadece nasıl bir mantıkla işi yapacağını merak ettim. hangi seri olursa olsun. hex dosyasından inceleme yapmak için söylemiştim.
TA6R

XX_CİHAN_XX

#include	<pic.h>
	__CONFIG	(WDTDIS & XT);

unsigned char a, b;
unsigned int z, y;
void main (void)
{
	a = PORTA;
	b = PORTB;
	z = a*15;
	y = b*12;
}


:10000000012805089300060892000F30960097011A
:10001000130894009501E7230C309600970112080D
:0800200094009501E72300287C
:1007CE0098019901141CF12B160898070318990A21
:1007DE00170899070310960D970D0310950C940C9E
:1007EE0015081404031DE92B190895001808940028
:0207FE000800F1
:02400E00F93F78
:00000001FF


Alıntı yapılan: "HI-TECH C PRO for the PIC10/12/16 MCU family  V9.65PL1
"

Program space        used        45

NOT: Çarpma sonucu 16 bit olarak kaydediliyor.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

CLR

Alıntı yapılan: "bigbey"Ben de C bilmeyen ve ASM kullanan biri olarak. Hep C öğrenmek istemişimdir. Fakat Bu güne kadar ASM ile kendi ihtiyaçlarımı karşılayacak kütüphaneyi oluşturduğum için ASM bana hiç zor gelmiyor.
Bana göre ben de mutlaka iyi düzeyde C editörünü iyi kullanan biri olmalıyım diye düşünüyorum.
Şimdi bir soru var aklımda; Acaba,

C de bir işlem yapsak. Örnek;
A=PORTC   ; A değişkenine portcyi atayalım
B=PORTD   ; B değişkenine portcyi atayalım
Z= 15 x A   ; Z değişkenini oluşturalım
Y= 12 x B   ; Y değişkenini oluşturalım
bu tip bir yazılımıda C derleyicisi nasıl davranır merak ediyorum.

kullandığı satırları hex dosyasından disassembly yapıp ASM yazılım mantığı ile karşılaştırmak isterim.


C ve asm için basit bir soru,
Z= 15 x A için A'yı 4 kez sola kaydırır(16A) ve 1 tane A çıkarır. Aynı asm'deki gibi.
Y= 12 x B için B'yi 3 kez sola kaydırır(8B) sonra 8B/2 ile toplar.
Sadece birkaçtane shift işlemi
Knowledge and Experience are Power

XX_CİHAN_XX

#include	<pic.h>
	__CONFIG	(WDTDIS & XT);

unsigned char a, b;
unsigned int z, y;
void main (void)
{
	a = PORTA;
	b = PORTB;

	z = a<<4;
	z -= a;

	y = b<<3;
	y += y>1;	
}


:10000000012805088F0006088E0092009301031056
:10001000920D930D0310920D930D0310920D930DFD
:1000200012089000130891000030110202300319E9
:10003000100200300318013090070318910A0028BD
:02400E00F93F78
:00000001FF


Alıntı yapılan: "HI-TECH C PRO for the PIC10/12/16 MCU family  V9.65PL1"
Program space        used      32

:)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Erol YILMAZ

C dilini insanlar pek anlamamış diye düşünüyorum...
C ile ASM rekabet halinde olan diller değil.

C den gereksiz yere çekiniyorsunuz,
C kod yazımını kolaylaştıracak ve
Düşündüğünüz "özel yöntemler" var ise bunları yapmanıza da izin verecektir.

Çünkü C orta seviyeli kültürümüze saygılı,
gelenek ve göreneklerine bağlı hoş bir programlama dilidir.

2 komut arası delayms(10);  yazan "coder" kılıklı insanlara bile müsamaha
gösterecek kadar yumuşak huyludur.

İyi kullanmayı bilene AT olur, YOL olur, AŞ olur :P

Kısacası C iyidir :D

CLR

Asm ve C ikisini birlikte bilen ile sadece C bilen arasındaki fark
@Cihan arkadaşımızın örneği gösteriyor. Bu aradaki fark çok küçük bir program içinde böyle büyük programlarda bukadar olmaz ama sadece matematiksel işlemler farkı artırır. Ama bunun içinde asm kullanılmaz. Asm sadece kritik yerlerde kullanılmalı. Sadece aradaki mantık farkını göstermek istedim.

Sadece C bilenlerin yöntemi:

void main (void)
{
   a = PORTA;
   b = PORTB;
   z = a*15;
   y = b*12;
} 

 Program space used 45


Asm + C bilenlerin yöntemi

void main (void)
{
   a = PORTA;
   b = PORTB;

   z = a<<4;
   z -= a;

   y = b<<3;
   y += y>1;   
} 

 Program space used 32


Asm temeli bence gerekli ama asm'de uzman olmak gerekmez. Bu benim gibiler için geçerli değil, zamanında asm'den başka seçenek yoktu ve
asm için çok uzun zaman harcadım. En sonunda asm içinde herşeyi macroya döktüm sonra baktım ki C zaten bir çeşit macro, sonra C'yi öğrendim.  
Asm ile 8K altında olan işlemcilere/projelere isteyen yazabilir ama zaman kaybı olur bence. 8K üzerindeki işlemciye /projeye asm ile mesela 10000 satır program yazarsa bence vakti çok bolmuş derim. Bu söylediklerim 8bit için geçerli 16-32bit için konuşmaya gerek yok.
Knowledge and Experience are Power

z

Evet çok doğru, C, asm deki macro yazımın gelişmiş hali diyebiliriz.

Asm  severler macro yazım sayesinde esneklik kazandıklarını iddia ederler ve haklılar da.

Örneğin

32 bit toplama rutinini bir kere yazdıktan sonra

ADD32 macro a,b,c gibi bir tanımla

a,b değişken adresleri gönderildiğinde toplanmış sonuç c içinde hazır olur.

Bu da satır satır kod yazmaya gore muthiş bir kolaylıktır.

Fakat bu kolaylık C deki

c=a+b; yazımının getirdiği konforla kıyaslanamaz bile.

Yalnız asm yazma işlemini 8 bitle sınırlayamazsınız.  16 ve 32 bit işlemcilere binlerce satır kod yazılacak projelerin işlemcisi diye  bakmamak lazım.

16 ve 32 bit işlemciler bir çırpıda 16 yada 32 bit üzerinde işlem yapan işlemci demektir. Adam 8 bit işlemci ile 4 byte veriyi asm rutinle toplayacağım diye göbeği çatlıyor buna rağmen kod yazmadan çekinmiyorsa 32 bit işlemcide bunu tek satırda bitirecek demektir.

Bu arada asm severlerden eemkutayın 32 gozlu yazılımını daha asagıya indirecek varmı?

Fakat eemkutayın burda yaptığı üçkağıt asm bilmekle alakalı değil.

Programı hangi işlemci için derlediniz?

Daha önce vurgulamıştım. Elektronikçi adam muhasebe programı mı yazacak kontrol programımı.

Eğer muhasebe programı yazacaksa ve asm kullanıyorsa fazla eşelemeyin kendi haline bırakın.

Yok kontrol amaçlı, 32 bit işlemciye asm kod yazıyorsa vardır bildiği. Laf söylemeyin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

CLR

Alıntı yapılan: "z"
Yalnız asm yazma işlemini 8 bitle sınırlayamazsınız.  16 ve 32 bit işlemcilere binlerce satır kod yazılacak projelerin işlemcisi diye  bakmamak lazım.

Fakat eemkutayın burda yaptığı üçkağıt asm bilmekle alakalı değil.

Bu arada asm severlerden eemkutayın 32 gozlu yazılımını daha asagıya indirecek varmı?

Yok kontrol amaçlı, 32 bit işlemciye asm kod yazıyorsa vardır bildiği. Laf söylemeyin.


z kardeş, yukarıdaki sözlerine cevaben yazıyorum, sen öncelikle benim sitemi gezip, tamamladığım projeler bölünümü ve mesleki geçmişimi okuyup daha sonra yazdıklarımı okusaydın ve cevap yazsaydın eminim aynı cümleleri kullanmazdın. Kulaktan duyma bilgilerle yorum yapanlardan değilimdir.

Çünkü  STM32(arm cortex m3) ve LPC21xx serisi (ARM7) sadece C ile PIC16/PIC18/PIC24/dspic30 serine asm ve C ile "endüstriyel projeler" yapmış kişiden bahsediyorsun.

Orada amacım, asm + C dili bilenlerin C derleyicisine müdahale ederek asm'ye çok yakın kod ürettirmesini göstermekti. Programınızı siz istediğiniz yolla yapabilirsiniz.

Şimdi ben sorayım, aynı derleyici , C dili kullanarak(C içinde asm yok)  , değişkenlerin büyükleri sabit kalmak şartıyla ve aynı işlemci kullanılarak asm çıktısı 32satırdan daha az program yazabilir misin?

Kutay
Knowledge and Experience are Power

z

Alıntı YapYalnız asm yazma işlemini 8 bitle sınırlayamazsınız. 16 ve 32 bit işlemcilere binlerce satır kod yazılacak projelerin işlemcisi diye bakmamak lazım.

Dedim ve kusura bakma bizde gerçeklerden bahsediyoruz.

Kullandığın işlemciyi ve derleyiciyi söyle biraz kafa yoralım. Bakarsın 32 satırın altına iner yada evet bunun sınırı 32 satırmış deriz.

Peki C içinde neden asm kullanılmasını yasakladın?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com