İç içe yapılardan bahsettim.
.386
INCLUDE irvine32.inc
; Nesting Structures (İç İçe Yapılar)
my_Struct_3 STRUCT
a1 dd ?
a2 dd ?
a3 dd ?
my_Struct_3 ENDS
my_Struct_2 STRUCT
my_Data_3 my_Struct_3 <> ; a1 dd ? a2 dd ? a3 dd ?
z dd ?
my_Struct_2 ENDS
my_Struct_1 STRUCT
my_Data_2 my_Struct_2 <> ; a1 dd ? a2 dd ? a3 dd ? z dd ?
x dd ?
y dd ?
my_Struct_1 ENDS
.data
my_Data_1 my_Struct_1 <<<1,2,3>,4>,5,6> ; a1 dd 1, a2 dd 2, a3 dd 3, z dd 4, x dd 6, y dd 7
; Yukarıdaki yapıları, assembler talimatları sırayla okuduğu için Struct 1-2-3 şeklinde değilde tam tersi şeklinde yazdık.
; Örneğin ilk yapımız my_Struct_1 olsaydı assembler bu yapının içerisindeki my_Struct_2'yi henüz görmediği için talimatları birleştiremeyecekti.
; my_Struct_2 yapısını my_Data_2 adında my_Struct_1 yapısı içerisinde tanımladım.
; my_Struct_3 yapısını my_Data_3 adında my_Struct_2 yapısı içerisinde tanımladım.
; Yani my_Struct_1 kapsar my_Struct_2'yi, o da kapsar my_Struct_1'i.
; +---------------------------------------+
; | my_Struct_1 |
; | |
; | x dd ? y dd ? |
; | +-----------------------+ |
; | | my_Struct_2 | |
; | | | |
; | | z dd ? | |
; | | +-------------+ | |
; | | | my_Struct_3 | | |
; | | | | | |
; | | | a1 dd ? | | |
; | | | a2 dd ? | | |
; | | | a3 dd ? | | |
; | | +-------------+ | |
; | | | |
; | | | |
; | +-----------------------+ |
; | |
; | |
; +---------------------------------------+
.code
start PROC
; ---------------------------------------------------------------------------
; lea eax, my_Data_1.my_Data_2.my_Data_3.a2
; mov dword ptr [eax], 5
;mov ebx,dword ptr [eax]
; ---------------------------------------------------------------------------
lea eax, my_Data_1.my_Data_2.my_Data_3.a2
mov ebx, dword ptr [eax]
; ---------------------------------------------------------------------------
ret
start endp
end startBu içeriği görmek için giriş yapın.