Решите, является ли число отрицательным (в языке URM, например, в языке) - PullRequest
2 голосов
/ 20 сентября 2010

Итак, я учусь программировать на ассемблере для абстрактной машины, которая очень похожа на 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 
}

Спасибо!

1 Ответ

0 голосов
/ 21 сентября 2010

Перейти этот ответ на CSTheory :

Инициализируйте x ← v и y ← −v. Затем увеличивайте параллельно значения x и y до тех пор, пока один из них не станет равным 0.

По Юкка Суомела

...