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 -