You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在fasm中强制指定远跳转?解决8086实模式跳转报错

在FASM中实现16位实模式下的远跳转(从0xFFFF0到0xF0000)

你遇到的「value out of range」错误,根源是默认的jmp start是段内近跳转,它只能处理段内±32KB范围的偏移。0xFFFF0到0xF0000的物理地址差是-65520,远超近跳转的范围,必须用段间远跳转来实现。

正确的两种实现方式:

1. 直接指定段地址与偏移地址

直接写出目标地址对应的段和偏移(0xF000:0x0000对应物理地址0xF0000):

org 0xFFFF0
jmp far 0xF000:0x0000

2. 配合标签使用远跳转

先定义start标签的位置,再用far关键字明确远跳转:

; 先定义start所在的代码段
org 0xF0000
start:
    ; 这里编写start的逻辑代码

; 复位地址处的跳转代码
org 0xFFFF0
jmp far start

关键说明:

  • 远跳转的本质是同时指定目标的段地址和偏移地址,FASM会生成对应机器码0xEA + 偏移(低16位) + 段地址(高16位)。
  • 必须用far关键字告诉FASM生成段间跳转指令,否则编译器会默认生成近跳转,触发范围错误。
  • org伪指令要正确设置代码的加载物理地址,FASM会基于此计算标签的段和偏移信息。

内容的提问来源于stack exchange,提问作者M.E.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:39:57