Assembly hakkında

Başlatan Haydut, 27 Mayıs 2014, 18:45:03

Haydut

@z

Doğru anlamışsın beni.

Ben Assembly dilini öğrenmeye başlamadan önce bu dil hakkında internetten araştırma yaptım ve edindiğim malumatlara dayanarak bir kitap aldım "80x86 Assembly dili, yazarı  Yrd.Doç.Dr. Ahmet Tevfik İnan"

Internetten edindiğim bilgiler;

Assembly dili işletim sisteminden fazla bilgisayarda ki işlemciye bağlı olduğunu ve en önemlisi de intel 80x86 Assembly dili formatında hazırlanan bir uygulama intelin yeni ürettiği işlemcilerde çalışacak olması...

Tabi ki 8 bitlik bir intel işlemcisinde 16 ya da 32 bitlik bir işlem yapamazsın.  fakat intelin 32 bitlik bir işlemcisinde nasıl olur da 8, 16 bitlik işlem yapılamaz ?

intelin hayranlarına garezi var sanırım.


Ben 80x86 Assembly formatında hazırladığım uygulamayı yeni çıkarttığı işlemcisinde çalıştıramazsam batsın bu intel!









RaMu

Tagli hocam birara senin glcd için asm relocatable kodlarını görmüştüm
sonra araştırdım bende yazdım birtane glcd relocatable
asm ana programımıza dahil edip rahatlıkla kullanılabilecek şekilde hazırladım
pinleride ayrı bir .h dosyasında tanımlanattım kullanımı gayet kolay gözüküyordu,
ama 16f877a için hazırladığım bu kodu 16f harici birşeyde kullanmak için gerçekten yeniden yazmak gerekiyor,
ayrıca relocatable kod yazımıda ana program içinde bazı sıkıntılar doğuruyor
özellikle değişken tanımlamaları kısmında.

Tabi başka şekildede kullanılabilir,
misal yazdığım 2*16 lcd programını tabiki bir sonraki yazdığım programda kullanıyorum
ama c gibi bir rahatlıkla olmuyor bu,
özellikle uzun programlarda page seçimleri vs. problem oluyor.

Asm ile çok fazla kod yazdım diyemem ama
dişe dokunacak kadar birşeyler yazdım
içinde zorlu uygulamalarda var
benim anladığım daha önce söylediğim gibi
asm ile tek kullanımlık kod yazarsın.

@z hocam

Arkadaş ilk mesajında
Alıntı Yapbir kitapçıdan x86 öğrenmek için kitap aldım daha elime ulaşmadı.
demiş, herhalde o kitaptır bahsettiği.

Bu arada 80x86 hiç bilmiyorum,
mesajlarımdaki örneklerin microchip mdleri için olduğunu belirtiyorum
sadece fikir versin diye yazıyorum onları.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

z

#17
@Haydut, hic korkma 8, 16, 32 bit islemler yapabilirsin.

Intel 80x86 serisi belki de ASM ile calismanin en zevkli oldugu islemci serisidir. Bir komut hayal et, muhtemelen komut setinde bu hayal ettigin komut mevcuttur.

Aslinda bu islemcilerin atasi 8 bit 8080. 

