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