实际应用中MS-DOS软件是否依赖内存偏移回绕机制?
关于8088段偏移回绕的模拟器优化疑问
在Intel 8088的segment:offset(段:偏移)模型中,除非主动切换段,否则代码和数据读取都会限制在当前活跃段内。举个典型例子:
ABCD:FFFF ADD AL,12
这条ADD指令的编码为字节04 12,其中操作码04位于ABCD:FFFF,操作数12则处于ABCD:0000——取指时偏移会从FFFF回绕到0000。这类代码能在8088上正常执行,但在后续处理器中会触发错误,实际应用里应该极为罕见。
更可能遇到的场景是数据访问回绕,比如SI/DI起始于奇数偏移的字长REP字符串操作跨越FFFF偏移的情况。
我正在为低规格CPU编写PC模拟器,考虑忽略偏移回绕来优化运行速度——用单次字读写替代两次字节读写。这种处理在偏移0000到FFFE区间都能正常工作,但当偏移为FFFF时,会错误访问其他段的一个字节。
请问BIOS、MS-DOS或主流应用/游戏是否实际依赖偏移回绕进行代码或数据操作?本质上就是:我的模拟器在实际使用中能否用字读写替代?
- 注1:我知道可以检测FFFF偏移并回退到字节读写,但这样会降低速度,因此才提出此问题。
- 注2:问题仅针对地址小于0xFFFFF的偏移回绕,不涉及地址空间回绕和CALL 5兼容性。
内容的提问来源于stack exchange,提问作者calamari
相关产品推荐
相关产品推荐

