class MyString{
char buf[100];
int len;
boolean append(MyString str){
int k;
if(this.len + str.len>100){
for(k=0; k<str.len; k++){
this.buf[this.len] = str.buf[k];
this.len ++;
}
return false;
}
return true;
}
}
上述是否转化为:
start:
push ebp ; save calling ebp
mov ebp, esp ; setup new ebp
push esi ;
push ebx ;
mov esi, [ebp + 8] ; esi = 'this'
mov ebx, [ebp + 14] ; ebx = str
mov ecx, 0 ; k=0
mov edx, [esi + 200] ; edx = this.len
append:
cmp edx + [ebx + 200], 100
jle ret_true ; if (this.len + str.len)<= 100 then ret_true
cmp ecx, edx
jge ret_false ; if k >= str.len then ret_false
mov [esi + edx], [ebx + 2*ecx] ; this.buf[this.len] = str.buf[k]
inc edx ; this.len++
aux:
inc ecx ; k++
jmp append
ret_true:
pop ebx ; restore ebx
pop esi ; restore esi
pop ebp ; restore ebp
ret true
ret_false:
pop ebx ; restore ebx
pop esi ; restore esi
pop ebp ; restore ebp
ret false
我最大的困难是弄清楚要压入堆栈的内容和指针的数学运算。
注意:我不允许使用全局变量,我必须假设 32 位整数、16 位字符和 8 位布尔值。