Спагетти-код – это неизбежность? - 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: - метка, на которую передается управление после выполнения блока кода Пожалуйста, обратите внимание, что номера операций в списке могут не соответствовать реальным номерам в коде, поскольку код был сжат и некоторые операции могут быть объединены.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д