汇编
CPU
存储、访问、操作、移动“内存”中的数据
- 查看程序计数器( 存放下一条指令的内存地址 ),提取指定内存地址的数字
- 传递数字给指令解码器,解析指令
- 通过数据总线获取内存单元中( 需要处理的 )计算数据
- 内存单元 -> 通用寄存器( 内部 )-> CPU
- 将计算数据和指令传递给算数逻辑单元做处理
- 将计算结果通过数据总线传到指令指定的内存单元或寄存器中
典型寄存器大小 - 字长
地址、数据、指令在CPU中的表示没有区别
指令指针( 寄存器 )指向的字节会被 CPU 识别为指令
寻址方式
- 立即寻址
- 与地址无关
- 指令本身包含数据
- 寄存器寻址
- 与地址无关
- 指令包含要访问的寄存器
- 直接寻址
- 与地址有关
- 指令包含要访问的内存地址
- 变址寻址
- 与地址有关
- 指令包含要访问的内存地址
- 指令指定一个变址寄存器( 类似偏移量,X86 中可指定比例因子 )
- 间接寻址
- 与地址有关
- 指令包含要访问的寄存器( 寄存器存储待访问数据的指针 )
- 基址寻址
- 与地址有关
- 指令包含要访问的寄存器( 寄存器存储待访问数据的指针 )
- 包含地址偏移量
汇编代码
源代码 ----汇编( 汇编代码转化为机器指令 )----> 多个源文件 ----链接( 合并并添加必要信息 )----> 目标文件
以小数点“ . ”开头的指令( 汇编指令、伪操作 )
- 不会被直接翻译成机器指令
- 针对汇编程序本身
- 由汇编程序处理
.section .data - 数据段的开始( 程序所需的所有内存空间 )
.section .text - 文本段的开始( 程序指令的部分 )
.globl - 在汇编或链接过程中不应被废弃
_start - 标记程序的开始位置( 计算机加载程序后开始运行的位置 )
标签
- 可以代表 “数据” 或 “指令”
- 后接 “:”( 冒号 )
- 定义符号
操作数
- 源操作数
- 目的操作数
- 可以是
- 数字
- 内存位置引用
- 寄存器
寄存器
- 通用寄存器
- %eax
- %ebx
- %ecx
- %edx
- %edi
- %esi
- 专用寄存器
- %ebp
- %esp
- %eip
- %eflags
movl $1, %eax
- $立即寻址方式
- 没有$,直接寻址,加载地址1中的数字
评论
发表评论