0%

20.乘法研讨会

本楼层的任务是把inbox里的每两个数相乘,然后输出至outbox.

思路分析

乘法可以用加法来实现,5*3可以视为5+5+5,因此取一个数作为被乘数,取一个数作为计数器,每加一次,计数器减1,减到0,输出结果即可
1. 从inbox取一个数
2. 放入位置0,作为基数
3. 放入位置8,作为中间结果保存
4. 从inbox取一个数
5. 放入位置1,作为乘数,也就是计数器
6. 计数器是否为0,为0跳转13
7.计数器自减1
8. 判断是否为0,为0跳转至15
9. 从位置0取一个数
10. 加上位置8的数
11. 放回位置8
12.跳转至7
13. 从位置9取数字
14. 跳转到16
15. 从位置8取数字
16. 输出
17. 跳转至1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
-- HUMAN RESOURCE MACHINE PROGRAM --

a:
INBOX
COPYTO 0
COPYTO 8
INBOX
COPYTO 1
JUMPZ c
b:
BUMPDN 1
JUMPZ d
COPYFROM 0
ADD 8
COPYTO 8
JUMP b
c:
COPYFROM 9
JUMP e
d:
COPYFROM 8
e:
OUTBOX
JUMP a

图1

思路分析2

思路2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    -- HUMAN RESOURCE MACHINE PROGRAM --

a:
INBOX
COPYTO 0
INBOX
COPYTO 1
b:
JUMPZ c
COPYFROM 9
ADD 0
COPYTO 9
BUMPDN 1
JUMP b
c:
COPYFROM 9
OUTBOX
COPYFROM 9
SUB 9
COPYTO 9
JUMP a


图2

思路分析3

1. copyfrom 9
2. copyto 8
3. inbox取一个数字
4. 放入位置0
5. inbox取一个数字
6. 减去0位置数字
7. 判断是否为负,跳转
    8.加上0位置数字
    9.放入位置1   (此时,将位置1作为被乘数,位置0位计数器)
    10.copyfrom 0
    11.判断是否为0,为0跳转
        12.copyfrom 1
        13.add 8
        14.copyto 8
        15.位置0自减
        16.jump 10
17.
    18.加上0位置数字
    19.放入位置1   (此时,位置1作为计数器,0作为被乘数)
    20.copyfrom 1
    21.判断是否为0,为0跳转
       22. copyfrom 0
       23. add 8
       24. copyto 8
       25. 位置1自减
       26. jump 23
27.
    28.copyform 8
    29.outbox
    30.jump 1        
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1. copyfrom 9
2. copyto 8
3. inbox取一个数字
4. 放入位置0
5. inbox取一个数字
6. 减去0位置数字
7. 判断是否为负,跳转
8.加上0位置数字
9.放入位置1 (p[1] >= p[0],此时,将位置1作为被乘数,位置0位计数器)
10.copyfrom 0
11.判断是否为0,为0跳转
12.copyfrom 1
13.add 8
14.copyto 8
15.位置0自减
16.jump 11
17.
18.加上0位置数字
19.放入位置2
copyfrom 0
copyto 1
copyfrom 2
copy to 0
jump 11
27.
28.copyform 8
29.outbox
30.jump 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
a:
COPYFROM 9
COPYTO 8
INBOX
COPYTO 0
INBOX
SUB 0
JUMPN c
ADD 0
COPYTO 1
COPYFROM 0
b:
JUMPZ d
COPYFROM 1
ADD 8
COPYTO 8
BUMPDN 0
JUMP b
c:
ADD 0
COPYTO 2
COPYFROM 0
COPYTO 1
COPYFROM 2
COPYTO 0
JUMP b
d:
COPYFROM 8
OUTBOX
JUMP a