16位代码段与32位代码段的区别

16位代码段与32位代码段的区别:

16位代码段与32位代码段的区别如下:

16位代码段最长只能为64k,段内偏移量为16位,默认的指令地址及操作地址为16位;

32位代码段最长可以4G,段内偏移量为32位,默认的指令地址及操作地址为32位。

是否能够使用   eax,   edx   等寄存器与是否使用16位代码段及32位代码段无关。16位代码段、32位代码段都可以使用   eax,   edx   等寄存器。

如果要使用   eax,   edx   等32位寄存器,必须在代码中指定   .386,   .386p,   .486,   .486p   等指示符。

在DOS实模式下,只能使用16位代码段。

在MASM中,如果把   .386,   .386p,   .486,   .486p   等指示符放在   .model   之前,那么所有的段(数据段、代码段)默认为32位; 如果把   .386,   .386p,   .486,   .486p   等指示符放在   .model   之后,那么所有的段(数据段、代码段)默认为16位。

可以在定义段时,用   USE16   或   USE32   明确指定是使用16位的段(数据段、代码段)还是32位的段(数据段、代码段)。

你可能感兴趣的:(16位代码段与32位代码段的区别)