В C вы можете иметь несколько вещей в одной строке, например:
int a; int b = 1; a = b;
Не могли бы вы сделать это на сборке?
Я пробовал искать это на многих сайтах и просил помощи на некоторых серверах Discord, но безуспешно.
Зачем вам это нужно?
@teapot418 Мне просто интересно.
«Не могли бы вы сделать это на ассамблее?» Ассемблер, такой как FASM, допускает использование нескольких операндов в мнемонике инструкции (push ax bx cx), а ассемблер, такой как EuroAssembler, допускает несколько инструкций в одной строке. Созданный мной ассемблер даже допускает оба этих варианта синтаксиса вместе.





Конечно, несколько кодов операций, если вы пишете машинный код вручную. db 0xff, 0xc0, 0xff, 0xc9 — это код операции + байты ModRM, которые кодируют inc eax/dec ecx.
Несколько исходных инструкций asm, нет. В отличие от ассемблера GNU, здесь нет другого символа-разделителя операторов, кроме новой строки.
В ГАЗе можете написать inc eax; dec ecx, если хотите. Символ комментария x86 GAS — #, разделитель операторов — ; — это совсем другой ассемблер, чем NASM.
Однако @ecm указывает на одну хитрость: вы можете определить макрос NASM, который помещает каждый аргумент в отдельную строку, и использовать его следующим образом:
foo inc eax, {mov ebx, eax}, push rax
См. руководство для получения информации о директивах макроса для перебора параметров макроса для макроса, который принимает произвольное их количество:
%macro foo 1-* ; require 1 or more params
%rep %0 ; repeat for number of params
%1 ; expand the first param on a line by itself
%rotate 1 ; rotate the params so the second one is now first
%endrep
%endmacro
Большой! Это очень помогает.
В NASM вы можете создать многострочный макрос, который принимает в качестве параметров несколько инструкций, например
mmacro inc ax, {mov bx, ax}, push ax. Кроме этого NASM не поддерживает несколько инструкций в строке.