x86中的偏移量运算符是否返回逻辑地址或偏移量地址?

时间:2018-10-03 20:19:21

标签: assembly x86 protected-mode

在实地址模式下:

<table>
  <tr class="google-visualization-table-tr-even">
  <td class="google-visualization-table-td" data-tag="TC-206">TC-206</td>
  <td class="google-visualization-table-td" data-tag="Customer logs in">Customer logs in</td>
  <td class="google-visualization-table-td" data-tag="Fail">Fail</td>
  <td class="google-visualization-table-td" data-tag="Fail">Fail</td>
  <td class="google-visualization-table-td" data-tag="Fail">Fail</td>
  <td class="google-visualization-table-td" data-tag="Pass">Pass</td>
  <td class="google-visualization-table-td" data-tag="Fail">Fail</td>
  <td class="google-visualization-table-td" data-tag="Pass">Pass</td></tr>

  <tr class="google-visualization-table-tr-odd">
  <td class="google-visualization-table-td" data-tag="TC-207">TC-207</td>
  <td class="google-visualization-table-td" data-tag="Customer signs out">Customer signs out</td>
  <td class="google-visualization-table-td" data-tag="Fail">Fail</td>
  <td class="google-visualization-table-td" data-tag="Fail">Fail</td>
  <td class="google-visualization-table-td" data-tag="Fail">Fail</td>
  <td class="google-visualization-table-td" data-tag="Fail">Fail</td>
  <td class="google-visualization-table-td" data-tag="Pass">Pass</td>
  <td class="google-visualization-table-td" data-tag="Pass">Pass</td></tr>
</table>

在保护模式下:

mov esi, OFFSET var ;esi 32 bit

请帮助我阐明我的概念,我是初学者。

2 个答案:

答案 0 :(得分:1)

constexpr size_t s = 10; std::vector<int> v1(s, 1); std::vector<int> v2(s, 1); (采用32位保护模式代码)可能会将地址截断为16位,从而为地址提供低16位。

MOV si, OFFSET arr在16位实模式下,我希望偏移量可以零扩展到32位。

这就是NASM所做的,仅针对文件中的mov esi, OFFSET var
您得到foo: mov esi, foo

答案 1 :(得分:0)

在MASM和TASM(以及可能所有其他支持OFFSET关键字的其他x86汇编器)中,它给出其所属段中某物的偏移量(惊奇!)。

逻辑地址基本上是一个远指针,一对偏移量和一个段选择器。