flat assembler
Message board for the users of flat assembler.
  
       
      Index
      > OS Construction > far jump from long mode | 
  
| Author | 
  | 
              
| 
                  
                   revolution 30 Jul 2011, 14:58 
                  In long mode you have to point to a memory address with your address:     
                  
                Code: use64 MyAddress: dq $272727 dw 8 jmp tword [MyAddress]  | 
              |||
                  
  | 
              
| 
                  
                   asmdev 30 Jul 2011, 15:06 
                  Thank you 
                  
                 | 
              |||
                  
  | 
              
| 
                  
                   Enko 30 Jul 2011, 15:07 
                  
                  
                 | 
              |||
                  
  | 
              
| 
                  
                   cod3b453 30 Jul 2011, 19:27 
                  I'm glad I saw this; I though this was not possible.
 
                  
                Thanks  | 
              |||
                  
  | 
              
| 
                  
                   asmdev 29 Sep 2011, 07:59 
                  Hello again. Ran into weird problem today. Apparently long jump with 64bit offset doesn't work on AMD Athlon x2 4400+. 
 
                  
                new version: Code: use64 MyAddress: dd $272727 dw 8 jmp pword [MyAddress] Amd docs(Nov 2009) say that 64bit offset is not supported for far jump if target is code segment, only 32bit. So I changed from "tword " to "pword" and now it works !  | 
              |||
                  
  | 
              
| 
                  
                   BAiC 30 Sep 2011, 07:22 
                  the address component at the memory location needs to be a QWORD, not a DWORD. 
                  
                 | 
              |||
                  
  | 
              
| 
                  
                   ouadji 30 Sep 2011, 10:22 
                  The equivalent exists for the 64-bit mode (i'm sure), but I'm not an expert in 64bits. Code: use32 push 8 push x retf pushfd push 8 push x iretd  | 
              |||
                  
  | 
              
| 
                  
                   asmdev 01 Oct 2011, 20:34 
                  BAiC wrote: the address component at the memory location needs to be a QWORD, not a DWORD. Quote: 
  | 
              |||
                  
  | 
              
| 
                  
                   Tomasz Grysztar 01 Oct 2011, 22:06 
                  JMP m16:64 is Intel's extension, original AMD's x86-64 never had it. 
                  
                 | 
              |||
                  
  | 
              
| 
                  
                   BAiC 05 Oct 2011, 04:45 
                  sorry, my bad. 
                  
                 | 
              |||
                  
  | 
              
| 
                  
                   Feryno 05 Oct 2011, 09:18 
                  use IRETQ instruction (has 48h prefix) as ouadji already suggested
 
                  
                just push 5 necessary things before the instruction if you want to jump to compatibility mode then IRET is enough (without 48h prefix) - because addresses are only 32 bit there  | 
              |||
                  
  | 
              
< Last Thread | Next Thread >  | 
    
Forum Rules: 
  | 
    
Copyright © 1999-2025, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.