【问题标题】:What segment is used by default in x86 indirect addressing?x86 间接寻址中默认使用什么段?
【发布时间】:2010-10-16 12:51:36
【问题描述】:

当您使用如下的 x86 程序集(Intel 语法)时,究竟使用了哪个段,我有点困惑:

移动斧头,[di]

我很确定它不会是代码段,我在想数据段还是堆栈? (或者说栈是数据段的一部分?)

【问题讨论】:

  • 通常是DS(数据段)。堆栈将是SS 的一部分——堆栈段。 SP 和(我认为)BP 是默认为SS 而大多数其他操作默认为DS
  • 好的,有道理。不要以为您知道这一行中的直接寻址会指向什么?调用远 ptr 2480h:0DB0h
  • 这在很大程度上取决于您正在编程的模式。实模式?保护模式?
  • bitRAKE 让我想起了另一个奇怪的事情。当您进行各种字符串操作时,源通常是DS:SI(数据段源索引),目标通常是ES:DI(额外段,目标索引)。

标签: assembly x86


【解决方案1】:

DS 是默认值,除非使用BP 索引,然后使用SS。这个例外是为了简化堆栈帧的使用(ENTER/LEAVE 指令)。字符串指令也有特定的段用法。

【讨论】:

  • SP 也索引了SS
  • 你能引用这个吗?我知道这是真的,但无法在任何地方的 IA-32 参考手册中找到它。
  • 除了熟悉所有说明之外,最好的地方是第 2 卷第 2 章的开头。具体来说,表 2-1 到 2-3。 (至少在我正在查看的手册中。)
  • 无论如何我可以更改使用的默认数据段吗?
  • 带段覆盖前缀。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 2011-11-11
  • 2017-07-25
  • 1970-01-01
相关资源
最近更新 更多