Veri yapılarının giriş konusu:
.386
INCLUDE irvine32.inc
my_Struct STRUCT
x dd ?
y dd ?
my_Struct ENDS
; my_Struct
; +----+----+
; | x | y | (Bir veri bloğu (x ve y) ---> 4 + 4 = 8 Byte
; +----+----+
; Bu veri yapısında her ikiside DWORD boyutunda olmak üzere x ve y adında iki adet veri tanımladık.
; Bu 2 adet veriden oluşan veri yapısı farklı şeyler için kullanabiliriz.
; Aşağıdaki örnekte bu veri yapısını bir kordinat tanımlamak için kullanırken başka bir örnekte iki ikişinin yaşını toplarken kullanılabilir.
; Yani bu şekilde farklı işler için aynı veri yapısını sürekli veri tanımlamamıza gerek kalmadan kullanabiliriz.
; Aslında veri yapısı yapacağımız işin verileri için bir taslak oluşturuyor.
.data?
my_Point my_Struct <?> ; my_Struct veri yapısına sahip, my_Point isminde, x ve y'den oluşan bir veri bloğu tanımladık.
; sum_Of_Ages my_Strucy <?> ; my_Struct veri yapısına sahip, sum_Of_Ages isminde, x ve y'den oluşan bir veri bloğu tanımladık.
; my_Struct ---> Yapının boyutunu verir, Örneğin her bir elemanı DWORD olan 2 elemanlı my_Struct yapısı için my_Struct = 8
; my_Struct.x ---> Yapıdaki x verisinin o yapıdaki offsetini verir. Örneğin yapıda ilk önce x tanımlanmış ise my_Struct.x = 0
; my_Struct.y ---> Yapıdaki y verisinin o yapıdaki offsetini verir. Örneğin yapıda y ikinci sırada tanımlanmış ise my_Struct.y = 4
; my_Point ---> ( Veri bloğunun başlangıç adresini verir. X verisinin başlangıç adresi ile aynı.)
; my_Point.x ---> ( Veri bloğunda ki ilk 4 Byte ---> x )
; my_Point.y ---> ( Veri bloğunda ki son 4 Byte ---> y )
.code
start PROC
; ----------------------------------------------------------------
; lea ebx, dword ptr [my_Point.y]
; mov dword ptr [ebx], 9
; mov dword ptr [ebx-4], 1 ; ebx - 4 = x = 1
; mov eax, [my_Point].y
; mov ecx, [my_Point].x
; ----------------------------------------------------------------
; mov eax, 5
; mov dword ptr [my_Point + my_Struct], eax
; mov eax, dword ptr [my_Point.x]
; ----------------------------------------------------------------
; mov eax, 5
; mov dword ptr [my_Point + my_Struct.x], eax
; mov eax, dword ptr [my_Point]
; ----------------------------------------------------------------
; mov eax, 5
; mov dword ptr [my_Point + my_Struct.y], eax
; mov eax, dword ptr [my_Point.y]
; ----------------------------------------------------------------
; mov eax, dword ptr [my_Point.y]
; mov eax, dword ptr [my_Point + my_Struct.y] ; my_Point.y = my_Point + my_Struct.y = my_Point + 4
; Yukarıdaki iki talimat birbirinin aynısı.
; ----------------------------------------------------------------
mov ebx,5
mov eax, ebx
ret
start endp
end startBu içeriği görmek için giriş yapın.