程序的机器级表示

本文介绍了程序从源文件到目标文件的转换过程,包括预处理、编译、汇编和链接阶段。讨论了存储设备层次结构、数据类型在不同位宽下的大小、小端法与大端法,以及移位操作。重点讲解了程序的机器级表示,特别是汇编语言中寄存器的使用,如%eip、%esp和%ebp,并通过一个简单的C函数展示了其对应的汇编代码,分析了每个指令的作用。最后提到了使用gdb进行汇编调试的方法。
摘要由CSDN通过智能技术生成

硬着头皮来看一遍深入理解计算机系统,对其中章节进行做个笔记,其中有些一知半解的希望这次是真的懂来

1、程序的过程:从源文件到目标文件的过程

1.1 hello.c

1.2 hello.i 预处理阶段,将#开头的头文件进行展开,宏定义替换

1.3 hello.s 编译阶段,将hello.i文件翻译成汇编程序

1.4 hello.o 通过汇编器as将程序生成为可重定位的二进制的目标程序

1.5 hello 通过链接器生成可执行的目标程序


2. 存储设备

更小更快更贵,更大更慢更便宜

寄存器--》高速缓存l1--》高速缓存l2--》高速缓存ln--》主存--》本地磁盘--》远地磁盘


3. 类型大小

32位下

short int是2字节,long是4字节,long long才是8字节,char*是4字节

64位下

long是8字节,long long也是8字节,char* 是8字节


4.小端法,大端法

比如int类型下,内存值从小到大为

01 23 45 67

如果是小端法,则这个值是0x67452301,大端法这个值则是0x01234567。linux和windows目前都是采用小端法


5. 移位

移位分为算术右移和逻辑右移,就是符号位的问题,如果是算术右移,符号位需要继续保持不变,而逻辑右移则是在最右边补0即可


6.程序的机器级表示,是本次的重点内容来,主要是看懂了一些汇编的基础知识,寄存器的使用

%eip 表示要执行的下一条指令

%esp 栈顶指针

$ebp the temp data,always get data from esp, because esp is always change, we want to use esp data,so we set the esp to ebp for compute

还有寄存器的取值说明,比如直接寻址,间接寻址,立即数寻址,不再列出,下面以实际代码来进行说明

int decode1(int* xp, int* yp, int* zp)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值