32位代码段和16位代码段

其实是对汇编器来说的,像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是地址前缀。

posted @ 2020-01-04 16:42  相印  阅读(461)  评论(0)    收藏  举报