delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2000/02/02/11:42:53

X-Apparently-To: clax86 AT yahoo DOT com via web1705.mail.yahoo.com
X-Track2: 2
X-Track: 1-1: 40
From: Frederico Jeronimo <fjds AT rnl DOT ist DOT utl DOT pt>
Newsgroups: comp.os.msdos.djgpp,comp.lang.asm.x86,alt.lang.asm,comp.os.msdos.programmer
Subject: Nasm / AS / Wrappers
Organization: Universidade Tecnica de Lisboa
Lines: 64
Mime-Version: 1.0
X-Sender: fjds AT camoes
X-Mozilla-Status: 0801
Approved: <camille AT bluegrass DOT net>
NNTP-Posting-Host: lou-ts5-82.iglou.com
X-Original-NNTP-Posting-Host: lou-ts5-82.iglou.com
Message-ID: <3898326e@news.iglou.com>
Date: 2 Feb 2000 08:34:38 -0500
X-Trace: 2 Feb 2000 08:34:38 -0500, lou-ts5-82.iglou.com
X-Original-NNTP-Posting-Host: news-incoming.iglou.com
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

Hi all,

	I'm trying to build parameter-defined functions in NASM 0.97 to be
included in Djgpp 2.02. I want to have a general assembly wrapper function
that can be used to install various hardware interrupt handlers (keyboard,
timer, etc...). But since a wrapper must be associated with one handler
only, I want to write a "general" code and then NASM can spawn it
according to a number code. This is hard to explain in words, so please
take a look at this short example.  

The following example works in AS (AT&T format), Djgpp's internal
assembler. 

wrapper.s :

.text

#define WRAPPER(x)                                                         ; \
.globl __handler_wrapper_##x                                               ; \
   .align 4                                                                ; \
__handler_wrapper_##x:                                                     ; \
  
  [...]
  	
stack_search_loop_##x:                                                     ; \
   
   [...] 

   sti
   iret 

WRAPPER(0);
WRAPPER(1);
WRAPPER(2);
WRAPPER(3);
WRAPPER(4);
WRAPPER(5);
WRAPPER(6);
WRAPPER(7);

	As I install handlers, the '_##x' in the previous code gets
replaced by the appropriate number and I have multiple wrappers for
multiple handlers. In my C code, I just have to do something like this to
install the appropriate wrapper :

	 switch (c) {
	    case 0: addr.offset32 = (long)_irq_wrapper_0; break;
	    case 1: addr.offset32 = (long)_irq_wrapper_1; break;
	    case 2: addr.offset32 = (long)_irq_wrapper_2; break;
	    case 3: addr.offset32 = (long)_irq_wrapper_3; break;
	    case 4: addr.offset32 = (long)_irq_wrapper_4; break;
	    case 5: addr.offset32 = (long)_irq_wrapper_5; break;
	    case 6: addr.offset32 = (long)_irq_wrapper_6; break;
	    case 7: addr.offset32 = (long)_irq_wrapper_7; break;
	    default: return -1;
	 }

  	How can I accomplish the same thing in Nasm and export it to
Djgpp? Thanks in advance for your help. Regards,

						Frederico Jeronimo



- Raw text -


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