ASM Dokumani

27 replies · 13,629 views

ASM Dokumani
genelde asm ile scripting dilleri arasındaki temel fark şudur; asm herşeye temelden daldığından php'deki gibi yüzlerce library komutu yoktur. komut seti cpu'ya göre belirlidir; sana o komutlarla tüm istediğin herşeyi en temelinden yazmak düşer. aslında hamallıktır da; c++ / vb / .net gibi dillerde component ve library'lerin sağladığı imkanlara sahip olamazsın. ama buna karşın, makinanın anlayacağı ve ihtiyaca yönelik en optimize kodu yazmak da yapabielceklerin arasında. pek çok dil ve library'nin izin vermediği ölçülerde donanımın tüm nimetlerini kullanabilirsin -ki demoların ve oyunların çoğu bu gibi yöntemler üzerine kurulmuştur.
düşünce biçimi oalrak birden fazla dili kavradığında ise genel ortalamaları görmeye başlarsın; yani bunu şu dilde şöyle yapıyordum, bu dilde de ona benzer birşey olmalı diye yaklaşırsın. tabii burada devreye object-oriented ve runtime gibi terminolojiler girecektir devreye; ama zaten üst dillerin hepsinde bu gibi yapısal farklılıklar vardır. assembler'da hiç bunlar düşünülmez; interrupt'ların vardır, game ya da main loop adı verilen temel döngü etrafında herşeyi oluşturursun. haliyle bu yöntem biraz daha monotasking mantığındadır; ama multitasking ve windows ortamalrında çalışmak isteresen aracın asm değil üst diller olmalıdır. yani buradan dili, amacına uygun seçmek gerekir sonucu çıkıyor.
asm benim ilk göz ağrımdı; hala da lda, jsr gibi komutları oop'un cambazlıklarına, event ve trigger'lara tercih etmem. ama asm, purist bir dildir; herşeyi en temeliyle ele almak ve minimalist çalışmak için.
bence senin asm mi c mi diye tercihten ziyade ne yapmak istiyorum ben diye karar vermen ve ona yönelik yolu izlemen gerek. burada olduğuna göre dedemo olayında gözün var; ehh, asm'den ya da c'den kaçınamayacağın ortada. tabii basic'le de demo yazılır, yazılmaz değil; ama...
diğer bir mesele de compiler olayı; tabii ki üst dillerin hemen hemen hepsinin ürettiği makina kodu, optimize olmayacaktır. bunun da sebebi, compiler'ı yazan kişilerin tercih ettiği uyarlama yöntemleri. birebir aynı bir kod bu yüzden de a compiler'ında farklı bir filesize verir, b compiler'ında farklı bir size verir. haliyle dil seçiminden sonra bir de ide/compiler seçimin oluşacak (özellikle c++ gibi üst dillerde geçerli bu).
tüm yazıyı okuyunca aklıma gelenler bunlar. ama sayende sitede bu konuyla ilgili biraz bilgi birikmeye başladı.
ASM Dokumani
Originally posted by spaztica@Sep 7 2005, 01:10 PM
genelde asm ile scripting dilleri arasındaki temel fark şudur; asm herşeye temelden daldığından php'deki gibi yüzlerce library komutu yoktur. komut seti cpu'ya göre belirlidir; sana o komutlarla tüm istediğin herşeyi en temelinden yazmak düşer. aslında hamallıktır da; c++ / vb / .net gibi dillerde component ve library'lerin sağladığı imkanlara sahip olamazsın. ama buna karşın, makinanın anlayacağı ve ihtiyaca yönelik en optimize kodu yazmak da yapabielceklerin arasında. pek çok dil ve library'nin izin vermediği ölçülerde donanımın tüm nimetlerini kullanabilirsin -ki demoların ve oyunların çoğu bu gibi yöntemler üzerine kurulmuştur.
düşünce biçimi oalrak birden fazla dili kavradığında ise genel ortalamaları görmeye başlarsın; yani bunu şu dilde şöyle yapıyordum, bu dilde de ona benzer birşey olmalı diye yaklaşırsın. tabii burada devreye object-oriented ve runtime gibi terminolojiler girecektir devreye; ama zaten üst dillerin hepsinde bu gibi yapısal farklılıklar vardır. assembler'da hiç bunlar düşünülmez; interrupt'ların vardır, game ya da main loop adı verilen temel döngü etrafında herşeyi oluşturursun. haliyle bu yöntem biraz daha monotasking mantığındadır; ama multitasking ve windows ortamalrında çalışmak isteresen aracın asm değil üst diller olmalıdır. yani buradan dili, amacına uygun seçmek gerekir sonucu çıkıyor.
asm benim ilk göz ağrımdı; hala da lda, jsr gibi komutları oop'un cambazlıklarına, event ve trigger'lara tercih etmem. ama asm, purist bir dildir; herşeyi en temeliyle ele almak ve minimalist çalışmak için.
bence senin asm mi c mi diye tercihten ziyade ne yapmak istiyorum ben diye karar vermen ve ona yönelik yolu izlemen gerek. burada olduğuna göre dedemo olayında gözün var; ehh, asm'den ya da c'den kaçınamayacağın ortada. tabii basic'le de demo yazılır, yazılmaz değil; ama...
diğer bir mesele de compiler olayı; tabii ki üst dillerin hemen hemen hepsinin ürettiği makina kodu, optimize olmayacaktır. bunun da sebebi, compiler'ı yazan kişilerin tercih ettiği uyarlama yöntemleri. birebir aynı bir kod bu yüzden de a compiler'ında farklı bir filesize verir, b compiler'ında farklı bir size verir. haliyle dil seçiminden sonra bir de ide/compiler seçimin oluşacak (özellikle c++ gibi üst dillerde geçerli bu).
tüm yazıyı okuyunca aklıma gelenler bunlar. ama sayende sitede bu konuyla ilgili biraz bilgi birikmeye başladı.
[post=1625]Quoted post[/post]


