home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.asm.x86      Ahh, the lost art of x86 assembly      4,675 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 4,426 of 4,675   
   Kerr-Mudd, John to Terje Mathisen   
   Re: Help! JMP out of range?   
   24 Nov 21 17:21:20   
   
   From: admin@nospicedham.127.0.0.1   
      
   On Wed, 24 Nov 2021 16:22:57 +0100   
   Terje Mathisen  wrote:   
      
   > Kerr-Mudd, John wrote:   
   > > On Tue, 23 Nov 2021 07:40:41 +0100   
   > > wolfgang kern  wrote:   
   > >   
   > >> On 22/11/2021 20:16, Nicolae Nasturica posted:   
   > >> ---   
   > >>>>> Can someone please explain why MASM is reporting "Jump out of   
   > >>>>> range by 130(bytes)   
   > >>   
   > >> because the range is a signed byte (+127..-128) and because MASM   
   > >> don't know about long CC-instructions (perhaps it knows with hint   
   > >> "long"):   
   > >>   
   > >> 0F 8x 43 21  jmp cc rel+4+2143   
   > >   
   > > There are also the unconditional jmps   
   > > E9 xx xx     jmp   
   > > EB xx        jmp near[/short]   
   > > has the same +127-128 range, but means a slightly increased jmp   
   > > forward, ability as the jmp is from the address of the next op code.   
   > >>   
   > >> versus short:   
   > >> 7x 12        jmp cc rel+2+12   
   > >>   
   > >> both variants use signed values relative to the address after the   
   > >> jump. __   
   > >> wolfgang   
   > >>   
   > >   
   > > It might be useful to someone here; but Alexei answered Vassone's   
   > > question back in 2000.   
   >   
   > 2000?   
   >   
   > You young wippersnappers! :-)   
   >   
   > This particular issue came up regularly even before the 808x was   
   > invented, the solution was always the same, i.e. use some other   
   > method for the far jump and a short branch past this code to avoid it.   
   >   
   > TASM (maybe around 1986?) had options to handle this automatically:   
   > By starting with the long jump macro at every branch location and   
   > then make one or a couple of passes, nearly all of them could be   
   > converted to the short form.   
   >   
   > By starting with the long form   
   >   
   > Long branch on Greater to target   
   >    jle $+3   
   >    jmp target   
      
   I presume the 2nd jmp is the 3 byte version.   
      
   >   
   > and then for each target checking the offset and if in the -128 to   
   > +127 range, convert to the two-byte form, no previously converted   
   > branch can go out of range, so the process is stable. After 2 or 3   
   > iterations you'll probably find that either all of them are now   
   > short, or that no more can be converted.   
   >   
   > I think there were other assemblers which did the same trick.   
   >   
   Nasm does; if I spot this I try re-ordering my code to remove them.   
   >   
   >   
   > --   
   > -    
   > "almost all programming can be viewed as an exercise in caching"   
   >   
      
      
   --   
   Bah, and indeed Humbug.   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca