![]() |
|
| |||||||
|
| WebMasTer SiTeSi |
| | Seçenekler |
|
#1
| ||||||
| ||||||
Visual Basic içinde Assembly kullanmak..Visual Basic içinde Assembly kullanmak.. VB#Turk Forum sayfasynda bir ba?lyk altyna Visual Basic'in grafik dosyalaryna efekt uygulamak için pek uygun bir dil olmady?yny, bu i? için çok yava? kaldy?yny yazmy?tym. ?imdi adyny hatyrlayamady?ym bir arkada?ymsa benim yazyma kar?ylyk olarak Visual Basic'in pek çok konuda gayet yeterli bir dil oldu?unu yazmy?ty. Bunun altyna bir mesaj yazarak bir tarty?ma çykarmak istemedim. Ancak arkada?ymyn dikkat etmedi?i bir nokta var. Ben Visual Basic için yetersiz bir dil demedim, efekt uygulamak için yava? kalyyor dedim. Bende arkada?ymla ayny fikirdeyim. Visual Basic pek çok alanda yeterli bir dildir. Özellikle kullanym ve ö?renilmesinin kolayly?y nedeniyle en çok tercih edilen dillerden biridir. Ancak arkada?ymyn da kabul etmesi gereken bir nokta var. Grafik efektleri ve benzeri bazy i?lemler için yava? bir dildir. Ancakbu yava?ly?yn önüne geçilebilir. Yine forumdaki yazymda assembly kullanarak bu yava?ly?y önleyebilir hatta c++, delphi vb. programlama dillerinden çok daha hyzly hale getirebiliriz. Örne?in;Visual Basic ile 800x600x24Bitx4.71MB bir dosyaya Contours efektini 7 saniyede, Assembly ile 0.02 saniyede uygulayabiliyoruz. Visual C++ ise ayny i?lemi 4.2 saniyede gerçekle?tiriyor. Tabii bu de?erler kullanylan bilgisayaryn gücüne, dosyanyn boyutuna ve efekte göre de?i?ecektir ancak sonuç de?i?meyecek assembly destekli visual basic bu i?lemi visual c++'dan daha hyzly gerçekle?tirecektir. Assembly ilk baky?ta göze biraz kary?yk görünebilir. Kabul etmek gerekir ki çok kda kolay de?ildir. C++,Visual Basic, Delphi vb. diller gibi kolay ve bol kaynak bulamayabilirsiniz de. Hele kaynak kod konusunda imkanlarynyz bahsetti?im dillerle kar?yla?tyrdy?ynyzda yok denebilecek kadarAncak bize verebileceklerini dü?ünecek olursanyz bu zorlu?a katlanmaya de?er. Tabii ?öyle bir yanylgyya da dü?memek gerekir. Sadece assembly kullanarak bir grafik programy hazyrlayamazsynyz. Assembly ile hazyrlayaca?ynyz harici dll dosyalaryny projenizde kullanarak sadece gerekli olduklarynda kullanabilirsiniz. Yoksa assembly ile üçgen çizmeye kalkmanyz, programcylyktan so?umanyza neden olabilir. Bunu bir örnekle açyklamak gerekirse; Basit bir form dü?ünün. Üzerine bir adet command button ekleyin. Button tyklandy?ynda program kapansyn. Bu i?i yapan bir programy assembly ile hazyrlamaya kalkarsanyz yazmanyz gereken kodun uzunlu?u yakla?yk 7976 satyr olacaktyr. Yç açycy de?il, de?il mi?.. Peki ne i?imize yarayacak assembly?.. Yukaryda da dedi?im gibi assembly dilini sadece visual basic'in yava? kaldy?y durumlarda i?lemleri hyzlandyrmak örne?in bir grafik dosyasyna efekt uygulamak veya büyük de?erlerle i?lem yapmakta kullanabilirsiniz. Basit bir örnek, assembly dili ile toplama i?lemi yapalym; ilk olarak yapmamyz gereken a?a?ydaki kodu ADD.ASM adyyla kaydetmek. [SECTION .bss] NOne: resd 1 ; Ylk Sayymyz, Veri türü: dword NTwo: resd 1 ; Ykinci Sayymyz, Veri Türü: dword SEGMENT code USE32 GLOBAL _DllMain _DllMain: mov eax, 1 retn 12 ; ;Private Declare Function asmADD Lib "ADD.dll" (ByVal number1 As Long, ByVal number2 As Long) As Long 'bu visual basic programymyzda toplama i?lemini assembly ile hazyrlady?ymyz dll dosyasyny kullanarak gerçekle?tirmek için kullanaca?ymyz fonksiyon. Yleride bunu tekrar i?leyece?iz. GLOBAL ADD ADD: enter 0, 0 PUSH EBX mov eax,[ebp+8] ; Ylk de?eri alyyoruz. mov [NOne],eax mov eax,[ebp+12] ; Ykinci de?eri alyyoruz mov [NTwo],eax add eax, [NOne] leave retn 8 ;sonuç olarak 8 bytelyk bir de?er elde ediyoruz. (1 dword = 4byte * 2) ENDS ' tahmin edebilece?iniz gibi.. Y?te bu kadar. ?imdi assembly kodumuzu compile etmemiz gerekiyor. Bunun için nasm programyna ihtiyacymyz var. Compile i?lemi iki a?amadan olu?uyor. Ylki nasm ile assembly kodunun compile edilmesi, ikinci adym ise compile edilen assembly kodunun visual basic derleyicisi ile dll dosyasyna dönü?türülmesi. Y:\NASM\nasmw.exe -f coff ADD.asm Y:\Micros~1\VB98\LINK.EXE /dll /export:ADD /entry llMain asmADD.oBu i?lemler esnasynda olu?acak olan AsmADD.exp, AsmADD.lib, AsmADD.o dosyalaryny dll dosyamyz olu?turulduktan sonra silebilriz. Sonuç olarak elimizde ADD.DLL adly dosya var. ?imdi bu dosyayy Visual Basic ile kullanalym. Yeni bir standart exe projesi olu?turun ve Form1'in kod penceresine a?a?ydakileri yazyn; Private Declare Function ADD Lib "ADD.dll" (ByVal number1 As Long, ByVal number2 As Long) As Long Private Const constAdd As Integer = 0 'biz bu örnekte kodun uzamamasy için kullanycynyn verdi?i iki sayyyy de?il kendi belirledi?imiz iki sayyyy topluyoruz. Sayylarymyz 578 ve 719 Private Sub Form_Load() Dim sayi As Long sayi = Add(578, 719) MsgBox sayi End Sub Bu kadar. Sonuç olarak programymyz bize bir mesaj kutusu üzerinde 1297 de?erini gösterecektir. Çokda korkulacak bir?ey de?il gördü?ünüz gibi. Assembly dilini visual basic dilinin yapmasy uzun süren hemen hemen tüm i?lemlerde kullanabilirsiniz. Örne?in büyük matematiksel i?lemlerde, grafik efektlerinde veya dosya i?lemlerinde. Saat ?u an 01:39.. Sanyrym bu yazynyn sona erme saati geldi. Ykinci yazyda (hangisi olur bilemiyorum) Visual Basic ve Assembly dillerini birarada kullanarak dosya i?lemlerini gerçekle?tirmeyi veya grafik dosyalaryna nasyl efekt verebilece?imizi anlataca?ym.. Yyi geceler. |
![]() |
| Arama Etiketleri: assembly, basic, icinde, kullanmak, visual |
| Seçenekler | |
| |
Benzer Konular | ||||
| Konu | Konu Açanlar | Forum | Cevaplar | Güncel Mesajlar |
| Visual Basic... | cunobag | Visual Basic & Action script | 3 | 13-11-2008 11:30 |
| Visual Basic İle MSSQL Server 2000 Veritabanı Kullanmak | B737 | Visual Basic & Action script | 0 | 24-01-2008 02:46 |
| Visual Basic 6.0 | GeZeNAsKeR | Webmaster Programları | 0 | 17-01-2008 11:41 |
| Visual Basic | Celebrian | Webmaster Programları | 0 | 22-11-2007 03:37 |
| Visual Basic - 1 | kadınca | Visual Basic & Action script | 4 | 08-11-2007 12:17 |
![]() |