x86汇编学习-程序重定位-4

84 阅读1分钟

数据与代码分离

代码就是CPU要执行的指令(只读) 数据是要读取、修改(读写) 如果放到一起存在误修改指令的可能 所以将数据和代码分开(数据段、代码段) 将原来的操作数改成操作数所在内存单元的地址

捕获.PNG

程序重定位的需求

上面程序存在一个问题 如果这个程序没有被加载到0000物理地址处 那么整个程序将无法运行
增加寄存器 修改操作数含义
DS寄存器: 数据段起始寄存器
CS寄存器: 代码段起始寄存器
IP寄存器: 偏移地址
将操作数从原来的内存地址改为数据地址距离数据段起始位置的偏移量

捕获.PNG

增加段寄存器后内存访问过程

捕获.PNG 捕获.PNG