+ -
当前位置:首页 → 问答吧 → NASM怎么实现段间跳转指令?jmp dword selector:offset,编译通不过。

NASM怎么实现段间跳转指令?jmp dword selector:offset,编译通不过。

时间:2011-12-11

来源:互联网

我想通过jmp TSS的选择子来实现保护模式下的任务切换,这个jmp selector:0指令该怎么写呢?用NASM,且selector保存在变量中。

每个任务定义了一个tss结构和选择子tss_sel变量,p_proc_ready指向下一个将要运行的任务。

start_proc:
  mov esp, [p_proc_ready] ;---取得将要运行的任务的进程表地址
  mov ebp, [esp + P_TSS_SEL];---取得将要运行的任务的TSS地址
  xor eax, eax
  mov ax, [ebp];---取得将要运行的任务的TSS段选择子
  jmp ax;---通过跳转至任务状态段实现任务切换:jmp ax:0,但这样的话编译通不过 
         ;----error: invalid combination of opcode and operands
  ;-----同时还试过jmp dword [p_proc_ready + P_TSS_SEL]:0
;-----jmp dword [ebp + P_TSS_SEL]:0都无法通过编译
         ;-----这个指令该怎么写呢?我试了一下直接用jmp dword 0x7c00:0是可以的。
  ;jmp dword 0x100:0

  dec dword [k_reenter]
  pop gs
  pop fs
  pop es
  pop ds
  popad
  add esp, 4
  iretd

作者: liaozhicai   发布时间: 2011-12-11

没人理我?有人知道吗?

作者: liaozhicai   发布时间: 2011-12-12