2013-02-12 54 views
1

大家都知道,我们可以看到用方括号在NASM,如地址的值:使用方括号读取NASM中的值时,默认的段寄存器是什么?

mov esi, [ebp +8] 
mov edi, [var] --> (var is a variable) 

在方括号表示偏移地址这些值,但是当我们使用这种格式读取值,我们绝对需要一个细分市场,无论我们处于真实还是保护模式,NASM使用的默认细分市场注册是什么?我知道Windows使用平坦模式,但是如果我为不同的段寄存器(cs,ss,ds,es,fs,gs)设置不同的值,NASM将使用哪个段寄存器?我想这是ds,对吧?在方括号中使用不同的表达式时,段注册是否有所不同?在真实和保护模式下,默认的段寄存器是否相同?谢谢。

+0

它使用“不覆盖”。使用哪个段取决于指令,NASM与此无关。 – harold 2013-02-12 08:43:24

回答

5

缺省段寄存器是所有“基址寄存器” DS除了

mov esi, [ebp + 542] ; // uses ss: 
mov esi, [esp + 123] ; // uses ss: too 
mov eax, [eax + esp] ; // uses ds, because eax is the base 
         // and esp is the scalable register (with scale==1) 

stosb ;; uses es: 

这不是汇编程序的属性,但该处理器。要覆盖它,在指令之前有一个字节段覆盖前缀。

相关问题