org xxx 和 vstart = xxx 是一样的功能
它告诉编译器 你的 segment 开始的位置,
如果指定了 vStart = 0 那么 $ 就会从 这个段 开始计算到当前行偏移多少个字节
如果指定了 vStart = xxx $$ 获取获取的是就是 xxx
所以 org 和 vstart 只是编译器在 用于计算 代码位置的 并不是 意味着 代码会 放在xxx地址。
start:
mov ax,start
如果不指定 org 那么 反编译后 会是 mov ax,0。
如果 org = 0x700
那么编译器就会计算 成 段开始 + 代码偏移地址,
然后替换成 mov ax,0x7c00 + 0x00
movs 移动 cx 个BYTE ds:[si] -> ds:[di]
s
: 单步执行b
: 断点设置c
: 继续执行r
: 查看寄存器sreg
: 查看段寄存器xp
: 查看内存 xp /[num]bx [seg]:[offset]
常用寄存器:
页内部连续的线性地址映射到连续的物理地址中
32位 下 分页大小为 4Kb.CPU分页 要借助 页表,页表 存放在内存中
保护模式下,控制寄存器CR0的最高位PG位控制分页的开启 PG =1 此时通过页表才能把线性地址转换为物理地址,
PG = 0 分页机制无效,线性地址就直接作为 物理地址。
每个任务可以有自己的页目录表和页表
-
32模式下线性地址通过3个部分组成:
-
最高10位 Directory 页目录表偏移量
-
中间10位 Table 页表偏移量
-
最后12位Ofsset是屋里也内侧字节偏移量。
进程
-