“C语言” 读书札记(五)之[让我们一起学习汇编吧!(段)]
介绍
这几天满脑子都是寄存器,存储器——主要是卡在汇编语言上了,所以博文进度比较缓慢。
今天就先讲讲如何定义数据元素吧?因为汇编语言程序最重要的任务之一就是处理对象。

三个最常用的段:
1、数据段:数据段声明带有初始值的数据元素。这些数据元素用作汇编语言程序中的变量。
2、bbs段:bbs段声明使用零(或者null)值初始化的数据元素。这些数据元素常用做汇编语言程序中的缓冲区。
3、文本段:在可执行程序内声明指令码的地方。
1、定义段
GNU汇编器使用.section命令语句声明段。
语法:.section 类型(.data,.bss,.text)
以下是汇编语言程序的布局。

2、定义起始点
1)当汇编语言程序被转换为可执行文件时,链接器必须知道指令中的起始点是什么
GNU汇编器声明一个默认标签,或者说标识符,它应该用作应用程序的入口点。_start便签用于标明程序应该从这条指令开始运行。
2)除了应用程序中声明起始标签之外,还需要为外部应用程序提供入口点。这是使用.globl命令完成的。
了解上述信息就可以为所有汇编语言程序创建基础模板。如下:

有了这样的模板,就准备好了开始编写汇编语言程序。

3、创建简单程序
我们来演示上面那些组件如何组合在一起使用。

先写个简单的"hello,world“,很多语言不都这么搞吗?我也不免俗。——其他部分我会在后期的文章中说明。
 1  .section .data2  output:3     .ascii "hello,world\n"4  5  .section .text6  .globl _start7  _start:8     movl $4, %eax9     movl $1, %ebx
10     movl $output, %ecx
11     movl $13, %edx
12     int $0x80
13
14 #success exit
15     movl $1, %eax
16     movl $0, %ebx
17     int $0x80

汇编并且链接这个过程

数据段
1)数据段定义的数据元素都保留在内存中
NOTE
  用.data数据段定义的任何数据元素可以按照读取和写入模式访问。
用.rodata数据段定义的任何数据元素只能按照只读(read-only)模式访问。——因此使用ro前缀。
2)数据段定义数据元素需要用到两个语句:
一个标签:像C语言中变量名称,用作引用数据元素所使用的标记。——标签对处理器是没有意义的,它只是汇编器试图访问内存位置时用作引用指针的一个位置。(机器码中使用bit表示这个标记)
一个命令:定义数据元素保留多少个字节。

3)下表介绍为特定数据元素类型保留内存的不同命令。
4)我们来观察一下在内存中分布情况,为了表达更清楚,我再写一个例子。

内存分布图

观察

  按照数据段中定义数据元素的顺序,每个数据元素被存放到内存中。带有多个值的元素按照命令中列出的顺序存放(如msg和length)。

静态符号
.equ命令用于把常量(呵呵,这个不用说,常量吗?在程序中是不能改动的,这也是它最大的特色)设置为可以在文本段(我们可以理解为指令段)中使用的符号。设置方法如下

NOTE
  .equ命令可以出现在数据段的任何位置,但是为了方便阅读,最好集中定义在最前或最后。

以上两种都是定义在数据段中,这也是在汇编中经常使用的方法。下面介绍另外一种段声明——bbs段。

bss段
bbs段只声明原始内存部分。
GNU汇编器使用两个命令声明缓冲区。

总结
我一直在想从哪个角度能输入剖析C语言,很多资料显示从汇编和机器语言角度去理解C语言,方能真正明白。我也看了很多资料,觉得应该从最最基础的方面进行。所以今天先谈到这里。——要知后事如何,下回分解。
这两天参考的资料
《汇编语言》——这书主要是针对windows 平台,语法使用的是intel语法。而我的平台,也是我的工作平台,习惯平台是linux,而linux采用的是“AT&T语法“。所以我也就看了前几章有关硬件方面的内容(但是也没看懂多少东西,呵呵)。
《汇编语言程序设计》——这书是我侧重点看的,直接跳到第二部分基础语言部分进行研究。
《Linux C编程一站式学习》——这书我着重看了几遍“x86汇编程序基础”。收益匪浅。
《深入理解计算机系统》——这书我也是轻微的看了一下,很多地方还是没有怎么弄懂。我还得多看几遍。
题外话

机器指令展开来讲,就是机器可以正确执行的命令。

电子计算机的机器指令是一列二进制的数字,计算机将指令转变为一列高低电平,以使计算机的电子器件受到驱动,进行运算。
CPU是计算机的核心部件,控制整个计算机的运作并进行运算。
1、地址总线的宽度决定了CPU的寻址能力;
2、数据总线的宽度决定了CPU与其他器件进行数据传送时的一次数据传送量。
3、控制总线的宽度决定了CPU对系统中其他器件的控制能力。
单元换算:
1B = 8b  1KB = 1024B  1MB = 1024KB  1GB = 1024MB
推荐

