Спагетти-код – это неизбежность? - Assembler
Формулировка задачи:
Или я чего-то не понимаю?
Простое условие "если > то" в языках, к которым я привык, это как-бы вход в условие. А в ассемблере это наоборот выход и куча перекрёстных прыжков. Т.е. условие нужно "вынести куда-нибудь", потом прыгнуть на старое место, потом прыгнуть через условие, если оно на пути. Настоящий спагетти-код. Или это как-то по-другому решается?
Листинг программы
- коды
- коды
- сравнение
- если да, то переход до УСЛ
- СТРМ: коды
- коды
- прыжок через условие ЧРЗ
- УСЛ: коды
- коды
- возврат на старое место СТРМ
- ЧРЗ: коды
- коды
Решение задачи: «Спагетти-код – это неизбежность?»
textual
Листинг программы
- cmp ax,bx
- jne @@else
- mov ax,cx
- cmp ax,?
- org $-2
- @@else:
- mov ax,dx
- @@continue:
Объяснение кода листинга программы
В данном коде, написанном на языке Assembler, происходит сравнение двух переменных ax и bx. Если ax больше bx, то управление передается метке @@else. Если ax меньше или равен bx, то управление передается следующему оператору после @@continue. Вот список операций в этом коде:
- cmp ax, bx - сравнение переменных ax и bx
- jne @@else - если ax больше bx, то переход к @@else
- mov ax, cx - переменная ax заменяется на значение переменной cx
- cmp ax, ? - сравнение переменной ax с неизвестным значением (остаток кода может быть не виден)
- org $-2 - установка смещения в начало программы (остаток кода может быть не виден)
- @@else: - метка, на которую передается управление, если ax больше bx
- mov ax, dx - переменная ax заменяется на значение переменной dx
- @@continue: - метка, на которую передается управление после выполнения блока кода Пожалуйста, обратите внимание, что номера операций в списке могут не соответствовать реальным номерам в коде, поскольку код был сжат и некоторые операции могут быть объединены.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д