www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - the inline assembler

reply lee <lee_member pathlink.com> writes:
I'm trying to call dos interrupts using the inline assembler.
Unfortunately I keep getting the following message during compilation:
end of instruction
The code I used is listed below. Any help is welcome.
asm
{
mov AH, interrupt_code ;
int 21H                ;
..
}
where interrupt_code is of type long. 
Jun 27 2006
parent reply Frits van Bommel <fvbommel REMwOVExCAPSs.nl> writes:
lee wrote:
 I'm trying to call dos interrupts using the inline assembler.
 Unfortunately I keep getting the following message during compilation:
 end of instruction
 The code I used is listed below. Any help is welcome.
 asm
 {
 mov AH, interrupt_code ;
 int 21H                ;
 ..
 }
 where interrupt_code is of type long. 
I don't believe '21H' is a valid integer in D. This should compile: void main() { long interrupt_code; asm { mov AH, interrupt_code ; int 0x21 ; } }
Jun 27 2006
parent reply llee <llee_member pathlink.com> writes:
In article <e7sa56$3qb$1 digitaldaemon.com>, Frits van Bommel says...
lee wrote:
 I'm trying to call dos interrupts using the inline assembler.
 Unfortunately I keep getting the following message during compilation:
 end of instruction
 The code I used is listed below. Any help is welcome.
 asm
 {
 mov AH, interrupt_code ;
 int 21H                ;
 ..
 }
 where interrupt_code is of type long. 
I don't believe '21H' is a valid integer in D. This should compile: void main() { long interrupt_code; asm { mov AH, interrupt_code ; int 0x21 ; } }
The same error results.
Jun 27 2006
next sibling parent reply dennis luehring <dl.soluz gmx.net> writes:
llee schrieb:
 In article <e7sa56$3qb$1 digitaldaemon.com>, Frits van Bommel says...
 lee wrote:
 I'm trying to call dos interrupts using the inline assembler.
 Unfortunately I keep getting the following message during compilation:
 end of instruction
 The code I used is listed below. Any help is welcome.
 asm
 {
 mov AH, interrupt_code ;
 int 21H                ;
 ..
 }
 where interrupt_code is of type long. 
I don't believe '21H' is a valid integer in D. This should compile: void main() { long interrupt_code; asm { mov AH, interrupt_code ; int 0x21 ; } }
The same error results.
long interrupt_code is much larger than the 8bit ah register btw: what are you doing? plain old dos 21h is decprecated since win95 most 16bit interrupt (int 0x10h, int 0x13...) procs don't work under win32 what do you want from dos? what are you trying todo? ciao dennis
Jun 27 2006
parent reply llee <llee_member pathlink.com> writes:
In article <e7sivt$emq$1 digitaldaemon.com>, dennis luehring says...
llee schrieb:
 In article <e7sa56$3qb$1 digitaldaemon.com>, Frits van Bommel says...
 lee wrote:
 I'm trying to call dos interrupts using the inline assembler.
 Unfortunately I keep getting the following message during compilation:
 end of instruction
 The code I used is listed below. Any help is welcome.
 asm
 {
 mov AH, interrupt_code ;
 int 21H                ;
 ..
 }
 where interrupt_code is of type long. 
I don't believe '21H' is a valid integer in D. This should compile: void main() { long interrupt_code; asm { mov AH, interrupt_code ; int 0x21 ; } }
The same error results.
long interrupt_code is much larger than the 8bit ah register btw: what are you doing? plain old dos 21h is decprecated since win95 most 16bit interrupt (int 0x10h, int 0x13...) procs don't work under win32 what do you want from dos? what are you trying todo? ciao dennis
I'm trying to read keyboard events through dos services. If it's possible to access these services on the win32 platform let me know.
Jun 27 2006
next sibling parent reply dennis luehring <dl.soluz gmx.net> writes:
llee schrieb:
 I'm trying to read keyboard events through dos services.
 If it's possible to access these services on the win32 platform let 
