www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/05/16/11:50:22

From: oml1 AT Ra DOT MsState DOT Edu (Owen LaGarde)
Newsgroups: comp.os.msdos.djgpp
Subject: Funky asm startTimer block -- why the odd 'jmp' statements?
Date: 16 May 1997 14:23:26 GMT
Organization: Mississippi State University
Message-ID: <5lhqku$32e$1@NNTP.MsState.Edu>
NNTP-Posting-Host: ra.msstate.edu
Lines: 35
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

   Here's a fragment of code passed to me in response to a request for
a start-timer asm example.  What is this?  Why the funky jump-to-label-
immediately-following, and why the doubled-up second call?  It goes
something like this ...

void Timer::start()
{
    if( !running )
        {
        outportb( 0x43, 0x34 );
        asm jmp __1;
    __1:
        outportb( 0x40, 0 );
        asm jmp __2;
    __2:
        outportb( 0x40, 0 );
        startTime.dosCount = *dosTime;
        startTime.timerCount = 0;
        running = 1;
        }
}

   Is this a funky way to force alignment?
   When I learned assembler it was for the M6800 family, not ix88/86, 
but this doesn't make any sense to me.  Labels '__1' and '__2' are unique,
so the jmp op target is internal to this routine.  I don't have access to
an ix86 assembler reference, but the only way I can see this code being
usefull is if an absolute jmp acted like a jnz instead, and on 0 skipped
to the next label as well ... which is just plain ridiculous from a Motorola
standpoint, so I'm betting it's something else.  
-- 
 Owen LaGarde                           |     Performance prediction through
 Forest Products Research Laboratory    |       AI-driven process simulation
 Mississippi State University           | 
 oml1 AT ra DOT msstate DOT edu (130.18.80.10)     |   "... Oh, what a Tangled Web ..."

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019