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

时间:2013-02-12 06:52:26

标签: assembly x86 nasm

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

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

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

1 个答案:

答案 0 :(得分: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:

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