数据段DS+偏移地址段BX
数据段可以通俗理解为数据容器指针
比如:
1 | MOV AX 0220H |
代码段CS+偏移地址段IP
代码段可以通俗理解为汇编代码指针
比如:
代码从 MOV AX 0220H
开始,那么代码段指向这行代码地址, 如果想要跳过这行代码的执行,那么进行代码段偏移
在通过debug模式配合-u指令查看汇编代码时,可以根据CS进行范围查看:
比如:
1 | #以下模拟控制台输出 |
栈段SS+偏移地址段SP
栈段可以通俗理解为栈指针
什么是段
首先内存并没有分段,段的划分来自CPU,来自我们自己对内存的操作。由8086CPU
1 | (段地址+偏移地址=“物理地址”) |
的方式给出内存单元的物理地址,使得我们用分段的方式管理内存
可以将段通俗理解为小区的一栋楼,偏移地址为这栋楼的住户门牌号.比如五号楼101房,那么形象比喻:
1 | 五号楼---->段地址 101房---->偏移地址 |
为什么要这样划分?
直接使用一个物理地址岂不是更简单,何必拆分成段地址+物理地址?
这是由于8086cpu16位寄存器局限性造成的, 由于16位的寄存器最大只能存放0xFFFF 如果存放超过五位的地址比如0xFFFFA 则无法存放, 为了解决这个问题, cup设计者想出了 段地址*16+偏移地址的方法完美解决这个问题
物理地址=段地址*16+偏移地址
一个物理地址可以有四种写法, 比如0xFFFFA:
1 | 0xFFFFA=0xFFFF0*16+0x000A |
段的赋值
代码段CS 数据段DS 栈段SS 不能直接赋值, 必须通过通用寄存器中转赋值
偏移地址可以直接赋值
1 | mov ax ,2000H |
本文为作者原创 转载时请注明出处 谢谢
乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站