Простейшим, но не идеальным, было бы что-то вроде этого ...
Сначала определите, есть ли комментарий к строке, а затем удалите его оттуда (либо физически, либо сократите эффективную длину строки доположение первой точки с запятой).
Затем посмотрите, есть ли в остатке двоеточие.Если есть, слева от него находится название метки.Вы можете удалить его (или снова просто пропустить его, притворяясь, что строка начинается после двоеточия).
Если все еще что-то осталось, первый элемент - это код операции.Если после этого есть что-то, то это операнды (один или несколько, разделенные запятыми).
Это не идеальное решение, потому что в различных ассемблерах x86 поддерживается ряд более сложных конструкций, например, еслиуказан сегмент, будет двоеточие, которое не имеет ничего общего с метками:
mov al, byte ptr es:[bx]
В приведенном выше тексте mov al, byte ptr es
не является меткой.
Или у вас может быть объявлен массивкак в приведенном ниже.Имя массива не является кодом операции, это фактически метка, но после нее нет двоеточия:
MyArray db 1,2,3,4,5 ; array of 5 bytes
И вы также можете встретить знаки препинания внутри символьных и строковых литералов, которые не разделяют строку на метки, операнды и комментарии:
MyString db ':,a;'
Здесь MyString db '
не является меткой только потому, что после нее стоит двоеточие.a
не операнд только потому, что перед ним стоит запятая.И, наконец, ;'
не является комментарием только потому, что там есть точка с запятой.
Для полной поддержки всех этих возможностей вам потребуется реализовать более сложное решение, вероятно, с использованием конечного автомата синтаксического анализа.