0305 关于段的总结
各种段
基础:物理地址=段地址×16+偏移地址
做法
- 编程时,可以根据需要将一组内存单元定义为一个段。
- 可以将起始地址为16的倍数,长度为N(N ≤64K )的一组地址连续的内存
单元,定义为一个段。
- 将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元——在程序中可以完全由程序员安排
三种段
数据段
将段地址放在 DS中
用mov、add、sub等访问内存单元的指令时,CPU将我们定义的数据段中的内容当作数据段来访问
代码段
将段地址放在 CS中,将段中第一条指令的偏移地址放在IP中
CPU将执行我们定义的代码段中的指令 ,即当做指令来使用
栈段
将段地址放在SS中,将栈顶单元的偏移地置放在 SP 中
CPU在需要进行栈操作(push、pop)时,就将我们定义的栈段当作栈空间来用
综合示例:按要求设置栈段并执行代码

代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| /*标识数据段*/ mov bx, 1000H mov ds, bx /*标识栈段*/ mov bx, 1001H mov ss, bx mov sp, 10H ;可知栈顶地址为10020H /*代码段*/ mov ax, [0] ;读取10000H处数据1123H到ax,ax=1123H mov bx, [2] ;读取10002H处数据0022H到bx,bx=0022H push ax ;压栈:ax数据1123H压入1001EH~1001FH处,栈顶地址1001EH push bx ;压栈:bx数据0022H压入1001CH~1001DH处,栈顶地址1001CH pop ax ;出栈:1001CH~1001DH处读取到ax,栈顶地址1001EH,ax=0022H pop bx ;出栈:1001EH~1001FH处读取到ax,栈顶地址10020H,bx=1123H mov [0], ax ;ax数据写入到10000H处,10000H处数据变为0022H mov [2], bx ;bx数据写入到10000H处,10002H处数据变为1123H
|
Debug跟踪

注意:三个地址段可以设置为一样滴
