"ds:"在汇编语言中的含义
Meaning of "ds:" in assembly language
我只是汇编语言的初学者,可能有一些愚蠢的问题。这两行有什么区别?
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;
}
也证实了我的猜测,所以问问大家,有什么不同。为什么我们需要两条功能相同但操作码长度不同的指令。
1) DS = 数据段
2) 两个不同的操作码,因为两个不同的"adressing modes"。
3) 这是两种不同类型的基于 x86 er 的所谓 "adressing modes"。
asm 中的一个非常基础的东西。
一) 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
第一条指令中的 3E
字节是 DS
段覆盖前缀(请参阅英特尔软件开发人员手册中的“2.1.1 指令前缀”)。
Group 2
— Segment override prefixes:
• 3EH—DS segment override prefix (use with any branch instruction is reserved)
在这种情况下它是多余的,因为 ds
是大多数内存访问的默认段。此外,如果你有一个平面 32 位内存 space 你通常永远不会明确指定段寄存器,因为它们无论如何都设置为指向相同的内存。
我只是汇编语言的初学者,可能有一些愚蠢的问题。这两行有什么区别?
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;
}
也证实了我的猜测,所以问问大家,有什么不同。为什么我们需要两条功能相同但操作码长度不同的指令。
1) DS = 数据段
2) 两个不同的操作码,因为两个不同的"adressing modes"。 3) 这是两种不同类型的基于 x86 er 的所谓 "adressing modes"。 asm 中的一个非常基础的东西。
一) 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
第一条指令中的 3E
字节是 DS
段覆盖前缀(请参阅英特尔软件开发人员手册中的“2.1.1 指令前缀”)。
Group 2
— Segment override prefixes:
• 3EH—DS segment override prefix (use with any branch instruction is reserved)
在这种情况下它是多余的,因为 ds
是大多数内存访问的默认段。此外,如果你有一个平面 32 位内存 space 你通常永远不会明确指定段寄存器,因为它们无论如何都设置为指向相同的内存。