x86 CPU在实模式下解释代码时看到一个地址为2330H:5041H,请问它最终在内存中要找的地址是多少?
A. 28341H
B. 5374H
C. 52740H
D. 7371H

2 3 收藏


直接登录
最新评论
  • 李学   01/22

    A,不解释

  • 王永康 iOS高级工程师 01/24

    A

    知识拓展

     
     实模式下内存空间的访问
    8086处理器(CPU)内的寄存器都是16位的,地址线上的地址由CPU提供。CPU用两个16位的值合成一个20位的值:将一个16位的值乘以16(相当于这个16位的值保存在20位寄存器的低16位中,然后将低16位往高位移动了4位)再加上另一个16位的值。将这个由2个16位合成的值提供给20根地址线作为访问内存的地址值。被乘以16的那个值被称为段基址,没有被乘以16的那个值被称为偏移地址。

    CPU在实模式下,段寄存器中的值就是段基址,如果想要通过汇编程序访问某个内存单元,那么就需要指定一个段寄存器和一个偏移地址或以“段基址值:偏移地址值”的格式。CPU会将段寄存器的值乘以16再与偏移地址相加后,才将这个结果提供给地址线;用段基址和偏移地址的形式给出的表达式,CPU也会给段基址乘以16与偏移地址相加后,才将这个结果提供给地址线。

    Figure 2. 实模式下访问内存(得出内存地址)的方式

    这就是说,在汇编程序中,得用段基址:偏移地址的方式访问内存,因为CPU形成内存地址的方式是“段基址* 16 + 偏移地址”。

    按照“段:偏移地址”的方式访问内存是CPU对内存的一种管理方式。

  • 男人泪 程序猿 01/25

    这个就是考的一个实模式的概念,不知道的人觉得很难,知道的人就是一个算数问题。

    引用楼上的话  在汇编程序中,得用段基址:偏移地址的方式访问内存,因为CPU形成内存地址的方式是“段基址* 16 + 偏移地址,所以是2330x10H(16)+5041