WARDOM_ASSEMBLY_DERSLERİ: MOV WARDOM. ORG, ALL_USER ; Tüm Wardom. org kullanıcılar davet et. Bu bölüm açılalı baya oldu. Ama birşey yazamadım. Şu dersleri yeniden yazacağım, başlıyoruz... 1. BÖLÜM - Tipik Bilgisayar Mimarisi ve Assembly'nin işleyişi Bir bilgisayar her saniye başına makina kodu üretir. Siz işlem yapmasanızda, arka planda çalışan işlemler bunu yapmaya zorlar. Hatta kapalı iken bile bilgisayar aslında çalışıyordur. İşte Çalışan Birimler: 1-SAAT ; Sistem tamamen saate bağımlı çalışır! Bilgisayarın saati yoksa o PC'den hiç birşey olmaz 2-BIOS ; Temel giriş çıkış sistemi sistem saatini ayarladığından çalışır 3-CMOS ; Ha bu neden çalışıyor derseniz, buda verileri BIOS çipine yazar. Ve ekran görüntüsü: Peki bunları nasıl yapar? Makina Dili birçok amaçla kullanılır. Yani bir 1 ve 0 farklı yerlerde kullanılır şöyle bakalım Bir makine nasıl toplama yapar : SEMBOLİK MAKİNE KODU HEX KODU BINARY KODU AÇIKLAMA ADD 0x00 0000 0000 : bu toplama için kullanılır. SUB 0x01 0000 0001 ; bu çıkarma için kullanılır. MUL 0x0A 0000 1010 ; bu çarpma için kullanılır. DIV 0XFF 1111 1111; bu bölme için kullanılır. Şimdi Kısaca Assembly nedir(x86)? Assembly Intel'in geliştirdiği bil dildir. İşlemci komutlarının kısaltmasıdır. ÖRNEK : ADD -> ADDITION gibi... Merhaba Dünya, yazmayacağım çünkü merhaba dünya yazmak için 10 satır kod gerekiyor ve temel assembly bilgiside gerekiyor! KISACA KOMUTLAR AL = 8 BİTLİK AKÜMÜLATÖRDÜR ÖRNEK: xchg al, 4ch ; fonksiyonu taşır Özet: AL fonksiyon taşımak veya küçük çapta verileri taşımak için kullanılan bir akümülatördür. AX(ACCUMULATOR REGISTER= = 16 BİTLİK AKÜMÜLATÖRDÜR ÖRNEK mov ax, 62 ; sayı akümülatöre taşındı. Özet: AX veri taşımak için kullanılır. Sayı ve diğer işlemler içinde kullanılabilir. EAX(EXTENTED ACCUMULATOR REGISTER= = 32 BİTLİK AKÜMÜLATÖRDÜR ÖRNEK mov eax, ebx ; bölgedeki veriyi akümülatöre taşıdı. Özet: EAX 32 bitlik veri yazmacıdır. Verileri taşır, isterseniz genişletebilirsiniz NOT = 16 veya 8 bitlik bir veriyi taşırken devreye başka komutlar girer CWD = VERİLERİ DUBLE CİNSE ÇEVİR MOVSX = VERİLERİ DUBLE CİNSE GENİŞLET MOVZX = VERİLERİ GENİŞLETMEDEN TAŞI Aynı işlevi görür ama MOVZX veriyi genişletmez! ÖRNEK ; MOV , 10 ; akümülatöre değer atadık CWD , AX ; veriyi 16 bitten 32 bite çevirdik ÇIKTISI AX = 10 idi EAX = 000010 olur O halde, AL+AX = EAX yani EAX = 0000 idi EAX+AL = 000010 oldu. ; MOVSX EAX, AX ; Aynı işlem yapıldı ; EDI = EXTENTED DESTANATION INDEX, ESI = EXTENTED SOURCE INDEX MOVZX EDI, ESI ; kaynak veri hedefe taşındı NOT = Burda genişleme olamaz ve korumalı kip olması için intel movzx komutu ile kaynak indisin değerinin bozulmaması için bu komutu geliştirmiştir. BL = Örnek mov al, bl ; bölgedeki veri al'ye taşındı NOT = Bir veri eğer akümülatör kapasitesinden büyükse o veri taşınmaz Örnek Hatalı kod mov al, eax ; 32 bitlik veri 16 bit'e doğal olarak taşınamaz! Özet: BL bir base yani alan tutucudur. Verilerinizi bekletmek için buralara koyabilirsiniz! UNUTMAYIN AL'DEKİ gibi GEÇİCİ OLARAK BEKLETİR!. İŞTE KORUMALI, KORUMASIZ KİP BURDAN GELİR!16 BİT VE 32BİT KORUMALI KİPTİR.!!! BX = Örnek mov ax, bx ; bölgedeki veri ax'e taşındı Aynı notlar bunun içinde geçerlidir!!! Özet: BX bir base alan tutucudur. 16 bittir verilerini bölgeye "KAYDEDEBİLİRSİNİZ!" DEVAMI AŞAĞIYA EKLENECEK! -

