В регистрах R1, R2 и R3 хранятся произвольные числа. Найти максимальное из них и поместить в R0.
Сначала занесем в R0 максимум из R1 и R2. Затем, если R3>R0, заменим значение в R0 на значение R3.
Адрес | Код | Операция | Комментарии |
---|---|---|---|
0000 | 0412 |
сравнить R2 с R1 | сравнить R2 с R1 |
0002 | 3D04 |
если < 0, то pc=pc+4 | к 0008 |
0004 | 0120 |
R2 ==> R0 | запомнить R2 |
0006 | 1D02 |
pc=pc+2 | к 000A - обход другой ветви |
0008 | 0110 |
R1 ==> R0 | запомнить R1 |
000A | 0403 |
сравнить R3 с R0 | сравнить R3 с R0 |
000C | 3D02 |
если < 0, то pc=pc+2 | к 0010 |
000E | 0130 |
R3 ==> R0 | запомнить R3 |
0010 | 0F00 |
стоп | окончание программы |
Можно переписать эту программу, используя абсолютные переходы: при этом она станет длинне, зато будет более наглядной. Она также потеряет свойство переместимости - ее нельзя будет передвинуть в памяти без изменения адресов.
Попробуйте самостоятельно ввести в память новый вариант программы, запустить и проверить его.
Адрес | Код | Операция | Комментарии |
---|---|---|---|
0000 | 0412 |
сравнить R2 с R1 |   |
0002 | 3C0D |
если < 0, то к 000C |   |
0006 | 0120 |
R2 ==> R0 | запомнить R2 |
0008 | 1C0D |
перейти к 000E | обход другой ветви |
000C | 0110 |
R1 ==> R0 | запомнить R1 |
000E | 0403 |
сравнить R3 с R0 |   |
0010 | 3C0D |
если < 0, то к 0016 |   |
0014 | 0130 |
R3 ==> R0 | запомнить R3 |
0016 | 0F00 |
стоп | окончание программы |
Проверьте, как это работает на "E97". Не забывайте перед запуском программы задавать значения регистров R1-R3.