![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
汇编
灵哎惹,凌沃敏
“任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员。”
展开
-
C/C++与汇编交互总结
并且在C中调用汇编函数时可以传入参数,需要传入哪些参数和参数类型只要在extern时声明下就可;也可以有返回值,存在R0或R0-R1中,但是。如果该C函数有传递参数的,则在调用前把参数赋值到R0-R4即可;若有返回值的,则调用后从R0或者R0-R1(返回值为64位)读取即可;2.汇编当中可以引用C全局变量,也是"IMPORT"一下即可,如上例;引用进来的是该变量的地址,不是变量的值。当有返回值时,汇编函数中在退出前需要将返回值赋值给R0或R0-R1。4.C当中也可以使用汇编的标号,用法还是先。原创 2024-02-18 18:39:19 · 759 阅读 · 0 评论 -
ARM/CM3/CM4:读写内核寄存器和内核特殊寄存器
可以发现每一个函数都用到了“ldr r0,=core_res_c”这句话,这句话可以非常神奇的将core_res_c全局变量的地址传递给内核寄存器,就相当于建立了一个C和汇编直接数据传输的通道,我们就可以借助这个通道对内核寄存器进行读写了,当然这个通道的存在是借助于编译器的,所以文章第一句话就声明了和编译器的瓜葛。注:以下代码涉及内联汇编,所以跟C编译器有关,有些编译器可能会不支持(每种编译器内联汇编的形式都不一样),本代码在MDK的“defaul compiler version 6”编译器里测试通过。原创 2024-01-29 15:07:52 · 625 阅读 · 0 评论 -
关于汇编 BX 和 BLX 跳转指令
BX:跳转到寄存器reg给出的目的地址处,如:BX R2BLX:跳转到寄存区reg给出的目的地址处并将返回地址存储到LR(R14)使用这两个指令时有一点特别需要注意:跳转的目的地址必须是奇数,若不是奇数则在后面加1,如某函数的起始地址是0x80000f00,则要跳转到此函数则应该跳转到0x80000f01处!否则会进入硬件错误中断!...原创 2020-09-22 13:50:39 · 5347 阅读 · 0 评论