Tesekkurler inş temelleri atcam bunlarla

; MOV = VERİLERİ TAŞIR | + AX | + BX | + CX | + DX Özelliği: Her veri rahatlıkla taşınabilir. XHCG = VERİLERİ DAHA VERİMLİ TAŞIR | + AX | + BX | + CX | + DX Özelliği: Her veri rahatlıkla takas edilir. MOVSX = VERİLERİ GENİŞLETEREK TAŞIR | + AX | + BX | + CX | + DX Özelliği: Her veriyi 32 bit'e çevirir MOVZX = VERİLERİ GENİŞLETMEDEN HEDEFE TAŞIR | + SI = SOURCE INDEX, EXTENTED SOURCE INDEX | + DI = DESTANATION INDEX, EXTENDED DESTANATION INDEX LEA = AKTİF VERİLERİ KAYNAKTAN ALIR HEDEFE TAŞIR VEYA VERİYİ TAŞIR | + DS, CS, SS, IP | + SI | + DI Özelliği: Hızlı ve verimlidir. LDS = VERİYİ SEGMENTLERE YÜKLER | + DS, SS, CS, IP | + DI, EDI, SI, ESI | + AX, BX, CX, DX | + EAX, EBX, EDX, ECX | + ESP, EBP, SP, BP Özelliği: Segmente yükleme yapar ; Bu yukarıdaki şeyler bunun anlaşılması için yazdım çünkü komutları kullanacağız BAŞLAMADAN ÖNCE ÇOK ÇOK ÖNEMLİ BİR NOT; ASSEMBLY SAĞDAN SOLA OKUNUR!!! WORD PTR = Örnek mov ax, word ptr ; aaaa adlı word'ü ax'e taşıdık Özet: Genel olarak word ptr'lar içerik almak ve kontrol olarak kullanılır. Buna örnek LEA ESI, WORD PTR ; diski ve bios word noktalayıcı olarak ayarladık ve kaynak ilan ettik BYTE PTR = Örnek lds ds, byte ptr ; disk verilerini aldık Özet: İçerik almak ve bellek yönetimi için kullanılır. Virüs yazımında kullanılma amacı hedef şeçer ve bellekteki dosya dizilimlerini bulur .com . exe gibi...

zor konudur bu ama guzel ve basıt olmus tsk ederım dostum aldım arsıve devamını beklıyorum

tesekkürler dostum emeğine sağlık. ben ünivesitede bunlardan bıktımıştım arada hatırlamak işe yarıyor.

? Co-Adminler yada Mehmet abi bi bakarmısınız?! neden başı kelimeleri yıldızlı çıkıyor? Mesela : BASE -> yazması gerek!! :S

Uygar abi teşşekürler... Alperen abi istersen beraber ilerletelim

Olur dostum neden olmasın. Bende bildiğim şeylerde yardımcı olmaya çalışırım. Boş zamanlarda güzel olur, devam ettirelim bu bölümde dersleri.

