PDA

Tam Sürümünü Görmek İçin : assembly hakkında önemli


serimc
14/01/2005, 22:46
Benim şöyle bir sorum olacak:
şimdi 8086 mikroişlemcisi kod yazmak istediğimiz zaman bunun komut setlerine bakarız programı yazarız:
örn:
.model small
.code
org 100h
başla: JMP ANA
yazı db 'eren$' ;ekranın ortasına yazılacak isim
ana proc
call ekrsil ;ekranı sil
call kurkon ;imleci konumlandır
call ekryaz ;ekrana yaz
mov ah,7 ;tuşa,
int 21h ;basılırsa
mov ah,4ch ;programdan
int 21h ;çık.
ana endp
ekrsil proc
mov ah,6 ;fonksiyon 6
mov al,0 ;geçerli sayfa (0. sayfa)
mov bh,04h ;renk (siyah zemin, kırmızı text)
mov cx,0 ;00,00 dan,
mov dx,184fh ;24,79 ‘a kadar,
int 10h ;sil
ret
ekrsil endp
kurkon proc
mov ah,2 ;fonksiyon 2
mov bh,0 ;geçerli sayfa (0. sayfa)
mov dx,0C24h ;imleç koordinatları
int 10h ;imleci konumlandır
ret
kurkon endp
ekryaz proc
mov ah,9 ;fonksiyon 9
mov dx,offset yazı ;yazılacak yazının ofset adresi
int 21h ;ekrana diziyi yaz
ret
ekryaz endp
end başla

bu programı debug ile derlerseniz çok rahatlıkla çalıştırırsınız fakat bu komutlar win32asm denilen derleyicilerde çalışmıyor hata veriyor.
O derleyiciler için yazılmış kodlara baktığımda ise :
.386
.model flat, stdcall
include user32.inc
include kernel32.inc
.data
MsgBoxCaption db "Win32 Application",0
MsgBoxText db "Hello World!",0
.const
NULL equ 0
MB_OK equ 0
.code
Main:
invoke MessageBoxA, NULL, ADDR MsgBoxText, ADDR MsgBoxCaption, MB_OK
invoke ExitProcess, NULL
end Main

bu tip kodlarla karşılaşıyorum.
Şimdi 8086 assembly ile windowsun kullandığı assembly farklı mı?
Farklıysa farkları neler?yani microsoft kendisi için özel bir assembly mi geliştirmiş oluyor?Eğer öyleyse win asm derlenirken önce 8086 asm'ye daha sonra makine diline mi dönüşüyor.VE yine öyleyse bunun normal programlama dilinden ne farkı var?Niye böyle bi şeye ihtiyaç duymuş?
Bunları ortak bir platformda derleyebileceğimiz yani ilk yazdığım kodu yazıp derleyebileceğim bir editör program mevcut mu?
Bilen arkadaşlar beni bu kavram karmaşasından kurtaracak cevap verirlerse çok sevinirim.
Saygılar,


yolgezer
15/01/2005, 00:29
assembly makine dilidir. nasıl java platforms bağımsızım diyorsa, assembly de tam tersi platforma sıkı sıkı bağlıdır.

8086 assembly si dediğiniz vakit Intel 8086 nın sahip olduğu emir takımları ile kod yazma anlaşılır. bunun Microsoft veya herhangi bir yazılımcı ile ilgisi yoktur. Tamamen Intel'in tanımladığı birşeydir.

http://sourceforge.net/projects/nasm

Eğer bir freebsd makineniz veya linux makineniz varsa hemen girip, herhangi bir editor ile kodlarınızı yazıp nasm ile derleyebilirsiniz. Tabiki windows sürümleri de var.

Bunun haricinde intel'in kendi assembler ları da var.

serimc
15/01/2005, 23:19
ok.
Şimdi yukarıdaki invoke, MsgBoxText gibi şeyler ne oluyor? bunların 8086'daki karşılığı nedir?
Bunları anlatmaya çalıştım.Bunlar 8086nın komut setinde yok.Yani burda farklı bir durum var.Bu fark konusunda yardımcı olabilrseniz.Sorun çözülcek gibi
Saygılar,

Euclides
16/01/2005, 11:13
@yolgezer:
konu ile ne alaka diyorum !? assembler ile konun ne alaksı var !!!!!!
elmalar armutlar birbirini kovalar...
2....
nasm kullanmak windows için sadece işkence.....
linux içinse baş ağırısı...
@serimc:
ilk kodun x86 uyumlu (tüm amd ve intel işlemciler) PC'lerde "DOS" altında çalışmak üzere yazılmıştır.
Yani sen normalde(işletim sistemi olmadan) Int 21h çağırırsan *bu ne ülen ?!+Tripple fault+CPU Reset* ile karşılaşırsın.

DOS'dan bu yana çok sular aktı, artık işletim sistemler(Linux,Windows,MenuetOS,vb....)
Real mode yerine(mesela DOS), Protected mode kullanıyorlar.
O gördüklerin protected modun bir yaptırımı öyle her int'yi çağırmazsın I/O yapamazsın ! (normal programlar)
Aynı şeyi linux'de de yap yine dağıtacaktır.

önce git
http://www.masm32.com 'da Microsoft'un free assembler'i indir.
içinde bir sürü örnek bulacaksın
www.win32asm.cjb.net =>örnek
www.masmforum.com =>örnek

ayrıca ceviz.net'in dökümanlar bölümünde de assembly ile ilgili yazılar var..