DemoScene konusunda PC uzerinde togunlasmak istiyorum.Simdiye kadar gezdigim sitelerin ve okudugum FAQ'larin cogunda bu isin derinine inmek icin ASM bilmenin sart oldugunu hissettim.
Simdi durumumu da kisaca acikliyayim;ben aslinda Bil.Pro mezunuyum ama cok basarili bir coder degilim.Okuldan sonra da bu tam olarak programcilikla ilgili bi is bulamadigim icin temel mantik ve C'de kod yazmak disinda aklimda pek bise kalmadi.
Konumuza geri donelim.Ingilizce veya TR ASM dokumani aramaktayim ama yeni basliyanlar icin olursa yani resmen ASM For Idiots :) ariyorum.Bazi dokumanlar okuyorum ama C gibi deil ki :) cogu sey havada kaliyo...
Yardimlarinizi bekkler sevgiler ve saygilar sunarim...
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.
spritus
4th September 2005, 21:26
her pc coder'inin basucu kaynagI:
http://pittt.free.fr/brol/coursAsm/helppc.exe
Bakkada
4th September 2005, 22:25
Cok sagolun arkadaslar...
Linkleri bir gezeyim biraz ozumsiyeyim yeni yeni sorularla yeniden aranizdfa olucam :)
(TRT anonsu gibi oldu) :)
Bu arada ASM kodu yazarken hangi editoru kullanabiliriz bi de elimiz degmisken bi editor onerirseniz cok sevinirim...
spaztica
5th September 2005, 01:44
şık mallarmış bunlar; ben de biraz inceleyeyim ve teşekkürler skate, spritus...
skate
5th September 2005, 01:46
Ben sana EditPlus'ı öneririm. Son birkaç aydır visual olmayan tüm diller için bu editörü kullanıyorum. Şu ana kadar editörü kullandığım ya da en azından test ettiğim diller.
6502 Assembler
MAX Script
HTML/Javascript
PHP
ASP
C# (Console)
SQL
Bu dillerin haricinde
XML
INI
BAT
gibi dosya formatlarını renklendirmede de oldukça başarılı.
Her dil için renklendirme dosyasını bulabiliyorsun çünkü kendin de dil dosyası hazırlayabiliyorsun. Elbette ki hazırlamana gerek kalmıyor çünkü dünyadan birileri çoktan senin yerine hazırlamış ve editplus'ın sayfaya koymuş oluyor. Sen de indirip keyfine bakıyorsun.
Elbetteki bu editör'ün compiler özelliği yok. Ancak shortcut keylerle istediğin actionı yaratabiliyorsun. Örnek olarak ben c64 için ACME kullanıyorum. CTRL+1 tuş kombinasyonu otomatik olarak o anda yazdığım kodu kaydediyor, ACME'ye parametre olarak yolluyor (bunun için batch (BAT) dosyası kullanıyorum) ve ACME'nin ürettiği prg dosyası da otomatik olarak VICE ya da CCS64'den çalıştırılıyor ve sonucunu görüyorum. Anlayacağın bu editörü kullanarak CTRL+1 tuş kombinasyonuyla yazdığım kodun sonucunu anında görebiliyorum.
Sen de herhangi bir ASM compiler bul x86 ailesi için ve EditPlus kullanarak code yazmanın rahatlığını yaşa :)
Editörün auto-complation, column block copy ve advanced bir find&replace (elbetteki regular expression destekli) özelliği mevcut. Bunların haricinde 100lerce dosyayı 1-2 sn.de açabiliyor ve tüm dosyalar üzerinde find&replace işlemini 1 sn'den kısa sürede yapabiliyor. Ben 400 dosyayı aşkın PHP projelerimde köklü değişiklikleri bu programı kullanarak birkaç dakikada yapabiliyorum.
Peki program free mi? Hayır. Ben bir süre crack kullandıktan sonra iki-üç ay önce satın aldım. Fiyatı tek kullanıcı için $30.
http://www.editplus.com/
Sitede user files bölümüne girerseniz göreceksiniz ki 98 yılından 2005'e kadar sürekli yeni renklendirme ve auto complation dosyaları eklenmiş.
Son bir özellik ise, HTML projeleri için ek özellikler buttonlar ve program içinden preview sağlaması ( CTRL+B ). Analayacağınız gibi tek tavsiyemdir :)
spaztica
5th September 2005, 03:37
EditPlus için ayrı bir güzellik de HTMLTidy, C Compiler ve ActionScript Compilerile çok temiz çalışabilmesi. İdeal coder tool'u diyebilirim...
spritus
5th September 2005, 09:42
ben de compiler tavsiye edeyim bari : flat assembler
http://flatassembler.net
süperdir. linking problemi yok, parametre karmaşası yok, pseudo'larla segment ayarları yapmaya gerek yok. com yazmak için direk olarak .ORG 0100H yazıp başlayın.
hades
5th September 2005, 20:17
bende 2 link vereyim. gerçi pcde programlama bilgim kocaman bir SIFIR'dır.
En azından ilgilenenlere faydası olur.
pek çok c64 coder ı bunu kullanıyor. acme ile ortak çalışıyor
skate
7th September 2005, 02:26
Programın Almanca olmak dışında bir problemi yok :) İnceledim, içinde FLI basma template kodlarına varıncaya kadar birçok özellik var. Ancak elbette ki bu tür şeyleri hazır kullanmak hiç de hoş olmaz, 64'ün ruhuna aykırı. Yine de yapanları tebrik etmek lazım. Ancak ilginç bir şekilde editöre bin tane özellik eklemişler, renklendirmeyi göremedim birtek :blink: bence en önemli özelliklerden biri renklendirme ve editplus'ı tercih ederim sırf bu yüzden.
retrolifter: editör linki için sağol, ilerde işime yarayabilir.
Bakkada
7th September 2005, 09:13
Dokumanlari yavas yavas karistiriyorum da normal programlamaya pek benzemiyo ASM kafamda tam kurguliyamadim su dokumanlarin hepsini bi bitiriyim soru yagmuru basliycak :)
skate
7th September 2005, 10:01
Aslında "normal programlama" dediğin şey ASM'dir diyebiliriz. Diğer tüm diller ondan türediği ve ona dayandığı için bir programcının teoride en rahat anlaması gereken dil Assembler'dır. Ancak tabii bir de alışkanlık meselesi var. Sen senelerce C/C++, VB, Pascal, Delphi v.s. kullandıysan Assembler zor ya da en azından farklı gelebilir. ASM'nin programcılara kolay geldiği nokta şu. Ben C64'ün 6502 ASM yapısını çok iyi bilirim. Bu sayede x86 ailesine ya da Z80 (Spectrum) ASM'ye geçiş yaptığımda benim dertlerim şöyle sıralanabilir.
1) Bu ASM'de hangi registerlar var ve kaç bit?
2) Nasıl bir registera değer atar, o değeri hafızaya yazar ve bunları point ettirerek kullanabilirim?
3) Genel opcodelar hangileri? (bit shifting, or, and, xor(eor), jmp v.s.)
4) Loop komutları nelerdir?
5) Hangi flagler var ve hangi opcodelar ile kontrol edilebiliyorlar? (carry flag, zero flag, negative flag v.s.)
6) Makinenin genel hafıza adreslemesi, bank/segment mantığı nasıldır?
7) Özel hafıza adresleri (ekran adresleri v.s.) ve ROM adresleri nelerdir?
7 maddede sıraladım ancak elbetteki bunları öğrenmek vakit alıyor. Yine de öğrendikten sonra ASM ASM'dir, bu platformlarda da istediğimizi yapabiliriz.
Gelelim diğer dillere. MAX Script öğrenmeye çalış örneğin. Basit bir scripting dili ancak tamamen kendi notasyonlarına sahip ve 3-4 farklı dilin (basic, pascal, c, php v.s.) çeşitli izlerini taşıyor. Bu dili de sıfırdan öğrenmek assembler kadar zor bence çünkü herşeyi o dile özgü öğrenmek gerekiyor. Ancak diyelim ki eşit derecede MAX Script ve ASM biliyoruz. Elbette ki MAX Script'de çok daha hızlı code yazabiliriz. ASM'de ise "ne yaptığımızın tam olarak farkında olarak" daha uzun bir süreçte aynı code'u yazarız.
En kötü dil yapısı bence bazı basic dilleri gibi interpreted dillerdir. Bu dillerin oluşturduğu ASM code, en sıradan ASM'cinin dahi hayatta yazmayacağı kadar unoptimize bir sonuç çıkarır ortaya. Debug etmesi ASM tarafında imkansızdır. Özel debugging toolları geliştirmek gerekir.
Bakkada
7th September 2005, 11:06
Originally posted by skate@Sep 7 2005, 09:01 AM
Aslında "normal programlama" dediğin şey ASM'dir diyebiliriz. Diğer tüm diller ondan türediği ve ona dayandığı için bir programcının teoride en rahat anlaması gereken dil Assembler'dır. Ancak tabii bir de alışkanlık meselesi var. Sen senelerce C/C++, VB, Pascal, Delphi v.s. kullandıysan Assembler zor ya da en azından farklı gelebilir. ASM'nin programcılara kolay geldiği nokta şu. Ben C64'ün 6502 ASM yapısını çok iyi bilirim. Bu sayede x86 ailesine ya da Z80 (Spectrum) ASM'ye geçiş yaptığımda benim dertlerim şöyle sıralanabilir.
1) Bu ASM'de hangi registerlar var ve kaç bit?
2) Nasıl bir registera değer atar, o değeri hafızaya yazar ve bunları point ettirerek kullanabilirim?
3) Genel opcodelar hangileri? (bit shifting, or, and, xor(eor), jmp v.s.)
4) Loop komutları nelerdir?
5) Hangi flagler var ve hangi opcodelar ile kontrol edilebiliyorlar? (carry flag, zero flag, negative flag v.s.)
6) Makinenin genel hafıza adreslemesi, bank/segment mantığı nasıldır?
7) Özel hafıza adresleri (ekran adresleri v.s.) ve ROM adresleri nelerdir?
7 maddede sıraladım ancak elbetteki bunları öğrenmek vakit alıyor. Yine de öğrendikten sonra ASM ASM'dir, bu platformlarda da istediğimizi yapabiliriz.
Gelelim diğer dillere. MAX Script öğrenmeye çalış örneğin. Basit bir scripting dili ancak tamamen kendi notasyonlarına sahip ve 3-4 farklı dilin (basic, pascal, c, php v.s.) çeşitli izlerini taşıyor. Bu dili de sıfırdan öğrenmek assembler kadar zor bence çünkü herşeyi o dile özgü öğrenmek gerekiyor. Ancak diyelim ki eşit derecede MAX Script ve ASM biliyoruz. Elbette ki MAX Script'de çok daha hızlı code yazabiliriz. ASM'de ise "ne yaptığımızın tam olarak farkında olarak" daha uzun bir süreçte aynı code'u yazarız.
En kötü dil yapısı bence bazı basic dilleri gibi interpreted dillerdir. Bu dillerin oluşturduğu ASM code, en sıradan ASM'cinin dahi hayatta yazmayacağı kadar unoptimize bir sonuç çıkarır ortaya. Debug etmesi ASM tarafında imkansızdır. Özel debugging toolları geliştirmek gerekir.
Quoted post
Yani seninki aslinda Pascal bilip C'ye gecmek gibi bise :)
Ama benimki sifirdan Pascal ogrenmek gibi bise :)
spaztica
7th September 2005, 14:10
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ı.
Bakkada
7th September 2005, 14:43
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ı.
Quoted 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.
skate
7th September 2005, 17:06
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...
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
;)
skate
9th September 2005, 11:07
Originally posted by Bakkada@Sep 9 2005, 08:46 AM
http://rapidshare.de/files/774293/ASSEMBLY...YNAKLAR.rar.htm (http://rapidshare.de/files/774293/ASSEMBLY_T_RK_E_KAYNAKLAR.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
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 (http://rapidshare.de/files/774293/ASSEMBLY_T_RK_E_KAYNAKLAR.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
Saka saka ya Pass istedigi alimdan cikmis bir an :)
eirik
19th September 2005, 21:46
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
spaztica
19th September 2005, 23:39
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. :)
spritus
20th September 2005, 01:58
yok bakkada bak flatasm daha iyi. erik gene sarhoştur bu saatlerde, aldırma ona :P
sole de bi dokuman buldum icinde ornek kodlardan tutorila'lere kadar bi cok sey awr bakmakda fayda war sanirim....
ulgen717
26th September 2005, 22:31
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.
Quoted 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;
not: başına org 100h ekledim gene birşey olmadı, example dizinindeki örneklerde yazıyor diye
eirik
26th September 2005, 22:52
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 :)