Вы немного ошиблись, во-первых, вы кодируете это так, как будто вы получаете имя и возраст в качестве параметров, а вам нет, вам просто нужен ebx для хранения адреса в списке. И ваш указатель немного математичен, предполагая, что символы равны 1 байту (таким образом, 8 байтов в вашем массиве), целые числа и указатели 4 байта, это может работать:
Person:
push ebp; save callers ebp
mov ebp, esp; setup new ebp
init:
mov ebx, [ebp + 4];
mov ecx, 0; k=0
forloop:
cmp ecx, 100;
jge end; if k>= 100 then break forloop
cmp [ebx + 8 + 12 * ecx], 18 ; 12 * ecx to advance 12 bytes (8 char 4 int), plus 8 to compare the integer, which is 8 bytes away from the start of the pointer.
jl auxloop; if list[k].age < 18 then go to auxloop
jmp printName;
printName:
auxloop:
inc ecx;
jmp forloop;
end:
pop ebp;