Files
TransPyC/TransPyV/Test/App/asm_test.py
2026-07-18 19:25:40 +08:00

48 lines
1.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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