π§ Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ AsmX
AsmX β ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠ·ΡΠΊ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΎ ΠΏΠΎΠΏΡΡΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΎΡΠΌΡΡΠ»ΠΈΡΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°, Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠΉ ΡΠΈΡΡΠΎΡΡ ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
AsmX β Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΡΠ·ΡΠΊ Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΎΠΉ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΠ΅ΠΉ. ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ELF64βΠ±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΈ ΠΏΠΎΠ΄ x86_64, ΡΠΏΡΠ°Π²Π»ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ Π½Π°ΠΏΡΡΠΌΡΡ, Π½ΠΎ ΡΠ΅ΡΠ΅Π· ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ. Π Π°Π±ΠΎΡΠ°Π΅Ρ Π² Π΄Π²ΡΡ ΡΠ΅ΠΆΠΈΠΌΠ°Ρ : JITC (ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ) ΠΈ ZCC (ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ). ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ZGEN.
βοΈ ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ
AsmX ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ½ΡΠΉ ΡΡΠ΅ΠΊ. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ JITC ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΡΡΡΡΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠ΄, Π° ZGEN Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ AOT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π² ELF. ΠΠ½ΡΡΡΠΈ: parser β compiler_driver β hwm + .tbl β hwc
.
Parser ΡΡΡΠΎΠΈΡ AST, hwm
ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² opcodeβΡ, hwc
ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ELF64. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· rev
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ rev-avx2
, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅ Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ CPU.
π‘ ΠΡΠΈΠΌΠ΅Ρ
@fn pub main {
ret
}
ΠΠ°ΠΆΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ ELF-Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ Ρ .text
-ΡΠ΅ΠΊΡΠΈΠ΅ΠΉ ΠΈ entrypoint
.
β ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°
-
ΠΡΠΎΡΡΠΎΠΉ, Π½ΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
-
ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ELF Π±Π΅Π· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ Π»ΠΈΠ½ΠΊΠΎΠ²ΡΠΈΠΊΠ°
-
SysV ABI ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
-
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° SSE, AVX ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΡΠ΅ΡΠ΅Π·
rev
β ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ
-
Π’ΡΠ΅Π±ΡΠ΅Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ x86_64
-
ΠΠ°Π»ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΎΡΡΡΠΌ
hwm
,.tbl
-
ΠΠΎΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ x86βΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