私有云平台 数据算法 深度图像 arrays string web xpath ros 打印 download io ansible angular material Amaze UI UIkit vue router vue动态绑定class 外卖系统源码 多线程实现方式 pcie高速固态硬盘 安卓虚拟机运行windows js原生点击事件 python学习教程 python网页编程 java正则匹配 怎么安装java环境 java获取本机ip java定义 linux系统命令大全 垃圾邮件数据集 小米5c拆机 cg模宝 vfloppy wscript mac画图工具 ps反向选择的快捷键 截取字符串 360越狱版 太阳代理ip cad特性不显示 su模型交错
当前位置: 首页 > 学习教程  > 编程语言

CSAPP L5 Machine-Level Programming I: Basics

2021/2/13 16:29:02 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

这一节主要包括四部分 History of Intel processors and architecturesC, assembly, machine codeAssembly Basics: Registers, operands, moveArithmetic & logical operations C, assembly, machine code 首先是架构(Architecture)的概念&#…

这一节主要包括四部分

  • History of Intel processors and architectures
  • C, assembly, machine code
  • Assembly Basics: Registers, operands, move
  • Arithmetic & logical operations

C, assembly, machine code

首先是架构(Architecture)的概念,架构(ISA 指令集架构):指的处理器设计中人们需要理解或编写汇编/机器代码的部分,如寄存器。微架构(Microarchitecture):架构的具体实现,如缓存的大小以及内核频率。

  • 寄存器:可以看作是通过0 到 n-1 或其他地址指定的非常小的内存位置【处理器】
  • 内存:逻辑上可以看作是一个巨大的字节数组,实际上是操作系统和硬件协作的虚构对象。 — 物理内存共享,虚拟内存并行。
  • 缓存:自动加载最近运行的东西,再次访问内存会更快 — 不可见/ 无法通过指令操作、直接访问。

机器码(machine code):处理器执行的字节级别的程序
汇编码(assembly code):机器码的文本表示
Assembly/Machine Code View

C程序编码
教授演示了用 gcc 对 sum.c 编码的过程
在这里插入图片描述
-S 指令命令 gcc 在第一阶段停止,生成文本汇编码
-Og 则对代码进行编译优化,使代码更易阅读

汇编码的一些特性
整形数据: 1,2,4,8 字节 存储不区分符号,无符号
浮点型数据:4,8,10 字节
没有数组等高级数据结构,仅通过在内存中连续分配字节达到这一效果

目标码 .s → .o
每条指令 1byte ~ 15 byte 不等
在这里插入图片描述
*dest = t
movq %rax %rbx
t -> 存储在寄存器中
dest 实际的指针值存储在寄存器中 %rbx
从 %rax 寄存器中取值

sum.s 编译机器码后共 14 byte
生成的二进制文件还可以通过反汇编输出类似的指令集
objdump -d sum
在这里插入图片描述
gdb 调试:

Assembly Basics: Registers, operands, move

在这里插入图片描述
%rsp 栈指针
mov 5种
在这里插入图片描述在这里插入图片描述
D 位移,将地址偏移 D
在这里插入图片描述
(%rcx) 内存地址
在这里插入图片描述
注: movq 与 C语言 赋值操作相反,movq 由左及右,左边为 src,右边为 dest; C语言赋值,由右及左,将等号右边的值赋给左边。

* q 指 4 字,延续用法,8086 年代,一个字 16位 2字节,长字 32 位, 四字 64 位

在这里插入图片描述
例:
在这里插入图片描述

Arithmetic & logical operation

lea :地址运算过程中,写入寄存器的是地址值而不是内存值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述例:
在这里插入图片描述

  • 计算 t4 时先通过 leaq 计算三倍 y【leaq (%rsi,%rsi, 2), %rdx】并存入 % rdx, 再将 %rdx 左移4位 * 2^4【salq $4, %rdx】优化实现。
  • 没有计算 t3,将其直接并入到 t5 的计算中
  • %rax 先后存入 t1, t2, rval. 【inplace 操作】

总结:
在这里插入图片描述


本文链接: http://www.dtmao.cc/news_show_700041.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?