Cevapla
 
Konu Araçları
Eski 20-04-09, 23:06 #81
mustibh mustibh çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!


Paylaşım için TeşekkürLer...
__________________
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 03-06-09, 20:22 #82
*taylan123* *taylan123* çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!


3 haftadır uğraşıyorum ancak daha şu ana kdar ekrana renkli ve arka plan rengi bulunan ayrıca bir tuşa basınca çıkabilen bir program yazabildim

assembly öğrenmek zor olabilir ama bence çok zevkli ve eğlenceli bir dil. bence herhes assembly öğrenmeli
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 07-06-09, 12:02 #83
toprakergin toprakergin çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!


biir çok forum da hep aynı programlama lardan bahsediyorlar bende asm örenmek istiyorum bir çok kaynak ve burdan sizlerden çok şeyler örenecehimden eminim konuya gösterdihiniz ilgiden dolayı teşekkürler kolay gelsin
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 20-06-09, 18:27 #84
sonalbay sonalbay çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!

baya karışık görünüyor gözüm korktu açıkcası
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 09-11-09, 02:21 #85
tugay1290 tugay1290 çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!

son mesaj yazilali 5ay olmus .klasik frmtr iste konuyu ac onuruna birak . biraz donanimhaber.com dan ornek alin ezü[email protected]
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 17-01-10, 18:53 #86
Sergio Alvarez Sergio Alvarez çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!

Bekliyoruz devamını...
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 18-06-10, 22:41 #87
Zümrüd-ü Anka Zümrüd-ü Anka çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!

2 Byte = 1 Word Değilmiydi ?
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 24-07-10, 13:38 #88
critoss critoss çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!

guzell bır paylasım asm bılmeyen kalmasın
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 10-11-10, 01:07 #89
C.R7 C.R7 çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!

makinaya hükmetmek için assembly. saolasın
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 20-03-11, 22:41 #90
sugarman16 sugarman16 çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!

assembler çok ii
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 14-12-11, 21:13 #91
sheggy sheggy çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!

Arkadaşlar konu ile ilgili hiç bilgisi olmayanlar için Assembly'den kısaca bahsettikten sonra orta seviye programcıların rahat anlayabileceği INTERRUPT komutlarından bahsedeceğim size.Herkesin rahat anlayabilmesi için olayı en basite indirgeyerek anlatıcam

Microprocessor'un Execution unit denen yani komutların çalıştırıldığı bölümde
AX,BX,CX,DX denen kaydediciler bulunur.Kaydediciler binary (1 ve 0) bilgileri saklamaya yararlar.Somutluycak olursak bunları program yazarken kullanacağımız değişkenler olarak düşünebiliriz.Her kaydedicinin High ve Lower denen iki bölümü bulunur...

BIU(Bus Interface Unit) dediğimiz komutların ve verilerin execution unit'e iletildiği bölümde segmentler bulunur.Bunlar ;
CS(Code Segment)
DS(Data Segment)
SS(Stack Segment)
ES(Extra Segment)

Code Segment Bellek içerisindeki komutlar için ayrılmış bölümün başlangıç adresini tutar.Instruction Pointer dediğimiz register da,Code Segmentin başladığı adresten itibaren bulunan komutlar arasında gezmek için kullanılır.Yani bir alt satırdaki komutu işlemek için bir aşağı iner ya da bir döngünün sonundayken döngünün başındaki komudu işlemek için döngünün başına döner.

Data segment de bellek içerisinde veriler için ayrılmış olan bölümün başlangıç adresinin tutar..

Stack segment program akışı sırasında bir yere dallanmanız gerektiğinde o anki bilgilerin adresini tutan segmenttir.Şöyle açıklayabilirim;
İç içe döngümüz var diyelim

