Due Apr 3
The following program implements and tests a method that finds the product of two non-negative integer values:
.constant OBJREF 0 N1 20 N2 30 .end-constant .main .var p .end-var ldc_w OBJREF ldc_w N1 ldc_w N2 invokevirtual Product istore p halt .end-main .method Product (f1, f2) .var prod .end-var bipush 0 istore prod // prod = 0 TOP: // iload f1 // while (f1 > 0) ifeq END // { iload prod // prod = prod + f2; iload f2 // iadd // istore prod // iinc f1 -1 // f1 = f1 - 1; goto TOP // } END: // iload prod // return prod; ireturn .end-method
The product algorithm, initializes the product at zero and then adds the value of f2 to the product f1 times. Your job is to enhance the Product method so that
We discussed the logic for these modifications in class last Wednesday:
int Product(int f1, int f2) { int prod; int is_neg; // 0 => false, anything else => true is_neg = 0; if (f1 < 0) { f1 = - f1; is_neg = is_neg + 1; } if (f2 < 0) { f2 = -f2; is_neg = is_neg - 1; } if (f2 < f1) { swap f1 and f2; // as in H10P1.jas } // At this point, f1 and f2 are both positive, f1 <= f2, and // is_neg indicates whether the product should be negative. find the product of f1 and f2 using the basic algorithm given at the top of this page. if (is_neg != 0) { product = -product; } return product; }
I should be able to modify the values of the constants N1 and N2 and get the correct product. Submit your program as "H11.JAS".