i386汇编中16位代码段与32位代码段的区别
标签: asm
以下为自己看书加实验的总结,如有错误还望指出。
关于代码段的位数,可以从两个角度看:
1、汇编源代码
2、段描述符
汇编源代码中的区别
在写汇编源代码时,可以指定代码段为16位或者32位。因为16位与32位的机器码是不同的,比如push 1
,立即数的长度应为4字节还是2字节?这种时候便会依据代码段长度,生成响应的指令。32位代码段立即数为4字节,16位代码段为2字节。
一般会涉及到:
1、立即数长度
2、push/pop时栈的粒度
程序运行时的区别
存储段描述符属性中的D位,与代码段长度有关。
具体为:
1、可执行段为32位还是16位。
2、SS寻址使用ESP还是SP。