IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言与x86汇编 -> 正文阅读

[C++知识库]C语言与x86汇编

目录

寄存器

数据格式

操作数的寻址模式

?常见指令

控制

过程

结构体

指令周期

GDB调试器


《深入理解计算机系统》第三章笔记

寄存器

  • 程序计数器(PC,下一条待处理的指令的地址)
  • 条件码寄存器(比如CF、ZF、SF、OF)
  • 整数寄存器(16个)

数据格式

C声明占用字节汇编代码后缀
char1b (byte)
short2w (word)
int4l (long word)
long8q (quad word)
char*8q (quad word)

操作数的寻址模式

  • 操作数的三种类型--立即数($开头) 寄存器 内存引用

?常见指令

  • 数据传送指令?mov movz movs
  • 入栈出栈 push pop
  • 算术和逻辑操作
    • 加载有效地址 leaq
    • 一元操作 inc dec neg not
    • 二元操作 add sub imul and or xor
    • 移位操作 sal sar shl shr

控制

  • 修改条件码寄存器的方式
    • 算术和逻辑操作
    • cmp和test指令
  • 条件码的使用方法?
    1. 根据条件码的某种组合,将一个字节置零或置一 set指令?
    2. 条件跳转到程序某个地方 jump指令
    3. 有条件地传送数据 cmov指令
  • 条件分支
    • 用条件控制jump实现条件分支
    • 用条件传送comv实现条件分支
  • 循环
    • do-while
    • while
    • for --> while

过程

  • 运行时栈

  • 转移控制
    • call? ? ? ? 下面一条指令的地址入栈,PC修改为跳转的地址
    • ret? ? ? ? ?刚才入栈的指令的地址出栈,PC修改为那个地址
  • 数据传递
    • 参数传递? ? ??
      • 6个参数以内通过寄存器传递 %rdi %rsi %dx %cx %r8 %r9
      • 超出6个的部分通过栈传递,入栈顺序从右向左,所有参数的地址向8的倍数对齐
    • 返回值
      • %rax传递返回值
  • 栈上的局部存储(有时局部数据必须放在内存中,情况如下)
    • 寄存器不足以存放所有数据
    • 对一个局部变量使用地址运算符&(因为寄存器不能产生地址)
    • 局部变量是数组或结构体(类似情况2,数组名或结构体名即代表数组起始地址)
  • 寄存器中的局部存储
    • 一个函数调用另一个函数,通过寄存器传递参数,有时希望寄存器中的值被保存下来
    • 如果需要保存的值在6个以内,通过寄存器保存 %rbx %r15 %r14 %r13 %r12 %rbp
    • 超出6个的部分存储在栈上

结构体

  • 结构体内部需要注意数据对齐--任何K字节的基本数据类型的地址必须是K的倍数

  • 结构体本身也要注意数据对齐--结构体本身的起始地址必须是内部最长字段的倍数

指令周期

  1. 取指令(fetch)? ? ?
    • 从内存取出指令字节,按顺序计算下一个指令的地址
  2. 译码(decode)?
    • 从寄存器文件或其他阶段的数据获取最多两个操作数
  3. 执行(execute)
    1. 执行算术或逻辑操作,并更新条件码寄存器
    2. 为访存阶段计算内存引用的有效地址 mov指令
    3. 增加或减少栈指针 push/pop, call/ret
  4. 访存(memory)
    1. 读内存或写内存
  5. 写回(write back)
    • 最多写两个结果到寄存器文件
  6. 更新PC(PC update)
    • 将PC设置为下一条指令的地址(下面的一条指令,或者跳转的指令)

GDB调试器

  • 通过gcc生成.out文件,并启用gdb
  1. gcc -g -o test.out test.c
  2. gdb test.out
  • 常用命令
  1. 在第i行设置断点 break i
  2. 删除第一个断点 break 1
  3. 从断点处继续执行 continue
  4. 查看所有断点 info break
  5. 查看变量x print x??
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-18 17:12:27  更:2021-10-18 17:13:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:31:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码