В настоящее время я изучаю язык ассемблера. Я смог создать быструю короткую функцию для замены двух чисел от наименьшего до наибольшего. Я применяю ту же основную основу, чтобы сделать это с тремя числами, но каждый раз, когда я выполняю сравнение, он переходит в бесконечный цикл. Я объявляю эту функцию, используя *60
. Как правильно сортировать три числа от наименьшего до наибольшего? Кроме того, есть ли способ, чтобы одна и та же функция выполняла сортировку из двух и трех чисел без каких-либо дополнительных изменений?Сортировка наименьшего из трех чисел
Несколько программ сборки имеют небольшое изменение в синтаксисе. HERE - это ссылка учебного сборочного компьютерного симулятора Little Man, который я использую в настоящее время.
Работы Своп с двумя числами:
INP //Input x number
STO 99 //Store x number
INP //Input y number
STO 98 //Store y number
BR 60 //Jump to function *60
HLT //End run
*60 //Number SWAP function
LDA 99 //Load x
STO 87 //Move x to mailbox 87
LDA 98 //Load y
STO 86 //Move y to mailbox 86
SUB 87 //Subtract y - x
BRP 71 //Branch to line 71 if result is positive
LDA 86 //SUB 87 gives a negative result- then y is smallest number. Load y
OUT //Display y
LDA 87 //Load x- the greater number.
OUT //Display x
HLT //End here since y > x
LDA 87 //BRP 71 branches here- then x is smallest number
OUT //Display x
LDA 86 //y is the greater number
OUT * //display y
Вы случайно не знаете, если я могу поместить эти две петли внутри функции '* 60'' как мой своп two' пример, что путь, если есть необходимость заказать он будет переходить к функции, а затем порядок и прыгать назад, чтобы продолжить сравнение второго числа с третьим? – CodingWonders90