Bilgi icin tesekkur ederim.Benim ASM ogrenme durumuna girisim Demo ve Intro'lardan cok etkilenmem.Yani gorsel butun eserlerden etkileniyorum ama 4K'lik bir dosya icerisinde plasma efekti gormek ve muzik duymak beni cok cezbediyor.Belki bu demolardan daha guzel olanlari Flash ile daha kolay yapilabilir ama benim icin onemli olan CPU'nun kodu o anda grafige cevirmesi...O yuzden ASM ogranmek istedim.He ama ASM'yi kavriyamazsam ya daha baska bi dil ile gorsel birseyler yapmak istiyorum.
Amacim PC DemoScene ve bu benim meslegim degil hobim olucak.(belki ilerde meslegim olur).Bu amaca ulasmak icin ASM ogrenmeye calisicam.Cok zeki oldugumu iddia atmiyorum eger ASM ogrenemessem baska bi dil baska bi tool kullanicam.Kucuck de birsey olsa PC DemoScene adina biseyler uretmeye calisicam.Amacim budur amacima giderken karsima cikan zorluklara ve seceneklere gore dil,plarform cb belirlerim ve tabiki bu asamada daha deneyimli coder arkadaslarimdan fikir alirim.
ASM Dokumani
Seni yanlış yönlendirmek istemem ancak ASM/C v.s. zor gelirse Pure Basic tavsiye ederim. Hem multiplatform'dur, hem de kullanımı oldukça basittir. 7D4'de yayınlanan Endo'nun 7D-Type oyunu Pure Basic'in yeteneklerine güzel bir örnek. Endo o oyunu 10-12 saatlik bir zaman diliminde yazdı partide.
Gelelim demo efekti olayına. 4KB'da plazma v.s. demişsin. Elbetteki ASM şart değil bunun için ama en ideali. Sonuç olarak aşağıdaki linke bakıver.
http://www.akaydin.com/javascript/cube3d_2.htm
Bu benim JavaScript ile hazırladığım bir küp ve toplamda 4KB bile değil ki size olayına hiç takılmadan yazmıştım.
ASM'yi bir dene derim, bol bol 256 byte örnekleri incele v.s. Ancak sakın sıkılıp bırakma, zor geldiği noktada başka alternatiflere sıçra...
ASM Dokumani
Originally posted by Bakkada@Sep 9 2005, 08:46 AM
http://rapidshare.de/files/774293/ASSEMBLY...YNAKLAR.rar.htm
Arkadaslar bi cogunuz biliorsunuzdur belki ama TR bir ASM kaynagi buldum paylasayim dedim.Henuz ASM bilmedigim icin ne kadar faydali ne kadar degil bilemiyorum.Umarim isinize yarar
😉
[post=1638]Quoted post[/post]