for(i=1;i<10;i++)
{
for(j=1;j<i;j++)
{
içerdeki döngü çalışmaya başladığı an dıştaki döngü ile ilgili tüm bilgiler stack'a gönderilir.
AX,BC,CX,DX'i değişken olarak düşünün demiştim.Assembly'de elimizde sınırlı sayıda değişken vardır.Hepsi doluysa ve bize değişken lazımsa mesela

PUSH AX komutunu yazdığımızda AX'deki değer o anlık stack içine gönderilir ve AX'i başka iş için kullanabiliriz.
POP AX dediğimizde tekrar geri çağırabiliriz.
Ama unutmayın stack FILO(First in Last Out,ilk giren son çıkar;örnek:şarjör)mantığıyla çalışır ve içerdeki bilgilerin sırasına dikkat edilmelidir.AX'i PUSH ettikten sonra başka birşey daha PUSH etmişsek bu sefer,POP AX dediğimizde son PUSH ettiğimiz değer AX'e yazılır...

Segmentlerle ilgili açıklamalarımdan çıkaracağımız şudur.Memory,Segmentation ile yönetilir.Memory'i ülke olarak düşünün,oraya kod gönderiliyorsa kodlar için bir mahalle yaratılır,bunun adı Code Segment'dir ve o mahallenin başlangıç adresini tutar,veri gönderiliyorsa veriler için bir mahalle yaratılır,bunun adı da Data Segment'dir ve o veri mahallesinin başlangıç adresini tutar.Bunların adresleri olmazsa bunlara mektup geldiği zaman postacı onların nerede olduğunu bulamaz...

Microişlemciler ve Assembly'i tamamen burda açıklamak imkansızdır o yüzden genel olarak bahsettim.Yüksek seviyeli(c++,visual basic vs..) dillerde yazdığımız komutlar Assembly'e çevrilir,Assembly,Machine Code'a çevrillir,o da 1 ve 0 çevrilir.Yani bilgisayarda ne yaparsanız yapın,en sonunda olan biten 1 ve 0'dır.normal kullanıcıların rahat kullanabilmesi için,insan diline yakınlaştırılmış olan herşey birer makyajdır...

Şimdi bazı komutlara geçiyorum


EKRANA STRİNG YAZMA
MOV AH,09H
MOV DX,OFFSET MSG ;yada LEA DX MSG(Aynı işi yapar)
INT 21H
MSG DB 'Hello$'


INT 21 H interruptı AX registerının High bölümü yani AH ile çalışır.Eğer orada 09 var ise MSG etiketininin offset adresinde bulunan stringi ekrana yazdırır.MSG bir etikettir oraya MESAJVER'de yazabilrisiniz nasıl isterseniz.$da stringin sonunu belirtir.( ; ) assemblyde açıklama yapmak için kullanılır C++ daki // gibi..
Ayrıca yukarıda olduğu gibi bazı komutlarda Bu niye DX bu niye AH diye düşünmeyin işlemin yapısı bu şekildedir..hepsinde demiyorum bazılarında...
INT 21H EĞER AH'DA 09 VARSA DX İÇİNDE BULUNAN OFFSET ADRESTEKİ STRİNGİ EKRANA YAZDIRIR..

KARAKTER ALMA

MOV AH,08H
INT 21H

Bu komut bildiğimiz getch() komutudur.Bir karaktere basmamız için bizi bekler.Ve basılan tuşun ascii kodunu AL'nin içine atar.

EKRANDA TEK KARAKTER GÖSTERME

MOV AH,02H
MOV DL,49
INT 21H


INT 21H komutu eğer AH'da 02 varsa DL'nin içindeki ascii kodu ekrana yazdırır.
49 ascii kodu 1 sayısının karşılığıdır.Yani ekrana bir yazar..
Bunun da yapısı bu şekildedir.02H her zaman DL'nin içindeki ascii kodu yazdırır.
DL'ye Hex ya da decimal gönderirsniz niye gülen surat çıkıyor ekranda demeyin.
Şöyle düşünelim,
08H'ı öğrendik

MOV AH,08H
INT 21H
MOV AH,02H
MOV DL,AL
INT 21H


Bu 5 satır c++ daki ya da herhangi bir dildeki getche() komutudur

INT 21H interruptı,eğer AH'da 08H varsa Bir tuşa basılması için bekler ve bastıktan sonra,basılan tuşun ascii kodunu AL'ye gönderir.AL'yi de 02H'ın altında DL'nin içine taşıdık ve bastığımız tuşu ekranda gösterdik.Neden AL'yi DL'ye attık çünkü 02H,DL'nin içindeki ascii kodu ekranda gösterir...


ÇIKIŞ

MOV AH,4CH
INT 21H

Programdan çıkmak için kullanılır...AH'da 4C varsa programdan çıkar...


Koşullu ve koşulsuz JUMP

CMP AL,BL ;AL VE BL'Yİ KARŞILAŞTIR
JE EXIT ;JUMP if EQUAL (eğer AL eşitse BL'ye EXIT etiketine atla),
...
...
....

EXIT: ;sadece etikettir,çık,zıpla,ne isterseniz yazabilirsiniz,yeterki istediğimiz satıra gitsin.

MOV AH,4CH
INT 21H ;çıkış komutu

Bu koşullu JUMP,koşulsuzu da aşağıda örnekte göstericem.


Şimdi bu öğrendiklerimizle ilgili bir örnek yapalım.Assembly ile yazılım yaparken zorlanıyorsanız sanki o programı bildiğiniz bir programlama dilinde yazıyomuş gibi düşünün ve algoritmayı kurduktan sonra geri kalan komutları alt alta yazmak..


Kullanıcıdan bir sayı isteyelim girdiğimiz sayı 5'den küçük ve eşitse yanlış girdiniz mesajı versin ve bir daha girmemizi istesin.5'den büyükse doğru girdiniz mesajı versin ve çıksın..Bu programı simplified model ile yazıcam bu bir syntaxdır bazı şeyler diğer programlama dillerindeki gibi standarttır...

MOV,CMP gibi komutların görevini geçmiş sayfalardan bildiğinizi varsayıyorum,Bu programa baktığınızda anlayamıyorsanız,en başa dönün ve herşeyi sakin sakin tekrar okuyun ve anlattığım komutların ne iş yaptığını iyice öğrenip tekrar bakın programa.






.MODEL SMALL
.DATA ;data segment
ISTE DB 0AH,0DH,'5den buyuk bir sayi giriniz=','$'

YANLIS DB 0AH,0DH,'YanliS girdiniz tekrar deneyin...$'

DOGRU DB 0AH,0DH,'Dogru girdiniz...$'


.CODE ;code segment

ANA PROC ;ana prosedürümün başlangıcı

MOV AX,@DATA
MOV DS,AX


TEKRARSOR:
MOV AH,09H
MOV DX,OFFSET ISTE
INT 21H
;(ISTE offset adresindeki stringi ekranda göster)

MOV AH,08H
INT 21H
;Bir sayı girilmesini bekle ve AL'ye at

MOV AH,02H
MOV DL,AL
;sayıyı AL'den DL'ye at
INT 21H ; Girilen sayıyı ekranda göster

CMP DL,53 ; Girilen sayıyı 5 ile karşılaştır 5'in asci kodu 53
JLE MESAJIM ;DL, 5'den less or equal ise MESAJIM etiketine atla.Eğer bu koşul sağlanmazsa,Instruction pointer alt satıra geçicek ve o satırı işliycek.

JMP DOGRUGIRDIN ;üst satırdaki koşul sağlanmazsa ve bu satıra gelirse demek ki DL,5'den büyükmüş,ve bu koşulda "doğru girdiniz" yazması için DOGRUGIRDIN etiketine atla.



MESAJIM:

MOV AH,09H
MOV DX,OFFSET YANLIS
INT 21H
;ekrana YANLIS etiketinin offsetindeki stringi yaz
JMP TEKRARSOR ;koşulsuz jump.TEKRARSOR etiketine dön.o etiketin altında da sayı giriniz diye tekrar soruyor arkadaşlar döngü yaptık.girilen sayı 5den küçükse MESAJIM etiketine atladık ve ekrana "Yanlış girdiniz" yazdırdıktan sonra,TEKRARSOR etiketinin olduğu satıra yani başa döndük,tekrar sorduk.


DOGRUGIRDIN:

MOV AH,09H
MOV DX,OFFSET DOGRU
INT 21H
;Ekrana doğru girdiniz yaz

MOV AH,08H
INT 21H
;bir tuşa basılmasını bekle

MOV AH,4CH
INT 21H
;çık

ANA ENDP ;ana procedurun sonu.ANA bir etikettir MAIN'de olabilir,programa baktığınızda size,yaptırcağınız iş konusunda bilgi verecek etiketler kullanırsanız daha iyi takip edebilirsiniz yazılımı

END ;programın sonu



0DH VE 0AH Alt satıra geçmek için kullanılır...0DH'ın decimali 13dür.13=Enter

Ascii kodlar kafanızı karıştırmasın 48=0 olduğunu bilmeniz sizi diğer rakamlara götürür



Sonuna H yazdığım rakamlar,o rakamın hexadecimal olduğunu gösterir yani o sayı,16'lık sayı tabanındadır.

0 1 2 3 4 5 6 7 8 9 A B C D E F şeklindedir


0'dan 9'a kadar aynıdır 10 ve 10dan sonrası harflerle gösterilir..


Hexadecimal sayıları kullanmamızın amacı binary sayıları her zaman okumanın zor olmasıdır.Hexadecimal sayılar bu konuda bize kolaylık sağlar.Hexadecimal sayıları biraz anlarsak şu şekilde yorumlayabiliriz ki binary gösterimdeki her 4 bitin tek karaktere indirilmiş halidir.Işte bu 1 ve 0'lar çeşitli makyajlara uğrayarak,işletim sistemlerimizin arayüzüne,compilerlarımıza kadar bize ulaşmışlardır.Mesele son kullanıcıları ve bilgisayar konusunda profesyonel olmayanların olayları rahat anlayabilmesi değil midir?Bilgisayarım ingilizce mi biliyor da benim ingilizce olarak verdiğim komutu anlıyor? diye kendinizle sorarak çeşitli süzgülerden geçtikten sonra 1 ve 0'lara ulaşabilirsiniz.Neyse konuyu dağıtmayalım.

Örneğin;

1111 0101 her 4 biti ayrı ayrı ele aldığımızda sağdan başlayarak,ilk 4 bit 5 sayısına karşılık gelir diğeri de 15 sayısına karşılık gelir.15in hex değeri F'dir.yani bu sayı hexadecimal olarak F5H'dır.

Hexadecimal sayılarda toplama

1B
4A
+
--------
65

B'nin onluk sistemde gösterimi 11'dir.A'nın ki ise 10'dur.10+11=21 eder.Tabanımız 16 olduğu için aşağıya (21-16)=5 yazılır ve 1 elde sola kayar...4+1=5 elde var 1=6....sonuç 65H

Binary tabanda işlemin kanıtı;

0001 1011 =1B
0100 1010 =4A
+
-----------
0110 0101 = 65

Hexadecimal sayılarda çıkarma


4C
1F
-
-------
2D


Hex C 10'luk sistemde 12'dir.F ise 15'dir....Bu işlemde C'den F çıkarılamayacağı için yani 12'den 15 çıkarılamayacağı için C yanındaki 4'den 16bit alır.Yani
C=12+16=28 olur. 28-F yani 28-15=13 olur..13ün hex değeri D'dir.
4 rakamı C'ye 16 bit verdiği için 3 kaldı ve 3-1=2. sonuç 2DH


Az daha karışık bir örnek yapıcam

EC0D
1D2E
-
-----------
CEDF


10luk sistemde D=13 E=14'dür.Yine 13'den 14 çıkarılamayacağı için D yanındakine bakar ama 0 olduğu için ondanda birşey alamaz.Bu sefer 0,C'den 16bit alır ve D'ye de 16 bit verir.Yani sıfır C'den 16 bit aldıktan sonra 16 olur ve D'ye 16bit verip 15 kalır.D=13'dü 16 bit aldı 29 oldu.29-E yani 29-14=15'dir.15=F'dir...0, C'den 16 bit almıştı D'ye 1 verdi 15 kaldı.15-2=13...13=D
C,0'a 16bit verdi ve B oldu.B-D yine yapılamaz o yüzden B, E'den 16 bit alır.B=11+16=27 olur..27-D yani 27-13= 14...14=E......En soldaki E,C'ye 16 bit vermişti D oldu.D-1=C..Sonuç=CEDF


Arkadaşlar oldukça basite indirgemeye çalıştım.Bu anlattıklarım tamamen kendi bilgilerim üzerine yapmış olduğum yorumlamalardır,bir yerden okuyup kopyala yapıştır yapmadım.Arada hatalar yapmışsam ya da eksik bilip anlattıklarım olmuşsa kusurabakmayın.

Mesajı son düzenleyen sheggy ( 19-01-12 - 00:35 )
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 29-12-11, 16:32 #92
37_ismail_37 37_ismail_37 çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!

ben Assembly sitesinin arıyorum ama bulamıyorum bilen varsa yazabilirmi
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 02-06-12, 22:05 #93
elektra11 elektra11 çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!

arkadaş bana kullanıcı tarafından girilen 2 sayıdan büyük olanı 2 ile çarpıp küçük olanıda 2ye bölüp ekrana yazdıracak program lazım yardımcı olabilir misin?
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 22-02-13, 17:48 #94
16MACIR 16MACIR çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!

Alıntı:
Gerçek Mesajı Gönderen 37_ismail_37 Mesajı Göster
ben Assembly sitesinin arıyorum ama bulamıyorum bilen varsa yazabilirmi
evet .
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 15-11-13, 13:46 #95
H21394 H21394 çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!

Merhabalar,

"Assembly Öğreniyorum" yazisini cok begendim. Cok tesekkür ederim.
Bende Assembly ögrenmek üzere ilk adimlari atmaya basladim. Bu süre esnasinda
sizin gibi profesyönel kisilerin olmasi son derece önemli. Bu yüzden bana konuyla ilgili bazi
alanlarda yardimci olursaniz cok sevinirim.

Bu programda sonucu ekrana cikti olarak nasil gösterebilirim. Kendim denedim malesef
yapamadim. Bana yardimci olursaniz cok sevinirim.

Selamlar
H21394



.data
degerler db 10h, 2h, 5h, 23h, 5h
sonuc db ?
.code
main proc far
mov ax,@data
mov ds,ax
mov bx, offset degerler
sub ax,ax
mov al, [bx]
mov cx, 4
don: inc bx
cmp al,[bx]
jc degistir
dec cx
jnz don
jz exit
degistir:mov al,[bx]
dec cx
jnz don
exit:
main endp
end main
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 01-04-14, 23:44 #96
kezeleme kezeleme çevrimdışı
Varsayılan C: Assembly Öğreniyorum..!

http://www.frmtr.com/diger-programla...-gizlenir.html bu konuda yardim edebilir misiniz acaba ???
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Cevapla

Bu konunun kısa yolunu aşağıdaki sitelere ekleyebilirsiniz

Konu Araçları

Gönderme Kuralları
Yeni konu açamazsınız
Cevap yazamazsınız
Dosya gönderemezsiniz
Mesajlarınızı düzenleyemezsiniz

BB code is Açık
Smiley Açık
[IMG] kodu Açık
HTML kodu Kapalı



Tüm saatler GMT +3. Şuan saat: 02:20
(Türkiye için artık GMT +3 seçilmelidir.)

 
5651 sayılı yasaya göre forumumuzdaki mesajlardan doğabilecek her türlü sorumluluk yazan kullanıcılara aittir. Şikayet Mailimiz. İçerik, Yer Sağlayıcı Bilgilerimiz. Reklam Mailimiz. Gizlilik Politikası. Tatil
Copyright © 2018