为什么此循环将结果显示为20而不是120?

时间:2019-03-26 21:07:25

标签: assembly x86-16 machine-language

为什么此循环将结果显示为20而不是120?

ORG 100H 
  facto dw ? 
START: 
   MOV CX, 5 
   MOV AX, 5
   DEC CX  
   repeat : 
     MUL CX 
     MOV facto , AX 
   LOOP repeat 
ENDS
END START :

1 个答案:

答案 0 :(得分:1)

尽管使用了一些不需要的命令,但是代码仍然可以正常工作。 这是在FASM中进行测试的完整代码。您会看到我将mov cx,5和dec cx合并到mov cx,4,并将分配从ax移到了事实,远离了循环,以避免不必要的代码执行。

package main

import (
    "fmt"
    "strconv"
)

func main() {
    v := "55"
    if s, err := strconv.Atoi(v); err == nil {
        fmt.Println(string(v)) // 55
        fmt.Println(s)         // 55
        fmt.Println(string(s)) // 7
    }
}