; SP= Örnek NOP ; işlem yok POP BP ; yığından çek POP SP ; yığından çek MOV BP, SP ; yığındaki veriler bölgeye gönderildi Özet: Stack pointer önemli bir parametredir. Yığındaki verileri istenilen veriye taşır ve kodun akışını sağlar, global veya içsel makrolarda veya yordamlarda kullanılabilir. NOT = POP - Bu parametreyi her zaman kullanmalısınız, veriler bellekte otamatik olarak yığılır ve bu yazmaçlar sayesinde bu işlem gerçekleşir. İlk önce noktalayıcıları yığından yani işinden alıp kendi işiniz için çalıştırmanız gerekir. ESP = Örnek MOV EBP, 7C00 ; sistem önyükleyicisini hedef belirledir (NOT=7C00 MOV ESP, 62 ; yığına 62 ekledik MOV EBP, ESP ; yığından veriyi mbr'nin üstüne yazdık. Özet: Esp'de bir yığın noktalayıcıdır. İkiside yani; sp, esp yığınları kontrol edebilir ve dl, dx, edx ile yığın segmentine bağlanabilir. ; BP= Örnek POP BP ; yığından al POP SP ; yığından al SUB BP, SP ; bölgeden yığını çıkardık Özet: BP bölge noktalayıcıdır. Sistemde belirli bir aygıt üzerinde çalışırken mesela sabit diskinizin mbr'sini programlarken kullanabilirsiniz. Bunun yanında BP gene yığından çağırılmalı nedeni ise gene bilgisayardan onu ayırmanız gerekir. Kendi emrinize sokmanız için... NOT = Bir virüs yazarı bu parametre ile mbr'nin üstüne virüsü yazabilir. Not kendiniz denemeye kalkmayın yapamazsınız nedeni ileriki derslerde bir sistemin nasıl sistem moduna alınacağını yazmadığım. Kısaca şimdi bahsedeceğim Win95'in IFSMgr'leri ile sistem yazma/silme işlemleri yapılır. IFSMgr_Ring0_FileIO = Çekirdek modu yani herşey serbesttir. Örneğin BIOS'u silip yazabilirsiniz IFSMgr_Ring1_FileIO = Aygıt ve kabuk modu IFSMgr_Ring2_FileIO = Aygıt modu IFSMgr_Ring3_FileIO = Uygulama modu Daha fazlası ileriki derslerde yazacağım EBP= Örnek POP EBP ; yığından al MOV ESI, EBP ; yığına taşı Özet Aynı işlemleri 32 bitte yapar yanlız, sistem modu içinde kullanılabilir. WORD PTR VE BYTE PTR bir sonraki ders...

ah ah asembly alttan almak zorunda olduğum derslerden biri 2. dönemde bu konu uğrak yerlerimden biri olacak

Arkadasım, BiLgisayar programLaması biLen kişi sayısı parmakLa sayıLacak kadar az forumda bu nedenden doLayı iLgiLerinide cekmiyor haLiyLe, bende assembLy'e yavas yavas giris yapıyorum fırsat buLdukca, Ama emin oL hiç bir emek havada kaLmaz, birgün bir arkadasımız geLir bu konudan faydaLanır öyLe bir dua ederki cehennemden dönersin beLkide tabii, bu işin şakası. ama dedigim gibi, programLama biLen veya programLamayLa iLgiLenen az sayıda arkadasımız var. seninde gördügün gibi buraya yorum bırakanLarın hemen hemen hepsi daha önce okuLda vb.. yerLerde programLamayLa içLi dısLı oLmus arkadasLarımız Kimse, yanLıs birsey yazmak istemez biLmedigi veya iLgiLenmedigi bir konuya. BasarıLarının devamLıLıgını diLerim Konu adına ayrıca tesekkür ederim. +k.. edit: paravirtual-life. isimli kullanıcıya daha önce karma vermişsiniz. Tekrar karma verebilmek için, başka kullanıcılara karma dağıtmanız gerekiyor. -

bende unide assembly 1- 2 2 sene boyunca alttan almak zorunda kaldim:/ neyseki son sene hoca yuruyen band uzerindeki esyalarin rengine gore saga sola ileri hareket eden bir band sistemin kontrol eden bir program kodlamamizi istedide sinavi gectim konu icin tesekurler bence cok yararli olmus...

Güzel olmuş syntax, ilerletmek lazım dersleri, tşkler

Lan bi okuduğunuz bi baktığınız yok wardom bakanlara teşşekürlerimi sunarım ayrıca yorum yazanlarada O kadar emek harcadım lan her bir ders için 3 saat ayırdım... Hatasız yazayim diye.. Şurda şuraları canlandıralım forumumuz bilgi ile dolsun diyoruz işe bak NOT = Ama ben bu bölümü adam etmeyi bilirim! NOT : Dersleri hızlı yazdığım için bazı hatalar olabilir insanlık hali ve çoğu komutun birbirine benzer ve işlevlikte olmasından.. -

Tamam usta bide veri yazmacı konusu tamamladım şimdi dersin devamını aşada belirttim DERSİN DEVAMI... EBX=(EXTENTED BASE REGISTER= Örnek MOV EBX, EAX ; eax'taki veri ebx'e taşındı Özet Ebx bölge yazmacıdır. Verileri taşır ve kaydersiniz ebx vs.. genişletilmiş yazmaçlar. Linux i386 Kernellerinde ve çeşitli tcp/ip soket programlamada kullanılır. KORUMALI KİPTİR. ; CL = Örnek MOV CL, 62 ; 62 fonksiyonunu CL'ye taşıdık. MOV AL, CL ; CL mutlaka kendi başına kalamaz al ile tamamlanır. Özet CL sayı yazmacıdır. Genelde içine fonksiyon alır. Ama asıl görevi sayılarla ilgilidir. "KORUMASIZ" KİPTİR!!! CX = (COUNTER REGISTER= Örnek NOP ; işlem yok nop= no operation MOV CX, BX ; bölgedeki veriyi sayı yazmacına ata Özet CX ile büyük sayılar işlemi yapabilirsiniz. KORUMALI KİPTEDİR.!! ECX = (EXTENTED COUNTER REGISTER= Örnek MOVSX ECX, CX ; cx'teki veri büyüyerek ecx'e alındı. UNUTMA = 0000=EAX -> CWD, MOVSX için. Özet ECX sayı yazmacıdır. Bölgelerin yerini bulmak veya büyük işlemler için kullanılır. ; DL = Örnek MOV DL, CL ; veriyi alıp veri yazmacına kaydetti NOT = DL önemli bir yazmaçtır. Segment Yazmaçları ile önemli derecede bağlantıları vardır!! BAŞLICA SEGMENTLER DSEG = SSEG = CSEG = IP = Bunlar genel verileri listelemek için kullanılır. DSEG = Verileri bir yerde toplar ve erişim sağlar ÖRNEK: DSEG DB $1,$2 ; veri segment global bir segmenttir. Global Segmentler nedir? 1-Her yerden erişilir. 2-Fonksiyon veya makro çağırabilirsiniz 3-Olmazsa olmazdır! SSEG = Yığını belirler ve aynı zamanda boş alanın ne kadar 0 ile doldurulacağını belirler ÖRNEK SSEG DUP 13 DUP = Duplacation Factor. Bu hiçbir zaman bilinmez nedeni bilgisayarın nereleri 0 ile dolduracağını kimse hesaplayamaz ve olasıklarda buna el vermez. CSEG = Kod burada geçer. PROC yani içinde proccesure barındırır. PROC FAR gibi... Örnek CSEG START MAIN PROC FAR LDS WORD PTR , ESP. . . VS.. IP = Genelde bunu elleyemezsiniz bunu bilgisayar kendi belleğine göre yapar. ÖRNEK? HEPSİNİ BİTİŞİNDE ENDS yazılır Örnek CSEG ENDS ; gibi Veri yazmaçlarına devam... DX = (DATA REGISTER= Örnek MOV DS, DX ; veriyi veri segmentine taşı Özet 16 bitlik taşıyıcıdır. Veriyi kaydeder!!! Korumalı Kiptedir!!! EDX = (EXTENTED DATA REGISTER= Örnek MOV EDX, ECX ; sayıyı veri yazmacına kaydettik Özet 32 bit kayıt eder . Genellikle TCP/IP soket programlamada gelen verileri, veri yazmacına yazdırır. 8 bitlik korumalı yazmaç - 2 tanedir ve bunlar hepsini tamamlar örnek AH+AL=AX (8+8=16) AX+AL+AH=EAX (16+8+8=32) SONRAKİ DERS SP -

baya bi zora benziyor ama çözücez "Syntax-Life" çook teşekkür emegine saglik

Yasaklı kelimelerden, arada harfin birine boşluk koyun..

teşekkürler Assembly zor bir programlama dili katılıyorumüniversitedeyken az kafa kırmamıştım

Evet Bencede kesinlikle Devam edilmesi gereken bir konu Çok Kişinin Faydalanacağından eminim ben hatta sırf bu konu için üye olanlarda çıkacaktır.