我只是汇编语言的初学者,可能有些愚蠢的问题。这两行之间有什么区别?
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;
}
它证实了我的猜测,所以请问你们,如果有任何区别的话。为什么我们需要两个执行相同但具有不同长度操作码的指令。
答案 0 :(得分:2)
1)DS = DATA-segment
2)两种不同的操作码,因为两种不同的“地址模式”。 3)这是两种不同类型的x86 er,所谓的“地址模式”。 asm中的一个非常基本的东西。
a)https://cs.nyu.edu/courses/fall10/V22.0201-002/addressing_modes.pdf b)http://www.ic.unicamp.br/~celio/mc404s2-03/addr_modes/intel_addr.html