السلام عليكم
عندنا هذا الكود بالاسمبلي:
x at %ebp+8, y at %ebp+12 movl 8(%ebp), %eax movl 12(%ebp), %edx cmpl $-3, %eax jge .L2 cmpl %edx, %eax jle .L3 imull %edx, %eax jmp .L4 .L3: leal (%edx,%eax), %eax jmp .L4 .L2: cmpl $2, %eax jg .L5 xorl %edx, %eax jmp .L4 .L5: subl %edx, %eax .L4:
و هذا الكود الى فوق تمّ الحصول عليه بعد ترجمة متن دالة (الى لغة الاسمبلي) تحمل الprototype التالي:
int test ( int x, int y);
لازم حوّل الكود خلفا الى لغة السى..
طلع معي هذا الكود (و حسب الحل الموجود بالكتاب هو كود خاطىء)
int test( int x, int y)
{
if ( x >= -3) {
if ( x > 2 ) {
return ( x - y );
}
else {
return ( x ^ y );
}
}
else if ( x <= y) {
return ( 1 + x + y );
}
else {
return ( x * y );
}
}ربّما سؤالي شوي بياخد وقت بس انا صرلي يومين بفّكر و بضيّع وقت فيه.
هذا الكود "الصحيح" موجود في خانة الحلول في الكتاب:
int test(int x, int ) {
int val = x^y;
if (x < -3) {
if (y < x)
val = x*y;
else
val = x+y;
} else if (x > 2)
val = x-y;
return val;
}لا افهم من اين جاء هذا الكود.

