ch3.5 控制流 - for例子有错误
chai2010 opened this issue · 2 comments
chai2010 commented
哪位感兴趣的可以帮忙修改下,谢谢
chai2010 commented
171页第一个代码段改为:
func LoopAdd(cnt, v0, step int) int {
result, vi := 0, v0
for i := 0; i < cnt; i++ {
result, vi = result+vi, vi+step
}
return result
}
改动的代码有2行:
result := v0
改为result, vi := 0, v0
result += step
改为result, vi = result+vi, vi+step
171页第二个代码段改为:
func LoopAdd(cnt, v0, step int) int {
var vi = v0
var result = 0
// LOOP_BEGIN:
var i = 0
LOOP_IF:
if i < cnt { goto LOOP_BODY }
goto LOOP_END
LOOP_BODY:
i = i+1
result = result + vi
vi = vi + step
goto LOOP_IF
LOOP_END:
return result
}
改动的部分:
var i = 0
改为var vi = v0
LOOP_BEGIN:
变成注释,其后的代码改为var i = 0
- LOOP_BODY中
result = result + step
改为result = result + vi
- LOOP_BODY中增加一行
vi = vi + step
第三个代码段改为:
#include "textflag.h"
// func LoopAdd(cnt, v0, step int) int
TEXT ·LoopAdd(SB), NOSPLIT, $0-32
MOVQ $0, BX // result
MOVQ cnt+0(FP), AX // cnt
MOVQ v0+8(FP), DI // vi = v0
MOVQ step+16(FP), CX // step
LOOP_BEGIN:
MOVQ $0, DX // i
LOOP_IF:
CMPQ DX, AX // compare i, cnt
JL LOOP_BODY // if i < cnt: goto LOOP_BODY
JMP LOOP_END
LOOP_BODY:
ADDQ DI, BX // result += vi
ADDQ CX, DI // vi += step
ADDQ $1, DX // i++
JMP LOOP_IF
LOOP_END:
MOVQ BX, ret+24(FP) // return result
RET
以上三个代码段其实是同一个程序的不同版本,他们的改动都是相同的问题。
xujunhai commented
刚好看到这里啦~ 照着改一下书上的例子