碰到一個問題,高手幫忙!!!!

bluedreammer 2003-09-29 01:52:21
小弟學習實模式跳轉到保護模式的時候,有條語句編譯不過,幫忙看看
JUMP16 MACRO selector,offsetv
DB 0EAH
DW offsetv
DW selector
ENDM
..................

;中間省略,大致就是切換到保護模式的初始工作


.....................
CLI
CALL EA20
MOV EAX,CR0
OR EAX,1
MOV CR0,EAX
JUMP16 CODE32_SEL,<OFFSET SPM32>;SPM32為32位代碼段入口
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;這裡發生錯誤(84)errorA2071:initializer magnitude too
;large for specified size
;JUMP16(2):Macro Called From(84):Main Line Code
.........................
錯誤原因是不是定義的宏跳轉0EAH只是近跳轉的機器碼?慶高手幫忙.....謝謝
...全文
76 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluedreammer 2003-09-29
  • 打赏
  • 举报
回复
JUMP16 MACRO selector,offsetv
DB 067H
DB 0EAH
DD offsetv
DW selector
ENDM
-----------------------------------------
恩,哈哈,好了,忘記定義32位代碼段的偏移了,謝謝高手
W32API 2003-09-29
  • 打赏
  • 举报
回复
那就是宏定义中的数据定义有问题。看 回复 3
bluedreammer 2003-09-29
  • 打赏
  • 举报
回复
EA cd JMP ptr16:16 Jump far, absolute, address given in operand
EA cp JMP ptr16:32 Jump far, absolute, address given in operand
----------------------------------------------------------------------
謝謝這兩條資料,CODE32_SEL的確 为选择子,<OFFSET SPM32> 为入口偏移(32-bits),
這樣看來0EAH應該是正確的,那麼程序所說的錯誤是甚麼呢?(我嘗試用DB 67H選擇識別格式,還是不行.)
W32API 2003-09-29
  • 打赏
  • 举报
回复
另外

EA cp JMP ptr16:32

这之中 ptr16:32 ,而你的定义是

JUMP16 MACRO selector,offsetv
DB 067H
DB 0EAH
DW offsetv
DW selector
ENDM

DW 只是定义 16 bits 长度。你的偏移不是 32 bits 的吗?

是否可改成这样
JUMP16 MACRO selector,offsetv
DB 067H
DB 0EAH
DD offsetv
DW selector
ENDM
W32API 2003-09-29
  • 打赏
  • 举报
回复
JUMP16 MACRO selector,offsetv
DB 067H
DB 0EAH
DW offsetv
DW selector
ENDM
W32API 2003-09-29
  • 打赏
  • 举报
回复
JMP—Jump
Opcode Instruction Description
EB cb JMP rel8 Jump short, relative, displacement relative to next
instruction
E9 cw JMP rel16 Jump near, relative, displacement relative to next
instruction
E9 cd JMP rel32 Jump near, relative, displacement relative to next
instruction
FF /4 JMP r/m16 Jump near, absolute indirect, address given in r/m16
FF /4 JMP r/m32 Jump near, absolute indirect, address given in r/m32
EA cd JMP ptr16:16 Jump far, absolute, address given in operand
EA cp JMP ptr16:32 Jump far, absolute, address given in operand
FF /5 JMP m16:16 Jump far, absolute indirect, address given in m16:16
FF /5 JMP m16:32 Jump far, absolute indirect, address given in m16:32

CODE32_SEL,<OFFSET SPM32>;SPM32為32位代碼段入口
你这里的 CODE32_SEL 为选择子?<OFFSET SPM32> 为入口偏移(32-bits)?

由于 EA 本身有两种识别格式,你是否应根据你使用的进行选择
67H—Address-size override prefix.

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