Delphi - Assembly
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Delphi - Assembly
Selamun Aleyküm.
Arkadaşlara forumda arrattm. Googleda arattım ama güzel bir döküman bulamadım.
Delphinin desteklediği asembly kod listesi var elimde ancak
hangi kodun ne işe yaradığı yok.
İnternette ise bazı bilinen kodlar var (push,mov,call vb.)
Elinde Assembly kod listesi ve ne işe yaradığı hakkında dökümanı olan var ise paylaşa bilir mi yada bir link verebilir mi?.
Kapsamlı bir açıklama gerekmiyor.
Türkçe kaynak da şart değil ingilizce de kabulumdur.
Sadece Şu Kod : Bu işe yarar şeklinde kısa açıklamalar olan bir döküman bile yeterli benm için.
Örnek filan da gerekmez
Yardımlarınız için şimdiden teşekkürler.
Arkadaşlara forumda arrattm. Googleda arattım ama güzel bir döküman bulamadım.
Delphinin desteklediği asembly kod listesi var elimde ancak
hangi kodun ne işe yaradığı yok.
İnternette ise bazı bilinen kodlar var (push,mov,call vb.)
Elinde Assembly kod listesi ve ne işe yaradığı hakkında dökümanı olan var ise paylaşa bilir mi yada bir link verebilir mi?.
Kapsamlı bir açıklama gerekmiyor.
Türkçe kaynak da şart değil ingilizce de kabulumdur.
Sadece Şu Kod : Bu işe yarar şeklinde kısa açıklamalar olan bir döküman bile yeterli benm için.
Örnek filan da gerekmez
Yardımlarınız için şimdiden teşekkürler.
aslangeri yazdı:s.a.
elinizdeki kodların listesini verirseniz bilen arkadaşlar hangi komutun ne işe yaradığını yazabilir.
Kod: Tümünü seç
LOCK
REP
REPE
REPZ
REPNE
REPNZ
SEGES
SEGCS
SEGSS
SEGDS
SEGFS
SEGGS
ADC,mLeft
ADD,mLeft
AND,mLeft
AAA,mAX
AAS,mAX
AAD,mAX
AAM,mAX
BOUND,
mNONE
BSF,mLeft
BSR,mLeft
BT
BTC,mLeft
BTR,mLeft
BTS,mLeft
CALL,mNONE
CMP
CBW,mAX
CWDE,mAX
CWD,
<mAX,mDX>
CDQ,
<mAX,mDX>
CLC
CLD
CLI
CMC
CMPSB,
<mSIDI>
CMPSW,
<mSIDI>
CMPSD,
<mSIDI>
DAA,mAX
DAS,mAX
DEC,mLeft
DIV,mLeft
ENTER,
mNONE
HLT
IDIV,mLeft
IMUL,mLeft
IN,mLeft
INC,mLeft
INSB,mDI
INSW,mDI
INSD,mDI
INT
INTO
IRET
IRETD
JMP
JO
JNO
JC
JB
JNAE
JNC
JAE
JNB
JE
JZ
JNE
JNZ
JBE
JNA
JA
JNBE
JS
JNS
JP
JPE
JNP
JPO
JL
JNGE
JGE
JNL
JLE
JNG
JG
JNLE
JCXZ
JECXZ
LAHF,mAX
LEA,mLeft
LEAVE,
mNONE
LDS,mSpecial
LES,mSpecial
LFS,mSpecial
LGS,mSpecial
LSS,mSpecial
LODSB,
<mAX,mDI>
LODSW,
<mAX,mDI>
LODSD,
<mAX,mDI>
LOOP,mCX
LOOPE,mCX
LOOPZ,mCX
LOOPNE,mCX
LOOPNZ,mCX
LOOPD,mCX
LOOPDE,mCX
LOOPDZ,mCX
LOOPDNE,
mCX
LOOPDNZ,
mCX
MOV,mLeft
MOVSX,mLeft
MOVZX,mLeft
MOVSB,
<mSIDI>
MOVSW,
<mSIDI>
MOVSD,
<mSIDI>
MUL,mLeft
NEG,mLeft
NOP
NOT,mLeft
OR,mLeft
OUT
OUTSB,mSI
OUTSW,mSI
OUTSD,mSI
POP,mLeft
POPF
POPA,mSpecial
POPAD,
mSpecial
POPFD,
mSpecial
PUSH
PUSHF
PUSHA
PUSHAD
PUSHFD
RET
RETN
RETF
SUB,mLeft
SBB,mLeft
RCL,mLeft
RCR,mLeft
ROL,mLeft
ROR,mLeft
SAL,mLeft
SHL,mLeft
SAR,mLeft
SHR,mLeft
SHLD,mLeft
SHRD,mLeft
SAHF
SCASB,mDI
SCASW,mDI
SCASD,mDI
STC
STD
STI
STOSB,mDI
STOSW,mDI
STOSD,mDI
TEST
WAIT
XCHG,<mLeft,
mRight>
XLAT,mAX
XOR,mLeft
SETA,mLeft
SETAE,mLeft
SETB,mLeft
SETBE,mLeft
SETC,mLeft
SETE,mLeft
SETG,mLeft
SETGE,mLeft
SETL,mLeft
SETLE,mLeft
SETNA,mLeft
SETNAE,mLeft
SETNB,mLeft
SETNBE,mLeft
SETNC,mLeft
SETNE,mLeft
SETNG,mLeft
SETNGE,mLeft
SETNL,mLeft
SETNLE,mLeft
SETNO,mLeft
SETNP,mLeft
SETNS,mLeft
SETNZ,mLeft
SETO,mLeft
SETP,mLeft
SETPE,mLeft
SETPO,mLeft
SETS,mLeft
SETZ,mLeft
ARPL
LAR,mLeft
CLTS
LGDT
SGDT
LIDT
SIDT
LLDT
SLDT
LMSW
SMSW
LSL,mLeft
LTR,mLeft
STR,mLeft
VERR
VERW
BSWAP,mLeft
XADD,mLeft
CMPXCHG,
<mLeft,mAX>
INVD
WBINVD
INVLPG
FLD,m87
FILD,m87
FST,m87
FSTP,m87
FIST,m87
FISTP,m87
FADD,m87
FADDP,m87
FIADD,m87
FSUB,m87
FSUBP,m87
FSUBR,m87
FSUBRP,m87
FISUB,m87
FISUBR,m87
FMUL,m87
FMULP,m87
FIMUL,m87
FDIV,m87
FDIVP,m87
FDIVR,m87
FDIVRP,m87
FIDIV,m87
FIDIVR,m87
FCOM,m87
FCOMP,m87
FCOMPP,m87
FICOM,m87
FICOMP,m87
F2XM1,m87
FABS,m87
FBLD,m87
FBSTP,m87
FCHS,m87
FDECSTP,m87
FFREE,m87
FINCSTP,m87
FLD1,m87
FLDCW,m87
FLDENV,m87
FLDL2E,m87
FLDL2T,m87
FLDLG2,m87
FLDLN2,m87
FLDPI,m87
FLDZ,m87
FNOP,m87
FPREM,m87
FPATAN,m87
FPTAN,m87
FRNDINT,m87
FRSTOR,m87
FSCALE,m87
FSETPM,m87
FSQRT,m87
FTST,m87
FWAIT,m87
FXAM,m87
FXCH,m87
FXTRACT,m87
FYL2X,m87
FYL2XP1,m87
FCLEX,m87
FNCLEX,m87
FDISI,m87
FNDISI,m87
FENI,m87
FNENI,m87
FINIT,m87
FNINIT,m87
FSAVE,m87
FNSAVE,m87
FSTCW,m87
FNSTCW,m87
FSTENV,m87
FNSTENV,m87
FSTSW,m87
FNSTSW,m87
FUCOM,m87
FUCOMP,m87
FUCOMPP,m87
FPREM1,m87
FCOS,m87
FSIN,m87
FSINCOS,m87
ing.. veya trk. dökümanı oolan varsa ve palaşırsa sevinirim.
ilk mesajı yazdığımdan bu yana dünya kadar döküman indirdim ama. hiçbirisi komutlara değinmemiş. birer ikişer örneklerle bişeyler ıspatlamaya çalışmışlar o kadar.
AsmHelp işine yararsa bir bakıver
http://derindelimavi.blogspot.com/2007/ ... ogram.html
http://derindelimavi.blogspot.com/2007/ ... ogram.html
c ile yapılan hemen her şeyi delphi ile de yapabiliyoruz zaten. (c'nin opertatorleri güçlü ama )fduman yazdı:Assembly öğrenip ne yapacaksın merak ettim. Buna vakit harcamak yerine C, Java öğrensen kendin için daha hayırlı bir iş yapmış olursun.
Piyasada artık bu kadar alt seviyede diller kullanılmıyor. Yeni nesil virusler bile artık C ile yazılıyor.
ama Assembly'nin yeri başka
Kullanılabilecek komutların listesi icin herhangi bir Intel x86 assembly kitabina veya programlama kılavuzuna bakabilirsiniz. Delphi sadece bu komutlari kullanmaniz icin olanak sağlar. Ama bu komutların ne olacağı tamamen bilgisayarınızın işlemcisi ile ilgilidir.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Konu biraz eskimi$ ancak ben de assembly'e baslamayi dusunuyorum bu aralar. Hem forumdaki arkadaslara hem de bu zaman zarfinda ilk mesaji atan arkadasin biseyler ogrenip ogrenemedigini sormak istiyorum.
1. sorumu zaten sordum gelelim 2. soruma..
Compilerlarin yaptigi $ey hakkinda yanli$im varsa düzeltin,
1) High-level programla dillerini
a) Assembly diline ceviriyor
b) Direkt makine diline ceviriyor
ve obj dosyalarini olusturuyor.
2) Aşama, linker obj dosyalarini executable hale getiriyor
Sonuc: Program hazır.
1) Assembly hangi assembly?
Masm, Tasm?
2) Assembly'ye gerek yok C ile de programlama dili yazilir diyorsaniz Peki nedir bu olay? Ben bu sefer yapacaklarimi,
1) Uydurma programlama dili olusturulur
2) C koduna cevirilir (otomatik)
3) C'ye cevirildikten sonra assembly diline cevirilr
4) Olusturulan .obj dosyalari linker ile executable olur
5) Program hazır.
Yönündemi şekillendirmeliyim? Eğer 2. anlattigimi yapacaksam, C nin builderini ve linkerini kullanabilir miyim istedigim gibi?
Iyi calismalar, kolay gelsin.
1. sorumu zaten sordum gelelim 2. soruma..
Compilerlarin yaptigi $ey hakkinda yanli$im varsa düzeltin,
1) High-level programla dillerini
a) Assembly diline ceviriyor
b) Direkt makine diline ceviriyor
ve obj dosyalarini olusturuyor.
2) Aşama, linker obj dosyalarini executable hale getiriyor
Sonuc: Program hazır.
1) Assembly hangi assembly?
Masm, Tasm?
2) Assembly'ye gerek yok C ile de programlama dili yazilir diyorsaniz Peki nedir bu olay? Ben bu sefer yapacaklarimi,
1) Uydurma programlama dili olusturulur
2) C koduna cevirilir (otomatik)
3) C'ye cevirildikten sonra assembly diline cevirilr
4) Olusturulan .obj dosyalari linker ile executable olur
5) Program hazır.
Yönündemi şekillendirmeliyim? Eğer 2. anlattigimi yapacaksam, C nin builderini ve linkerini kullanabilir miyim istedigim gibi?
Iyi calismalar, kolay gelsin.
Compilerların kodu makine diline çevirene kadar ara işlemleri olduğunu okumuştum. Yani öyle küt diye makine dili çıkmıyor. Parsing, ara bir dil oluşturma, optimizasyon, sözdizimsel(syntax) analiz, semantic(anlamsal) analiz gibi. Ben bunları yazıyorum fakat çoğu nasıl iş görür pek bilmem. Sana programlama dilllerinin teorisini öğreten kitapları okumanı tavsiye ederim. "Compiler's dragon book" diye bir kitabın çok fazla ismini duydum. Wikipedia'dan başlayabilirsin.
Assembly dilleri makine dilini çok az insancallaştırmaya yarıyor. Mesela jmp, call gibi atlama, dallanma işlenme yapan komutlara direk adresi yazman lazım yazdığın koda göre. Her kod değiştiğindede bunlara güncellemen lazım. Fakat assembly dilleri bunları senin için labellarla kolaylaştırıyor. Çalıştığın Platforma bağlı olarak onları executable hale getireiliyor. Bide abudik gubudik opcodelarla uğraşmana gerek kalmıyor.
Baktığın zaman Compiler'ın insancallaştırılmış bir dili kullanmasına gerek yok aslında.
Assembly ile işin olmasa bile temellerini öğrenmeni tavsiye ederim.
Hatta temellerine hakim olmayan bir programcının ezbere kod yazdığını, sınırlı bir programcı olacağını iddia edebilirim.
Assembly ile kod yazmak olduça zor fakat temelleri basittir.
Aşşağıdaki konuları zihninde oturtmanı tavsiye ederim.
Mesela data tipler nasıl temsil edilir 01 lerle?
Dünyada 10 çeşit insan vardır, binary bilenler ve bilmeyenler coder atasözü nedemek istiyor mesela ?
Alt yordama nasıl dallanılır? (!!)
yordamdaki değişkenler, global değişkenler nerde saklanır? (!!)
Heap nedir, stack nedir, exception nedir, kesme nedir ne işe yarar? (!!)
Protected mode, real mode nedir?
Neden 98 de yaparken XP'de IO portlara erişemiyorum direk?
32 bit işlemci niye 32bit ?(!!)
2. sorunu anlamadım, ama herhalde beyin fırtınası yapıyorsun ki bence güzel birşey. Bu bilgiler ışığında bidaha düşün.
Kolay gelsin
Assembly dilleri makine dilini çok az insancallaştırmaya yarıyor. Mesela jmp, call gibi atlama, dallanma işlenme yapan komutlara direk adresi yazman lazım yazdığın koda göre. Her kod değiştiğindede bunlara güncellemen lazım. Fakat assembly dilleri bunları senin için labellarla kolaylaştırıyor. Çalıştığın Platforma bağlı olarak onları executable hale getireiliyor. Bide abudik gubudik opcodelarla uğraşmana gerek kalmıyor.
Baktığın zaman Compiler'ın insancallaştırılmış bir dili kullanmasına gerek yok aslında.
Assembly ile işin olmasa bile temellerini öğrenmeni tavsiye ederim.
Hatta temellerine hakim olmayan bir programcının ezbere kod yazdığını, sınırlı bir programcı olacağını iddia edebilirim.
Assembly ile kod yazmak olduça zor fakat temelleri basittir.
Aşşağıdaki konuları zihninde oturtmanı tavsiye ederim.
Mesela data tipler nasıl temsil edilir 01 lerle?
Dünyada 10 çeşit insan vardır, binary bilenler ve bilmeyenler coder atasözü nedemek istiyor mesela ?
Alt yordama nasıl dallanılır? (!!)
yordamdaki değişkenler, global değişkenler nerde saklanır? (!!)
Heap nedir, stack nedir, exception nedir, kesme nedir ne işe yarar? (!!)
Protected mode, real mode nedir?
Neden 98 de yaparken XP'de IO portlara erişemiyorum direk?
32 bit işlemci niye 32bit ?(!!)
2. sorunu anlamadım, ama herhalde beyin fırtınası yapıyorsun ki bence güzel birşey. Bu bilgiler ışığında bidaha düşün.
Kolay gelsin
Merhaba, ilk oncelikle zahmet edip yazdiginiz icin tesekkur ederim.
Code optimization vs. bunlari saymadim tabiki yani aradaki islemleri gectim direk exeyi olusturma yonteminden bahsettim
assembly diline cevrildikten sonra makina koduna ceviriliyor(mus), hatta C icin kendi icinde direk makina koduna cevirdigini soylediler(masm32 forumunda) yada ben yanlis anladim tabi kesin demiyorum.
Bu yuzden arada bir karmasa var anlamadigim, programlama dili uretmek icin; real-address mode, protected mode, virtual mode vb. bunlar tabi bilinmesi gereken seyler ama kisacasi sormak istedigim, programlama dili yaratmak icin illa assembly mi (yetecek kadar degil gercek anlamda bilmek kadar) bilmek gerekir? Yoksa c++ ile de yaratilabilirmi.. Yaratilabilirse, olusturulan yeni dilin kodunu c++ a cevirip ondan sonra c++ kodu derlemek icin izlenen yoldan gitmek, performans kaybina neden olur mu? Ve bu tarz calisan bir dil var mi? Yoksa benim hayal gücü sallamanin son noktalarinimi yasiyo Iste bunun cevabini ariyorum
Kolay gelsin
Code optimization vs. bunlari saymadim tabiki yani aradaki islemleri gectim direk exeyi olusturma yonteminden bahsettim
assembly diline cevrildikten sonra makina koduna ceviriliyor(mus), hatta C icin kendi icinde direk makina koduna cevirdigini soylediler(masm32 forumunda) yada ben yanlis anladim tabi kesin demiyorum.
Bu yuzden arada bir karmasa var anlamadigim, programlama dili uretmek icin; real-address mode, protected mode, virtual mode vb. bunlar tabi bilinmesi gereken seyler ama kisacasi sormak istedigim, programlama dili yaratmak icin illa assembly mi (yetecek kadar degil gercek anlamda bilmek kadar) bilmek gerekir? Yoksa c++ ile de yaratilabilirmi.. Yaratilabilirse, olusturulan yeni dilin kodunu c++ a cevirip ondan sonra c++ kodu derlemek icin izlenen yoldan gitmek, performans kaybina neden olur mu? Ve bu tarz calisan bir dil var mi? Yoksa benim hayal gücü sallamanin son noktalarinimi yasiyo Iste bunun cevabini ariyorum
Kolay gelsin
Gramer tanımlama ve compiler yapımı için hazır toollar var, bunlar böyle basit masaüstü yazılımları değil, *nix kökenli yazılımlar. Bunlar lex, flex, bison, yacc. Bunlarla gramer tanımlayıp, C kodunda bir compiler kodu oluşturabiliyorsun. Pascal syntaxi üretenlerede rastlamıştım. Hatta firebird 3 stored procedure derlemek içiin bisonla çalışılıyor diye okumuştum.