通常、どの言語にもルートがありますが、これらのことは常に文書化されているとは限らないため、1 日か 2 日ほどいじる必要があります。
フレーバーの HLL でグローバル メモリ op 空間を宣言します。DIM LABELNAME1(0)
次に、アドレスを eax に入れる asm 構文を検索します
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 の速度の利点が失われるキャッシュの上書きが発生します。
これらの asm 領域を分離せずに作成した小さなルーチンは、実行に 20 時間かかりました。分離で1時間かかりました
mov ax, OFFSET _labelname
これは 16 ビットのものです (DOS など、間抜けなメモリ ルールを使用)。HLL で 32 ビットのものを使用していませんか?
すべてが 1 つのセグメントで発生している場合を除き_labelname
、dx:ax
などを見つけるためにダブル メモリ オペランドが必要になります。前述のように、20 年遅すぎます。
jmp cs:_labelname
同じセグメントで動作しますが、より大きなプログラムの場合、cs 部分は特定のセグメントのオーバーライドとファー ジャンプ/リターンである必要があります
さらに、動的な asm 変数が asm コード セグメントに組み込まれている場合、asm の速度を最大化するための基本的なルールが破られています。