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位的段(數據段、代碼段)。