16 bitlik 8086 ile standart hale gelmisler ve gelismisler. (80x86'nin kirpilmis komut setine sahip 8 bitlik seri yok bildigim kadariyla)

AX, BX, CX ,DX ornek registerlerini alirsak

Aslinda AX  AH ve AL seklinde 8 bitlik iki registerden olusur.

Eger sen 8 bit registerlerle islem yapacaksan AH, AL, BH, BL gibi registerleri kulanirsin.

Yok 16 bit islem yapacaksan bu kez AX, BX ... kullanirsin.

Yok ben 32 bit register kullanacagim dersen bu kez 16 bit registerlerin onunde E harfi getirirsin.

Bu durumda registerlerin EAX, EBX, ECX gibi isimler alir. Fakat EAX aslinda AX ve ust 16 dan olusur.

EAX=0x00000001 iken AX=0x0001 AL=01 demektir.

8 bit toplama yapmak icin komuta dokunmadan sandece registerlerin adini degistirirsin.

Ornegin

ADD AL,BL      ; 8 bit toplama
ADD AX,BX     ; 16 bit toplama
ADD EAX,EBX ; 32 bir toplama

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

RaMu

z hocam intel işlemcili mikrodenetleyici varmı tavsiye edebilieceğiniz,
daha açığı microchipin picleri gibi kaynağı örneği derleyicisi bol olan
mikrodenetleyici haline getirilmiş bir intel işlemci 8-16-32 bit herbirinden örnek verebilirsiniz,
bende çalışabilirim sanırım.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

z

#19
Inteli birakali cok uzun yillar oldu. Gelismeleri takip etmiyorum artik.

Dogrudan 80x86 komutlariyla uyumlu 16 bitlik 80186  serisi vardi.  Cipin adinin sonuna gelen harflerle (EB vs) cip bayagi bir degisiklik gosteriyordu. Icinde timer, port, interrupt controller vs temel donanimlar var.  http://ftp.utcluj.ro/pub/users/calceng/PMP/27243304.pdf

Fakat bu saatten sonra controller secilecekse Intel değil ARM tercih edilmeli diye dusunuyorum.

Intelin 8 bitlik 8051 serisi en azindan diger firmalarca hala uretiliyordur. Ama bunlarin 80x86 ile yakindan uzaktan alakasi yok.

Eger MSDOS, yada XP  oncesi makineniz varsa islemci secimine, islemci kartina derleyiciye falan ihtiyaciniz yok. PC yeter.

Derleyici de gerekmez. Olursa konfor artar.

Komut satirinda debug yazip enterlediginizde dogrudan karsiniza kod yazip calistirabilieceginiz program acilacaktir. Bu programla 64K ya kadar com uzantili kodlar yazabilirsiniz. Derleyici rahatligi yoktur, adres hesaplamalari vs yapmak zorunda kalabilirsiniz ama calismasi zevklidir.

Eger INT21 tipi erisimle ekrana veri basma falan gerekmeyecekse  XP de de kullanabilirsiniz.

Debug Enter

A enter

MOV AL,0
ADD AL,1
INT 20

ENTER
R CX
10
N TOPLA.COM
W
Q

Size 16 byte uzunlugunda Topla.com adinda calistirilabilir programi olusturur.

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

speak48

#20
bu iyi birşey mi bilmiyorum ama
intel bundan 30 yıl öncesi kodunu enson sürüm işlemcide çalıştırabilmekte.
uyumluluk var
tabi bu uyumluluk belkide dünyamızı bir kısıtlamaya ve kısır döngüye itmektedir.

-çoğu program windows için üretilir.
-windows x86 mimarisi için üretilir.
-yeni işlemci eski yazılımları çalıştırsın diye üretilir

:) sanırım sonsuz döngüye sokmaya dilim dönmemiş

E_Kk

Intel Assembly öğrenmek için emu8086 emulator ü kullanılabilir. Internette bolca kaynak var.
"Meselâ: Hendese bir fendir. Onun hakikatı ve nokta-i müntehası, Cenab-ı Hakk'ın İsm-i Adl ve Mukaddir'ine yetişip, hendese âyinesinde o ismin hakîmane cilvelerini haşmetiyle müşahede etmektir."Sözler

speak48

emu8086 çok iyi bende onda öğrenmiştim
ama emulasyon yapan açık kaynak projeler var zet,next86 gibi.

acaba
bende bi 80186 systemimi tasarlasam.

Haydut

Alıntı yapılan: speak48 - 01 Haziran 2014, 17:33:22
bu iyi birşey mi bilmiyorum ama
intel bundan 30 yıl öncesi kodunu enson sürüm işlemcide çalıştırabilmekte.
uyumluluk var
tabi bu uyumluluk belkide dünyamızı bir kısıtlamaya ve kısır döngüye itmektedir.

-çoğu program windows için üretilir.
-windows x86 mimarisi için üretilir.
-yeni işlemci eski yazılımları çalıştırsın diye üretilir

:) sanırım sonsuz döngüye sokmaya dilim dönmemiş



Tartışmasız Assembly karmaşık bir dil her yeni bir işlemci için yeni bir kod işleri daha da karmaşık yapar kanımca....

