其实是对汇编器来说的,像move eax, [0x1000]这条汇编,汇编器需要知道你条指令是让cpu以32位模式运行,还是16位模式运行。
汇编器从而决定是否要加地址宽度前缀。
所以[.bits 16],[.bits 32]这样的汇编指导指令,直接影响nasm生成的代码。
另外,cpu的段描述符里有一个标记D,管控的其实是cpu是把一个段当做32还是16位段。
D为1的代码段,默认操作地址是32位宽度而非16位。
D为1的堆栈段,默认使用esp而非sp。
0x66是操作码前缀,0x67是地址前缀。
原文:https://www.cnblogs.com/xiang-yin/p/12149574.html