当在机器运行如下代码时:MOV  AX,DS:[DX];假设此时DS=04H,DX=2344H,那么CPU怎样才能在内存中找DS:[DS]的值呢?其步骤如下:(1)从DS选择子中选取04H。(2)从对应的描述符空间中查找到第04H个描述符。(3)取出描述符中的三个参数,分别是段基地址、段界限和段属性。假设段的基地址等于00012345H,段界限等于5678H。(4)这时,段基地址就是段的开始位置,通过EIP的32位偏移,就可得到物理地址,由:物理地址=段基地址+偏移可得物理地址就是179BDH(00012345H+5678H)。(5)此时就可以从179BDH中取出数据放入AX寄存器中。
请问[dx]在这里起到什么作用呢?

解决方案 »

  1.   

    是不是科技发现太快,我一点没看懂你在说什么~哈
    如果你指的是8086汇编
    则:如果我没记错的话
    ds:[dx] 应该就的指向实际地址,地址就是ds<<4 + dx
      

  2.   

    物理地址=段基地址+偏移你都说了这个偏移了啦就是这个DXPS:怎么发到这来了
      

  3.   

    说得对,印象中Win32程序都是Flat内存模式,就说进程的内存空间都在一个段内(人为想像的一个段),这时CPU会忽略段寄存器的值,而使用段寄存器为偏移从描述表中获得段基址都为0,偏移使用32位的值,因此不存在段的区别,因此段只表示这4GB空间中的一个内存区域而已,个人认为[DX]就是4GB空间中的偏移量,不知道正不正确,多多指教
      

  4.   

    《WIN95程序员开发手册》说的很清楚,
    他的理解一点都不沾边
    找来看看