@z kodlar için teşekkürler...!

80x86 Assembly formatında hazırlanan .COM türünde uygulamaların .EXE den farkları nelerdir ? Ekstra bir avantaj mı sağlıyor ?




z

#24
Exe program 64K dan daha buyuk olabilir.
Exe program  farkli segmentlerden ram kullanabilir.

Gerci com program calistiktan sonra isletim sisteminden ram talep edebilirsin ama com'da 64K ile sinirlisin. Tum segmentler (data, program vs) ayni adres alaninda yer alir.

Com uzantili programlar kisa uygulamalar icin yeterli.

Not:

Aslinda asm programi da bir islemciden bir baska islemciye tasimak mumkun. (ozel donanimlar isi biraz bozuyor)

Mesela ARM islemcide PIC16F84 kodlarini kosturabiliriz. Bunun icin yapilmasi gereken emulator yazmak. Bu da cok zor bir sey degil. Fakat 16F84 donanimi ile ilgili kodlar isleri zorlastirir. Fakat bununla ilgili emulasyon da yapilabilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Haydut

Anladim küçük boyutlu uygulamalar için .COM ideal..

internet üzerinden Assembly örnek uygulamalara ulaştım bunlardan birisi de

mov ah, 3Ch ; DOS create file 
mov cx, 0 ; attribute
mov dx, filename ; filename in ASCIIZ 
int 21h
 
filename db "smth.txt",0


Bilgisayarım olmadığı için kodları deneme imkanım yok. yakında bir bilgisayar alıp deneme yanılma yöntemi ile daha az baş ağrıtacağıma inanıyorum :) neyse sorulara geçelim.

Anladığım kadarı ile yukarıda ki kodda bir dosya oluşturuluyor.

int 21h tam olarak nedir ?

mov cx, 0 ; isteğe bağlı olarak burada CH/CL kullanılır mı ?
mov dx, filename ; isteğe bağlı olarak burada DH/DL kullanılır mı ?

Teşekkürler






z

#26
Int 21 software int komutu. parametresi de 0x21.

Bu komut 21 nolu interrupt rutinine ucmayi saglar. (Aynen hard int gelmis gibi)

Daha sonra bu rutin ax,bx,cx,dx registerlerine bakarak ne is yapacagina karar verir.

Ilk asamada int 21 den uzak durmali sadece 80x86 komutlariyla denemeler yapmalisin.

Int 21 ile calisabilmek icin isletim sisteminin XP oncesi olmasi gerekir. Bios int rutinleriyle de calisabilirsin.

Ilerleme sagladiktan sonra PC kartini isletim sistemi olmadan da kullanabilirsin.

Bu durumda Int21 falan kullanamazsin. Kodlarini roma yukleyebilir ve bu romu basa baglayabilirsin. HDD ye yukleyebilir ve boot islemlerini yapip bu HDD den kodlarini rama katarabilirsin.

Fakat ekran kartini, ses kartini vs full ozellikleriyle kullanmak kasar.

Int 21 ile calisacaksan int 21 dokumantasyonuna ulasman lazim. Bizim zamanimizda hellpc diye bir program vardi. Bu program sayesinde tum int rutinlerinin parametreleri falan kolayca ogrenilebiliyordu.

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

eddar

Zamanında bloguma 80x86 yazmaçlarını ve işlevlerini yazmıştım. http://orhunvural.com/8086-islemcilerde-yazmac-cesitleri.html burayı özümsemeden kodlamaya geçmeni önermem

speak48

birde paradigm in derleyicileri varmış
bunun hakkında ne düşünüyorsunuz acaba

Haydut

Yanıtlar için teşekkürler.

Arkadaşlar işlemcilerdeki veri yolu, adres yolu, kontrol yolu bunlar nedir ?

işlemci bu yollardan hangisini kullanır ?

örneğin 16 bit hafıza genişliğine sahip bir işlemci de ne kadarlık adresleme yapılır bunun bir hesaplama sistemi var sanırım.

@z haklısın şu anda sadece asm kodları ile işlem yapmalıyım yoksa kafa çok karışıyor :)