随便说说:
保护模式下的内存访问模式、方法,而这个保护模式下的内存访问模式在实模式与保护模式已经介绍过是什么,这次来具体点看。
访问内存
1.首先确定好哪些是属于访问内存?
1.1最容易确定莫过于直接对内存空间进行读写的指令
例如:
[bits 32]
mov [ds:esi],123 ;write
mov eax,[ds:esi] ;read
add [ds:esi],123 ;read/write
sub [ds:esi],123 ;read/write
shr [ds:esi],8 ;read/write
...
1.2代码执行类的指令(jmp,call…)
不仅仅是数据读写,包括代码的执行实际上也是对内存的读取,因为jmp、call这类跳转指令,终归就是读取跳转目的地的内容,再将其作为指令执行。
2.读写内存过程
在实模式与保护模式(里面讲到描述符)提到过会先判断访问是否合法,合法在进行读写。
先来看这两个表:
对于数据段分别为(X,E,W,A)
X | E | W | A | 描述符类别 | 含义 |
---|---|---|---|---|---|
0 | 0 | 0 | x | 数据 | 只读 |
0 | 0 | 1 | x | 数据 | 读、写 |
0 | 1 | 0 | x | 数据 | 只读,向下扩展 |
0 | 1 | 1 | x< |