Пример исходного файла (Visual Studio 2015)
title xmpl
.586p
.model FLAT
; include C libraries
includelib msvcrtd
includelib oldnames
includelib legacy_stdio_definitions.lib ;for scanf, printf, ...
xmpl struct ;delcare structure (nothing initialized)
x0 dword ?
x1 dword ?
x2 dword ?
x3 dword ?
xmpl ends
.data
axmpl xmpl 30 dup ({0,0,0,0}) ;array of 30 structs (init to zeroes)
.code
_main proc near
lea ebx,axmpl ;ebx points to first instance in array
mov eax,(xmpl ptr [ebx]).x0 ;eax = axmpl[0].x0
; ...
xor eax,eax ;exit from main
ret
_main endp
end
обновленный пример:
line struct
x1 byte ?
x2 byte ?
x3 byte ?
x4 byte ?
line ends
.DATA
arr2 byte 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
arr line 4 DUP ({0,0,0,0})
.CODE
main PROC
mov ebx,offset arr2
mov edx,offset arr
mov ecx,4
l:
mov al,[ebx]
mov [edx].line.x1,al
inc ebx
mov al,[ebx]
mov [edx].line.x2,al
inc ebx
mov al,[ebx]
mov [edx].line.x3,al
inc ebx
mov al,[ebx]
mov [edx].line.x4,al
inc ebx
add edx,sizeof line
loop l
mov edx ,offset arr
mov ecx,4
l1:
movzx eax,[edx].line.x1
call writeint
movzx eax,[edx].line.x2
call writeint
movzx eax,[edx].line.x3
call writeint
movzx eax,[edx].line.x4
call writeint
add edx,sizeof line
loop l1
; ...
альтернативный синтаксис, использованный перед обновлением:
mov (line ptr [edx]).x1,al
используя предположим:
assume edx:ptr line
; ...
mov [edx].x1,al
; ...
loop l1
assume edx:nothing