使用方括号读取NASM中的值时,默认段寄存器是什么?

Sea*_*ene 1 x86 assembly nasm

众所周知,我们可以在NASM中使用方括号读取地址的值,例如:

mov esi,  [ebp +8]
mov edi, [var]   -->  (var is a variable)
Run Code Online (Sandbox Code Playgroud)

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

Aki*_*nen 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:
Run Code Online (Sandbox Code Playgroud)

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