Обычно есть маршрут на любом языке, но вам нужно поискать его на день или два, потому что это не всегда задокументировано
Объявите глобальное пространство памяти в вашем аромате HLL. DIM LABELNAME1(0)
Затем найдите синтаксис asm, который помещает адрес в eax
mov eax, ^LABELNAME(0)
mov eax, dword [_lablename]
mov eax, ^_lablename
etc etc etc
затем вставьте его в asm
Вы не найдете pop [^
нигде в Google, но он работает в определенных HLL
push eax
pop [^LABELNAME1(0)]
Теперь ваш HLL и asm могут общаться друг с другом в любое время
Так что стоит разобраться
Undefined symbol _labelname
Вероятно, необходимо объявить в самом начале программы
._labelname
mov dword [_lablename], 0
и позже используется asm в качестве метки
Как я уже сказал, вам придётся возиться и выяснять это для вашего специфического аромата HLL, и глобалы, кажется, работают лучше
Вам также необходимо выяснить, как объявлять отдельные зоны памяти для хранения динамических переменных asm и выполнения кодов операций, иначе вы получите перезапись кеша, которая ограничит преимущества asm * 1028 по скорости.
Небольшая процедура, которую я написал, не разделяя эти асмы, заняла 20 часов. С разделением прошло 1 час
mov ax, OFFSET _labelname
Это 16-битные вещи (DOS и т. Д., С тупыми правилами памяти), разве вы не делаете 32-битные вещи со своим HLL ???
Если это не происходит в одном сегменте, вам понадобится операнд с двойной памятью, чтобы найти _labelname
, dx:ax
и т. Д., И, как упоминалось ранее, вы опоздали на 20 лет
jmp cs:_labelname
Работает в том же сегменте, но для более крупной программы часть cs должна иметь конкретное переопределение сегмента и дальний переход / возврат
Кроме того, если ваши динамические переменные asm вставлены в ваш сегмент кода asm, то основное правило для максимизации скорости asm было нарушено