问题来源
举个小栗子
市面上有很多种芯片,其中对应的指令集也很丰富,可是不同的指令集对于各种基本功能的支持力度是不同的,以PIC16芯片和X86芯片相比较,举出一个很简单的例子,就是乘法,比如实现c = a * b
:
在X86中,实现如下:
movl b, %eax
mul b
这里不敢说乘法指令的全部操作只需要一条指令,但是乘法的本身还是只需要一条指令的,即mul b
,但是在PIC16中会变成什么样子呢,代码如下:
movf a, w
movf mul.atmp, f
movf b, w
movf mul.btmp, f
call mul.i8
movf mul.result, w
movf c, 1
这里可能写的不规范,但是总体的意思是,将变量a
和 b
分别放到乘法库函数定义的符号mul.atmp
和mul.btmp
的符号里面,然后调用乘法库函数mul.i8
,最后从库函数预先设定的符号里面取值,放到符号c
中,如果觉得不好理解,可以先看成下面的高级函数形式的声明:
char mul.i