我已将代码片段翻译成IJVM,但不确定它是否有效。告诉我,我做得对不对。或者我如何检查代码是否有效。这是代码。
a = 0 sum = x
while( a<= x){
sum += a;
a++;
}
这是我做过的IJVM代码: //以下3行设置a = 0
ILOAD a
BIPUSH 0
ISTORE a
//following 2 lines set sum = x
ILOAD x
ISTORE sum
//checking the condition of the loop
L1: ILOAD a
ILOAD x
ISUB
IFEQ L2 //GO TO BODY OF WHILE LOOP
ILOAD x
ILOAD a
ISUB
IFLT L3 //GO OUT OF WHILE LOOP
GOTO L1
//L2 IS THE BODY OF WHILE LOOP
L2: ILOAD sum
ILOAD a
IADD
ISTORE sum
ILOAD a
IPUSH 1
IADD
ISTORE a
GOTO L1 //AGAIN GO BACK TO CHECK THE CONDITION OF WHILE LOOP
L3:
答案 0 :(得分:0)
不需要第一条指令ILOAD A.它将A放在堆栈上,但从不使用该值。
当A <1时,第一个GOTO L1导致无限循环。 X.删除它。让代码落到循环体上。
BIPUSH 1代替IPUSH 1
使用IF_ICMPEQ代替ISUB,而不是IFEQ。
你有正确的想法。
要测试代码,请执行手动跟踪。使用笔和纸记下变量A,X,SUM的初始值。在单步执行代码时更新变量的值(以列为单位)。