我只是汇编语言的初学者,可能有些愚蠢的问题。这两条线有什么区别?汇编语言中的“ds:”的含义
3e 8b 06 mov eax,DWORD PTR ds:[esi]
8b 06 mov eax,DWORD PTR [esi]
在我看来它不一样的,我也试过这个方案:
int main()
{
__asm
{
mov esi, ebx
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR ds:[esi]
}
return 0;
}
它证实了我的猜测,所以要求你们,如果有任何区别。为什么我们需要两个相同但具有不同长度操作码的指令。
'ds'是这种情况下的默认段,所以确实除了额外的前缀字节没有区别。而且,在典型的操作系统下,段'cs','ds','es'和'ss'都引用相同的内存。 – Jester
@Jester只是想知道,什么是不同的内存段典型的操作系统。 – ST3
例如,像DOS这样的实模式(如果你仍然可以称之为OS)。此外,段'fs'和/或'gs'用于特殊用途,例如线程本地存储,并且这些段通常位于偏移量处。 – Jester