Lem uğraştıracaksın milleti password'ünü kırmakla RAR'ın 🙂
Şifre: Bilader
ASM Dokumani
Originally posted by skate+Sep 9 2005, 10:07 AM--><div class='quotetop'>QUOTE(skate @ Sep 9 2005, 10:07 AM)</div><div class='quotemain'><!--QuoteBegin-Bakkada@Sep 9 2005, 08:46 AM
http://rapidshare.de/files/774293/ASSEMBLY...YNAKLAR.rar.htm
Arkadaslar bi cogunuz biliorsunuzdur belki ama TR bir ASM kaynagi buldum paylasayim dedim.Henuz ASM bilmedigim icin ne kadar faydali ne kadar degil bilemiyorum.Umarim isinize yarar
😉
[post=1638]Quoted post[/post]


Lem uğraştıracaksın milleti password'ünü kırmakla RAR'ın 🙂
Şifre: Bilader
[post=1639]Quoted post[/post]

[/b][/quote]
Eeeeee ole armut pis agzima dus yok :lol:
Saka saka ya Pass istedigi alimdan cikmis bir an 🙂
ASM Dokumani
bakkada : acIkcasI digerlerine katilmiyor, ve compiler olarak sana TASM5 oneriyorum.. tasm5 benim ki$isel tercihimdir ve yILlarca kullandigim icin diger derleyicilere ragmen aramizda bi gonul bagi olu$tu. tasm ile ilgili bi cok ornek bulmakla birlikte bi o kadar ornek de masm icin var (fakat bu microsoft un diye kullanmiyorum) ayrica win32 ile birlikte cali$acaksan masm32 de daha cok ornek bulabilirsin (tasm32 ornekleri bulamazsIn demiyorum) .. bunlarIn dI$Inda nasm da var ki o da oldukca ba$arILI, tasm ve masm icin derleyiciye ozel bi cok komut kullanman gerekiyor, bunlarI internetten kolayca bulabilirsin orasI ayri ama bu ismi gecen 3 derleyiciden en az nasm ile derleyici komutlarI kullanman gerekiyor, hani bir de onlarI mI ogrenicez dersen nasm ile de ba$lamak iyidir.. internette en az tasm ve masm kadar nasm ile de yazilmi$ ornek kodlar bulursun. acIkcasI bunlarIn dI$Inda daha iyi derleyiciler tabii ki olabilir ama piyasada yaygin olan derleyicilerle cali$irsan ornek bulman da o kadar kolay olur
bir$ey daha, derleyicilerle cali$madan once ufak tefek ornekler icin dos daki debug.exe bi sure daha iyi dostun olmaLI, assembly e ba$ladIktan 5-6 ay icinde sadece debug.exe ile ugra$tim.
spaztica : compilerlarIn ozellikle yeni nesillerin, asm den daha az optimize sonuc vermezler asLInda, ilginc gelebilir ama boyle. bunun nedeni ise $u, ozellikle pentium pro larla birlikte superscalar mikroi$lemci mimarisi ile agirligi artan pipelining nedeniyle i$lemcinin farkli birimleri birbirinden mumkun oldugu kadar bagimsiz cali$abilyiorlar, ama eger arka arkaya ayni birimle ilgili bir komutu kullanirsan pipelining cali$tirilamaz. $oyle ornekliyim, ardarda surekli ALU yada FPU komutlari kullanmak yerine ornegin mikroi$lemcinin bellekten data okuyup bunu i$lemesi yada registere yazmasI gibi bir komutu aralara serpi$tirirsen bi blok ALu ve bi blok bellek i$lemleri komutu olan kod, ikisinin kari$tirildigi koddan daha yava$ cali$ir. bunu ayni anda hem win32asm hem de VC++ kullanarak tanIdigIm birisi bizzat denedi. aynI zamanda bu konu ile ilgili poison^raven in de bi yazIsI vardI.
bu arada akLIma gelmi$ken benim ba$layIp 40-50 sayfa sonra bIraktigim bir donukam vardI. tam olmamakla birlikte ba$langic olarak yollayabilirim bi gozden gecirdikten sonra
ASM Dokumani
eirik; dökümanını hazır tut, yakında sitenin değişimiyle yazılar kısmı da devreye girecek ve orda yayınlaman, yeni başlayanlar için yararlı olacaktır. 🙂
ASM Dokumani
yok bakkada bak flatasm daha iyi. erik gene sarhoştur bu saatlerde, aldırma ona 😛
ASM Dokumani
Originally posted by skate@Sep 4 2005, 06:26 PM
Sana bir iki örnek code paste ediim.
PUSH  DS
MOV   AX,0000
PUSH  AX
MOV   AX,A000
MOV   DS,AX
MOV   AX,0013
INT   10
MOV   BX,7DA0
MOV   AH,0E
MOV   [BX],AH
MOV   AH,01
INT   21
MOV   AX,0003
INT   10
RET

