我在将以下 java 代码转换为英特尔 IA-32 程序集时遇到了一些困难:
class Person() {
char name [8];
int age;
void printName() {...}
static void printAdults(Person [] list) {
for(int k = 0; k < 100; k++){
if (list[k].age >= 18) {
list[k].printName();
}
}
}
}
我的尝试是:
Person:
push ebp; save callers ebp
mov ebp, esp; setup new ebp
push esi; esi will hold name
push ebx; ebx will hold list
push ecx; ecx will hold k
init:
mov esi, [ebp + 8];
mov ebx, [ebp + 12];
mov ecx, 0; k=0
forloop:
cmp ecx, 100;
jge end; if k>= 100 then break forloop
cmp [ebx + 4 * ecx], 18 ;
jl auxloop; if list[k].age < 18 then go to auxloop
jmp printName;
printName:
auxloop:
inc ecx;
jmp forloop;
end:
pop ecx;
pop ebx;
pop esi;
pop ebp;
我的代码正确吗?
注意:我不允许使用全局变量。