X-Apparently-To: clax86 AT yahoo DOT com via web1705.mail.yahoo.com X-Track2: 2 X-Track: 1-1: 40 From: Frederico Jeronimo 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 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Sender: fjds AT camoes X-Mozilla-Status: 0801 Approved: 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