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位的段(数据段、代码段)。