posted on 2012-06-28 00:04 川山甲 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/baochuan/archive/2012/06/28/2564489.html

“C语言” 读书札记(五)之[让我们一起学习汇编吧!(段)]相关推荐

  1. 51C语言编译后执行到一半,“C语言” 读书札记之[再续编译执行]

    介绍 上一篇a.out(hello,world程序)执行之后发生了什么?这次通过系统硬件和操作做粗略的描述,这样对我们也是有一些帮助的. 如果中间若有误,请不吝赐教. 从键盘上读取a.out命令 当我 ...

  2. 2021年大数据常用语言Scala(五):基础语法学习 字符串

    字符串 scala提供多种定义字符串的方式,将来我们可以根据需要来选择最方便的定义方式. 使用双引号 使用插值表达式 使用三引号 使用双引号 语法 val/var 变量名 = "字符串&qu ...

  3. 读书札记:音律的基本类型

    读书札记:音律的基本类型 2010年08月22日 音律的基本类型有:双声.叠韵.叠音.叠字.平仄.和押韵. 1.双声:是两个字声母相同的语音状况.如:"爱而不见,搔首踟蹰."(&l ...

  4. 东写西读:《瓦尔登湖》读书札记(一)

    东写西读:<瓦尔登湖>读书札记(一) --其实,无论什么书都是第一人称在发言,我们却常把这点忘掉了. 人总是太容易忘记自己说话所站的立场,同时又因为人总是习惯站在自己的立场,所以就造成了自 ...

  5. R语言入门第五集 实验四:数据分析

    R语言入门第五集 实验四:数据分析 一.资源 [R语言]R语言函数练习--东北大学大数据班R实训第四次作业 R语言:常用apply函数(apply,tapply,sapply,lapply)用法介绍 ...

  6. 大连理工大学c语言第三次上机作业答案,大连理工大学软件学院C语言上机第五六章课后题...

    大连理工大学软件学院C语言上机第五六章课后题 五.1. #includeint main() { int a,b,c; float X,Y,Z; scanf("%d%d%d",&a ...

  7. c语言实验报告5数组,c语言实验报告五一维数组.doc

    c语言实验报告五一维数组 <C程序设计>课程实验报告 学院: 班级: 姓名: 学号: 实验设备:计算机1台2011年3月1日 实验项目名称一维数组 掌握一维数组的定义.初始化,以及一维数组 ...

  8. c语言作业题五六章答案,数据结构(C语言版)第五六章习题答案

    数据结构(C语言版)第五六章习题答案,人民邮电出版社,答案很详细. (15)设F是一个森林,B是由F变换得的二叉树.若F中有n个非终端结点,则B中右指针域为空的结点有( )个. A. n-1 B.n ...

  9. c语言实验五函数答案,C语言程序设计实验五 参考答案.doc

    C语言程序设计实验五 参考答案 实验5 函数(1)参考答案 5-1.以下程序的功能:从键盘输入两个数,计算出他们的和,并将结果输出在屏幕上.调试运行程序,观察出现了什么错误,提出修改方案. 答案: # ...

最新文章

  1. 【如何快速的开发一个完整的iOS直播app】(美颜篇)
  2. 一个「菜鸟」转行AI的成长心得!
  3. 盘点2015年数据中心领域十大SDN市场领导者
  4. [bzoj3489]A simple rmq problem
  5. shell脚本如何优雅的打印帮助信息
  6. 25 PP模块-创建工厂日历报错-请输入年度xxxx和xxxx之间的有效区域
  7. 实践:在运维大数据这事上,Apache Kylin比ELK更擅长?
  8. mac下安装配置nginx环境
  9. 运维讨厌流浪地球的原因
  10. 关于圆与直线所包含点的多少关系证明
  11. 使用struts框架的简单jsp登录页面
  12. windows下载安装cmake
  13. 旋转矩阵与四元数的理解
  14. 王家林老师 大数据学习之路
  15. POJ 3026 Borg Maze(BFS+最小生成树)
  16. 2019下半年第一个流行词---宏颜获水
  17. 软硬结合——写给硬件开发工程师的全栈入门实战
  18. matlab trapz二重积分函数_如何使用 MATLAB 求解定积分、不定积分和多重积分问题...
  19. 小记--------hbase数据库java API 常用方法及案例
  20. C++ STL之set详解

热门文章

  1. C++ Qt学习笔记(2)简易计算器设计(为计算器添加菜单功能)
  2. c++数据结构与算法 图
  3. 室内声场计算机模拟的声线跟踪法和虚声源法,基于声线跟踪法的室外声场仿真.doc...
  4. 下三角矩阵的逆矩阵_上三角或下三角矩阵的逆矩阵能否简便方法求出??只有主副对角线不为0的矩阵能否直接写出逆矩阵。...
  5. 解决bert在文本长度的问题的方案,篇章级
  6. SAP License:段的含义
  7. SAP License:如何取消物料帐的激活
  8. Apache Kylin 与 ClickHouse 的对比
  9. 机器学习:神经网络的模型构建
  10. js获取jsp上下文地址