me > know. why do try to use dos interrupts - what speaks against phobos functions? (i think) you can only use dos services (realmode emulation on top of win-api) within an real 16bit dos programm - and the D compiler/linker doesn't produce such exes pure win32 programs (dmd compiled ones) cannot call dos interrupts neither can read ports or something like that from which type of program you are trying to receive keystrokes? window or console program? ciao dennis
Jun 27 2006
parent reply llee <llee_member pathlink.com> writes:
In article <e7slui$hsv$1 digitaldaemon.com>, dennis luehring says...
llee schrieb:
 I'm trying to read keyboard events through dos services.
 If it's possible to access these services on the win32 platform let 
me > know. why do try to use dos interrupts - what speaks against phobos functions? (i think) you can only use dos services (realmode emulation on top of win-api) within an real 16bit dos programm - and the D compiler/linker doesn't produce such exes pure win32 programs (dmd compiled ones) cannot call dos interrupts neither can read ports or something like that from which type of program you are trying to receive keystrokes? window or console program? ciao dennis
it's a console app.
Jun 27 2006
parent "Andrew Fedoniouk" <news terrainformatica.com> writes:
 it's a console app.
import std.c.stdio; int c = getchar();
Jun 27 2006
prev sibling next sibling parent pragma <pragma_member pathlink.com> writes:
In article <e7ske2$g67$1 digitaldaemon.com>, llee says...
In article <e7sivt$emq$1 digitaldaemon.com>, dennis luehring says...
llee schrieb:
 In article <e7sa56$3qb$1 digitaldaemon.com>, Frits van Bommel says...
 lee wrote:
 I'm trying to call dos interrupts using the inline assembler.
 Unfortunately I keep getting the following message during compilation:
 end of instruction
 The code I used is listed below. Any help is welcome.
 asm
 {
 mov AH, interrupt_code ;
 int 21H                ;
 ..
 }
 where interrupt_code is of type long. 
I don't believe '21H' is a valid integer in D. This should compile: void main() { long interrupt_code; asm { mov AH, interrupt_code ; int 0x21 ; } }
The same error results.
long interrupt_code is much larger than the 8bit ah register btw: what are you doing? plain old dos 21h is decprecated since win95 most 16bit interrupt (int 0x10h, int 0x13...) procs don't work under win32 what do you want from dos? what are you trying todo? ciao dennis
I'm trying to read keyboard events through dos services. If it's possible to access these services on the win32 platform let me know.
Wow*. Dennis is right, using interrupts from user-land is *way* beyond depricated by this point. Under Windows, your only real alternative is to use the Win32 API. You're going to want to google around some for this. Its a little more involved than I found a decent thread on another site that was started by someone who had a similar question: http://www.gidforums.com/t-2092.html MSDN (http://msdn.microsoft.com) has some more info on the Win32 API, but its pretty useless unless you already have an idea of what to look for. Still, its worth searching there for a good tutorial or two. * - Amazingly enough, I still have a softcover copy of Ralph Brown's Interrupt List on my bookshelf. (2nd Ed. Copyright 1994) - EricAnderton at yahoo
Jun 27 2006
prev sibling parent Walter Bright <newshound digitalmars.com> writes:
llee wrote:
 I'm trying to read keyboard events through dos services.
 If it's possible to access these services on the win32 platform let me know.
What you're looking for are the windows console API functions. Download microemacs from www.digitalmars.com for example code.
Jun 29 2006
prev sibling parent Walter Bright <newshound digitalmars.com> writes:
llee wrote:
 In article <e7sa56$3qb$1 digitaldaemon.com>, Frits van Bommel says...
 This should compile:

 void main()
 {
     long interrupt_code;
     asm
     {
         mov AH, interrupt_code ;
         int 0x21               ;
     }
 }
The same error results.
I tried it, and it compiles correctly. However, it won't run because Win32 programs cannot execute interrupt instructions.
Jun 29 2006