@DBsong
从核的汇编指令可以大体分为读、写、整数、浮点、向量三类。
指令前缀表示数据大类,指令后缀表示数据小类。
例如ld指令包括ldw, ldl, vldd, vlds, fldd, flds等以“ld”为核心的指令。
ldl/ldw为读取64和32bit整数,[v]ld[d],[v]ld[s]是向量化读取64和32bit浮点数,[f]ldd和[f]lds是单个读取64和32bit浮点数。
即:
没有前缀对应单个整数操作
前缀为f对应单个浮点数操作(float)
前缀为v对应向量操作(vector)
后缀为w对应32bit整数(word)
后缀为l对应64bit整数(long)
后缀为s对应32bit浮点(single)
后缀为d对应64bit浮点(double)
常见的操作有:
ld:从LDM/主存读取
st:向LDM/主存写入
add/sub/mul/div/ma/ms/nma/nms:加/减/乘/除/乘加/乘减/负乘加/负乘减
其中整数向量没有乘除乘加类指令
整数标量没有除法/乘加类指令
参数格式为:
ld/st: 操作数, 偏移量(基址寄存器),行为是通过基址寄存器(寄存器号)与偏移量(16位带符号整数常量)相加后形成地址操作数,将地址操作数对应的内存内容读到操作数(寄存器)或者操作数写到对应地址
add/sub/mul/div:目标寄存器,操作数1,操作数2,行为是将两个操作数运算后写入结果寄存器,减法/除法中操作数1是被减/除数。整数指令支持操作数2为8位常量的情况。
ma/ms/nma/nms:目标寄存器,操作数1,操作数2,操作数3,行为是前两个操作数相乘,若为负乘加/负乘减则将积取反,然后加上或者减去操作数3。
指令手册本身保密,这些是通过阅读编译器生成的汇编总结的规律。