Initial import of TransPyV

This commit is contained in:
Viper
2026-07-19 13:18:46 +08:00
commit e7eaf3e9a1
75 changed files with 23037 additions and 0 deletions

47
Test/App/asm_test.py Normal file
View File

@@ -0,0 +1,47 @@
import stdio
import t, c
# ============================================================
# c.Asm 内联汇编测试
# ============================================================
def asm_test() -> int:
# 1. 简单无操作数汇编nop + clobber
c.Asm("nop", op=[t.ASM_DESCR.CLOBBER_MEMORY])
stdio.printf("asm: nop ok\n")
# 2. 仅汇编文本无 clobber
c.Asm("nop")
stdio.printf("asm: nop2 ok\n")
# 3. 多 clobber
c.Asm("nop", op=[t.ASM_DESCR.CLOBBER_MEMORY, t.ASM_DESCR.CLOBBER_CC])
stdio.printf("asm: multi-clobber ok\n")
# 4. 带输入操作数的汇编(读取 CPU ID
# 使用 f-string 内联 c.AsmInp
# mov eax, 输入值; nop保持简单不使用会产生异常的指令
val: int = 42
c.Asm(f"""mov eax, {c.AsmInp(val, t.ASM_DESCR.REG_ANY)}
nop""", op=[t.ASM_DESCR.CLOBBER_RAX])
stdio.printf("asm: input ok val=%d\n", val)
# 5. 带输出操作数的汇编
# c.AsmOut 获取结果
result: int = 0
c.Asm(f"""mov {c.AsmOut(result, t.ASM_DESCR.OUTPUT_REG)}, 123
nop""", op=[t.ASM_DESCR.CLOBBER_RAX])
stdio.printf("asm: output result=%d\n", result)
# 6. 带输入和输出操作数
# result2 = val + 1
result2: int = 0
input_val: int = 10
c.Asm(f"""mov eax, {c.AsmInp(input_val, t.ASM_DESCR.REG_ANY)}
add eax, 1
mov {c.AsmOut(result2, t.ASM_DESCR.OUTPUT_REG)}, eax
nop""", op=[t.ASM_DESCR.CLOBBER_RAX])
stdio.printf("asm: in+out result2=%d (expect 11)\n", result2)
return 0