随笔分类 -  c

摘要:上次的“c调用汇编”使用的clang编译器,而且使用的是mac 64位系统。当时感觉写的汇编怪怪的,今天闲来无事,就在w7 32位系统下把c文件汇编后,确实与mac后的差异很大。可不仅仅是寄存器eax与rax的区别。我想说的是函数参数传递的不同。mac下clang编译后函数的参数先保存在寄存器中(以一定的规则保存),然后在函数中压入栈里,以待后用。例如上篇例子,红色部分:.global _decToBin _decToBin: pushq %rbp movq %rsp,%rbp movq %rdi,-8(%rbp) #第一个参数,保存在r... 阅读全文
posted @ 2013-04-19 23:17 除e尘 阅读(355) 评论(0) 推荐(0)
摘要:在此记录一下c调用汇编,汇编使用的是AT&T语法。例子很简单,就是在给一个整数用汇编转换成二进制。c部分很简单,文件名随便,如main.c:#include <stdio.h>#include <stdlib.h>void decToBin(long dec,char *b); //声明外部汇编函数int main(){ long dec=254; char *bin=(char*)malloc(sizeof(char)*64); decToBin(dec,bin); printf("%s\n",bin); ... 阅读全文
posted @ 2013-03-24 15:18 除e尘 阅读(890) 评论(0) 推荐(1)