因式分解在OAM中

问题描述:

我在这里有一些OAM代码,我查了所有的指示,他们做了怎样的操作,我把它全部写成了伪,但是我有一个定位问题(所以我可以统计程序中有多少个)循环。我觉得它应该在眼睛里凝视我,并且我已经在C/Java等中完成了一千个阶乘程序,但我在这里看不到它。因式分解在OAM中

alt text

因此,需要在用户条目 如果== 0它打破到完成[BRZ] 如果> 0破跳过用于为绝对值否定值[BRP] NEG

跳过程序会执行乘法和递减操作,然后执行更多条件以查看是否需要再次调用它,或者程序是否完成。

我基本上需要找到这个程序中的循环。就像我说的那样,它可能在我脸上凝视,但是这是一个关于分配者的一个松散问的问题。

编辑澄清: 程序不采用一个数的阶乘,而是多重乘以每个号码输入。

所以我可以把在3,-4,2,0和结果将是288 (3 * 2 * 1)(4 * 3 * 2 * 1)(2 * 1)

编辑BRI:

read: noop 
     lda stdin 
     brp return 
     neg 

return: bri read 
+0

在这种情况下,'BRI'似乎不是跳转操作码,因为'read'只是用作存储。在'return:'之后发布代码。 – ruslik 2010-10-19 02:36:14

那么,它不只是一个阶乘.. 这将是C版:

int result = 1, value; 
    while(value = get_int()) { 
next_loop: 
     value = abs(c); 
     do { 
skip_loop: 
      result *= value; 
      value--; 
     } while (value > 0); 
    }; 
    printf("%d\n", result); 

所以它的阶乘的产品,并且恰好有两个循环。

+0

有谁知道指令'BRI'?我找到了BR,BRP和BRZ但不是我.. – 2010-10-19 02:25:50

+0

@John你有没有在上下文中?发表它。如果没有BRNZ操作码,可能意味着“BRANCH Inequal”。 – ruslik 2010-10-19 02:28:45

+0

我想分析这段代码.. 上面编辑.. – 2010-10-19 02:29:49