独立汇编与机器码¶
显示机器码¶
./bisheng -cc1as \
-triple hiipu64-hisilicon-cce \
-target-cpu dav-c220-vec \
-filetype asm \
-show-encoding \
-o - vector.s
输入:
.text
.a64
.globl vector_example
vector_example:
MOV X3, #0
MOVEMASK MASK[0], X3
MOVEMASK MASK[1], X3
VADD.s16 [X0], [X1], [X2], X3, MASK
RET
输出:
MOV X3, #0 // [0x00,0x00,0x06,0x07]
MOVEMASK MASK[0], X3 // [0x0c,0x00,0x40,0x80]
MOVEMASK MASK[1], X3 // [0x8c,0x00,0x40,0x80]
VADD.s16 [X0], [X1], [X2], X3, MASK // [0x0c,0x11,0x80,0x85]
RET // [0x00,0xf0,0x61,0x40]
Cube 文件把 CPU 改为 dav-c220-cube。
生成目标文件¶
./bisheng -cc1as \
-triple hiipu64-hisilicon-cce \
-target-cpu dav-c220-vec \
-filetype obj \
-o vector.o vector.s
输出是 64 位小端 ELF 可重定位文件,e_machine 为 0x1029。
汇编检查¶
只检查语法而不保留输出:
./bisheng -cc1as \
-triple hiipu64-hisilicon-cce \
-target-cpu dav-c220-vec \
-filetype null vector.s
加入头文件/汇编包含目录:
标签与重定位¶
分支应优先使用标签,不要手工计算最终 PC 偏移:
若某条控制流语法只接受立即数而不接受标签,应以汇编器诊断为准;不要直接把示例中的 #0 当成实际目标地址。
验证单条指令¶
- 建立包含
.text、.a64和RET的最小文件。 - 使用正确的 vec/cube CPU。
- 用
-filetype asm -show-encoding检查规范化输出。 - 保存输出的四个小端字节和 bisheng 版本。
- 再把完整函数编译成目标文件,检查重定位和符号。