Assembly language
machine language:机器语言是机器指令的集合,机器指令就是机器可以正确执行的命令,由于机器语言难以理解和记忆,产生了汇编语言
汇编语言主体是汇编指令,汇编指令是机器指令的助记符
编译器:将汇编指令转化为机器指令
汇编语言
- 汇编指令
- 伪指令
- 其他符号
指令和数据是应用上的概念,在内存和磁盘中没有任何区别
cpu对存储器的读写:指定存储单元地址,对哪个器件进行操作,进行哪种操作
- 地址信息:地址总线,用于确定存储单元,地址总线的宽度决定了访问内存单元的容量。若N为总线个数,$2^N$
- 控制信息:控制线
- 数据信息:数据线,觉得CPU和外界的数据交换速度
RAM:绝大部分数据
ROM:存储BIOS
内存地址空间:逻辑上将物理不连续的内存统一起来,由地址总线宽度决定
x86的RAM地址空间为00000-9ffff
寄存器
- 通用寄存器:16bit,如AX,BX,CX,DX,可以划分为2个独立的8位寄存器,和上代的寄存器兼容,
- AX的低八位构成AL,高八位为AH,?=044CH
- 段寄存器:提供段地址,CS,DS,SS,ES
- 代码段CS:修改IP
- 数据段DS
- 堆栈段SS
- 附加段寄存器ES
8086CPU将内存划分,$物理地址=段地址\times16+偏移地址(16位,64K)$
不同的段地址和偏移地址可以形成同一个物理地址
给定段地址,通过偏移地址可以寻址64K个内存单元
x86汇编
抽象层次(自底向上):
- 硬件:数字逻辑
- 微指令:固件,提供访问硬件的接口
- 机器码:opcode,由多条微指令组成
- 低级语言:主要是汇编语言,恶意代码分析
- 高级语言:C、C++,编译为机器码
- 解释型语言:不直接编译成机器码,翻译成字节码,解释器运行时将字节码翻译为可执行码
内存
- 数据:静态,全局变量
- 代码:指令
- 堆:动态内存
- 栈:函数局部变量和参数,控制程序执行流
指令:助记符和操作数 mov ecx 0x42
操作数:
- 立即数 immediate
- 寄存器
- 内存地址