2

所以我正在学习用汇编语言为与URM Machine非常相似的抽象机器编程。URM 机器有 3 条基本指令(或某些文献中的 4 条):
将寄存器归零:Z(r)
递增寄存器:S(r)
如果寄存器 r1 和 r2 包含相同的值,则跳转到一行或标号: J(r1,r2,l)
现在,我的抽象机器更弱,因为跳转它只允许寄存器和文字 0 之间的比较。
为了补偿它允许为寄存器分配任何值(不仅仅是零,如URM)和基本算术运算。
两台机器都允许无限数量的寄存器。

我能够编写一个成功比较两个正数并返回最大值的程序。
现在我想让我的程序也能够接收负数。

我的问题:如何检查数字是否为负数?甚至可以仅使用这些说明吗?

我承认我对这种低级语言不是很聪明......

我的最大程序如下:(输入在 r1 和 r2 上,输出在 r3 上)

maximo(){
    r5 := r1 - r3    
    jump (r5,0,maxr2)

    r5 := r2 - r4
    jump (r5,0,maxr1)


    r3 := r3 + 1
    r4 := r4 + 1
    jump (r1,r1,maximo)
}

maxr1(){
    r3 := r1 
}

maxr2(){
    r3 := r2 
}

谢谢!

4

1 回答 1

0

CSTheory上回答这个问题:

初始化 x←v 和 y←-v。然后并行递增 x 和 y,直到其中一个等于 0。

朱卡·索梅拉

于 2010-09-21T11:56:06.363 回答