汇编与c语言的一些对比

1.声明

声明整形数组

汇编语言 c语言 大小范围(从一个字节到8个字节)
.section data
arr_int8:
    .byte 1,2,3,4,5
int8_t arr_int8[] = {1,2,3,4,5};
声明数组元素是1个字节的数组
.section data
arr_int16:
    .value 1,2,3,4,5
int16_t arr_int16[] = {1,2,3,4,5};
声明数组元素是2个字节的数组
.section data
arr_int32:
    .long 1,2,3,4,5
int32_t arr_int32[] = {1,2,3,4,5};
声明数组元素是4个字节的数组
.section data
arr_int32:
    .quad 1,2,3,4,5
int64_t arr_int64[] = {1,2,3,4,5};
声明数组元素是8个字节的数组
时间: 2024-11-10 16:19:11

汇编与c语言的一些对比的相关文章

Android &Swift iOS开发:语言与框架对比

转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=articles_link&utm_content=link_text 从Android到Swift iOS开发:语言与框架对比 我从2009年开始做Android开发,开始接触Swift是在2014年底,当时组里曾经做过一个Demo App,感觉技术还

ARM汇编的一般形式和汇编调用C语言

.text //代码段.global _start //表明程序入口_start: //入口函数 BL main //跳转到c语言中的main,不一定要转跳到main,也可以执行其他的汇编指令 一般工程中,纯汇编复杂,而且效率比C语言并没有提高多少,所以在没有操作系统的工程中,最好的开发方式就是用汇编调用C语言,使用C语言来完成所需要的工作(只有在对效率要求极高的时候才会使用汇编编写代码块),当然裸机开发没有现成的库,就算是简单的printf函数也是没法调用的,其实就是就是汇编的高级语言版本.个

从linux0.11中起动部分代码看汇编调用c语言函数

上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一段代码(linux0.11的启动分析部分会在另一部分中再分析,由于此文仅涉及c与汇编代码的问题,). after_page_tables: pushl $0 # These are the parameters to main :-) pushl $0 pushl $0 pushl $L6 # re

C语言中递归什么时候可以省略return引发的思考:通过内联汇编解读C语言函数return的本质

事情的经过是这样的,博主在用C写一个简单的业务时使用递归,由于粗心而忘了写return.结果发现返回的结果依然是正确的.经过半小时的反汇编调试,证明了我的猜想,现在在博客里分享.也是对C语言编译原理的一次加深理解. 引子: 首先我想以一道题目引例,比较能体现出问题. 例1: #include <stdio.h> /** 函数功能:用递归实现位运算加法 */ int Add_Recursion(int a,int b) { int carry_num = 0, add_num = 0; if (

[汇编与C语言关系]2. main函数与启动例程

为什么汇编程序的入口是_start,而C程序的入口是main函数呢?以下就来解释这个问题 在<x86汇编程序基础(AT&T语法)>一文中我们汇编和链接的步骤是: $ as hello.s -o hello.o $ ld hello.o -o hello 我们用gcc main.c -o main开编译一个c程序,其实际分为三个步骤:编译.汇编.链接 $ gcc -S main.c 生成汇编代码 $ gcc -c main.s 生成目标文件 $ gcc main.o 生成可执行文件 我们

C语言中递归什么时候能够省略return引发的思考:通过内联汇编解读C语言函数return的本质

事情的经过是这种,博主在用C写一个简单的业务时使用递归,因为粗心而忘了写return.结果发现返回的结果依旧是正确的.经过半小时的反汇编调试.证明了我的猜想,如今在博客里分享.也是对C语言编译原理的一次加深理解. 引子: 首先我想以一道题目引例,比較能体现出问题. 例1: #include <stdio.h> /** 函数功能:用递归实现位运算加法 */ int Add_Recursion(int a,int b) { int carry_num = 0, add_num = 0; if (b

用汇编和c语言开发操作系统

用汇编和c语言开发操作系统需要什么样的编译器? 不同的平台(即不同的操作系统)下用的编译器肯定是不一样的,而且做出来的系统,哪怕只有引导扇区的一小 http://www.zhihu.com/people/bcqdpvktbhttp://www.zhihu.com/people/gohwoavhttp://www.zhihu.com/people/lamxwohttp://www.zhihu.com/people/pyafrrvgehttp://www.zhihu.com/people/nncgg

从汇编来看c语言之变量

1.基础研究 对如图程序进行编译连接,再用debug加载. 我们在偏移地址1fa处查看main函数的内容: 执行到1fd处,发现n的偏移地址为01a6,段地址存储在ds寄存器里,为07c4. 再查看函数f2: 参数a.b的值是用栈来传递的,它们的段地址都存放在ss寄存器中: 局部变量c的值在这里是用si寄存器存储的,因为c正好是int型,那么子函数里定义的局部变量是用寄存器存储吗?我们在这里加一条赋值语句看看会如何: 可见,局部变量d是放在栈里的,而c是放在寄存器si里的,只是函数要将c返回,就

Android与Swift iOS开发:语言与框架对比

Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有SwiftyGPIO库,可以通过GPIO控制一些硬件. Object C is old and ugly,oc是1983年苹果推出的,过于陈旧和臃肿. Swift语法类似Scala,Javascript ES6, Java,OC, C++, Python 这是tiobe发布的编程语言排行 Swift支持