Bu code ekrana 320x200 ekran açar ve ekranın (160,100) koordinatına (orta noktasına) sarı renkte bir nokta basar.
PUSH  DS
MOV   AX,0000
PUSH  AX
MOV   AX,A000
MOV   DS,AX
MOV   AX,0013
INT   10
MOV   CX,FD3C
MOV   BX,CX
MOV   [BX],BL
LOOP  0112
MOV   AH,01
INT   21
MOV   AX,0003
INT   10
RET

Bu ise ekranın tamamını default palet renkleriyle doldurur.
Bu iki örnek asm çalışırken ilk olarak yaptığım iki code idi. Bunun için sana da bunları yolluyorum. Benim başlangıç noktam belki sana yol gösterir diye 🙂
Bu arada bikaç dip not
MOV AX,0013
INT 10
Bu 13H yani 320x200 256 renk ekran modunu açar
MOV AX,0003
INT 10
Bu ise yeniden text mode'a geri döndürür.
MOV AH,01
INT 21
Bu da herhangi bir tuşa basılana kadar bekletir.
LOOP ise her seferinde CX register'ının değerini bir azaltır ve 0 olunca döngüden çıkar.
Registerlar 16 bittir. AH, AL şeklinde kullanıldıklarında 8'er bit low ve high bytelarını oluştururlar. AX şeklinde ise 16 bit kullanılabilirler.
Örnek olarak
MOV AL, 00
MOV AH, 13
INT 10
diyebilir ya da kısaca
MOV AX, 0013
INT 10
diyebiliriz.
v.s. v.s.
Ben 6502 ASM bilirim x86 ailesinde çok iyi değilimdir... Benden bu kadar.
[post=1591]Quoted post[/post]


bu kodları direk hede.asm dosyasına yazdım sonra fasm ile compile etmeye çalıştım olmadı , olamadı
sadece elimde somut birşey olması için assembly bilmeden net birşeyler görmek istedim , daha sonra deneme ile değiştiririm diye. bu konuda yardımcı olabilecek biri var mı , fasm su mesajı veriyor;
E:Asmflatasm>fasm bir.asm
flat assembler version 1.64
bir.asm [4]:
MOV AX,A000
error: undefined symbol.
saygılar
not: başına org 100h ekledim gene birşey olmadı, example dizinindeki örneklerde yazıyor diye
ASM Dokumani
bu kodlar (skate in yazdIkLarI) dogrudan dogruya bellekte cali$mak icin yazilmi$ kodlar yani bir derleyici ile derlenebilmesi icin derleyiciye ozel kodlar yazilmami$ ciplak kod. derleyiciye ozel kodlar, senin dedigin com dosyalarda kodun hangi offsetten ba$layacagIna dair org 100h , tasm da kullanILacak bellek modelinin nasIL olacagI ile ilgili .model komutu ile birlikte , smal, tiny, huge, flat vs. gibi parametreler (small ve tiny .com dosyalar icin, flat win32 dosyalar hatta flat bellek modelinde cali$acak her tur program icin) kod segmenti tanimlayan .code data segmenti tanimlayan .data ve stack segmenti tanimlayan .stack ifadeleri bunlar hep derleyiciye ozel komutlardir. assembly dili degi$mese de derleyiciye ozel kodlar degi$eceginden tasm icin yazilmi$ bir .asm dosya masm yada nasm ile derlenmeyebilir. neyse bu ornek komutlari bi assembler yerine dos daki debug.exe yi cali$tirip a komutu verdikten cIkan $eye yaz.
bu arada o hatanIn nedenini de sooliyim, assembler'lar hexdecimal sayILarda ba$Inda harf oldugu zaman onu bir label gibi gorur ve bu yuzden bu labeli yada degi$keni arar, debug.exe ile ayzarken o kod gecerli olmasIna ragmen assembler da cali$irken mov ax,0a000h gibi ba$I rakam olmayan bir hexdecimal sayIyI yazarken her zaman ba$Ina sifIr getirilir ve sonuna da bu sayInIn 16lik sistemde oldugunu belirtmek icin h konur. flat assembler kullanmadIgImdan bilmiyorum ama borland tasm da yazILI$ boyle. tasm da 01011101b gibi ikilik sistemdeki sayILarI yazabilirsin sonuna hicbir$ey eklemedigin sayILarsa onluk sistemdeki sayILar olarak algilanir derleyici tarafIndan, mantik olarak sonuna o ekleyerek sekizlik sistemdeki sayILarI da belirtebilmen gerekir ama bunu hic denemedim 🙂