473,756 Members | 2,558 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Another inline assembly question

Hi group,

inspired by the other inline assembly thread a question popped up in my
mind... Victor Bazarov mentioned in his response that the asm() clause
was covered by the C++ standard, subclause 7.3.. Well, I couldn't find
the C++ standard definition on the net, so I'm asking here:

Why is a thing like assembly covered by the standard at all? According
to Victor's response, it seems to be totally compiler dependent what's
done with the char* I pass on to asm(). If that were true, usage of
asm() would always yield undefined results (according to the standard).
Doesn't that totally defy the purpose of a standard in the first place?

And isn't usage of a highly object-oriented language mixed with
_assembly_, a language not only dependant on the running OS (like
implementation of system/library calls), but also to the very most
extent dependant on the hardware a little bit odd?

Well, just wondered... hope somebody can clear that up.
Greetings,
Johannes

--
PLEASE verify my signature. Some forging troll is claiming to be me.
My GPG key id is 0xCC727E2E (dated 2004-11-03). You can get it from
wwwkeys.pgp.net or random.sks.keys erver.penguin.d e.
Also: Messages from "Comcast Online" are ALWAYS forged.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFCUz2GCse FG8xyfi4RAuiQAJ sG0juW41Uru5F/KNgPax88SEb65wC fYFqK
Ty9+dh5y17fNfCV pi/32bbc=
=NQhT
-----END PGP SIGNATURE-----

Jul 23 '05 #1
11 1618
Johannes Bauer wrote:
Hi group,

inspired by the other inline assembly thread a question popped up in my
mind... Victor Bazarov mentioned in his response that the asm() clause
was covered by the C++ standard, subclause 7.3.. Well, I couldn't find
the C++ standard definition on the net, so I'm asking here:

Why is a thing like assembly covered by the standard at all? According
to Victor's response, it seems to be totally compiler dependent what's
done with the char* I pass on to asm(). If that were true, usage of
asm() would always yield undefined results (according to the standard).
Doesn't that totally defy the purpose of a standard in the first place?
No, it produces *implementation defined* results, just as is the case
with, for example, system(). [Implementation defined != undefined]
And isn't usage of a highly object-oriented language mixed with
_assembly_, a language not only dependant on the running OS (like
implementation of system/library calls), but also to the very most
extent dependant on the hardware a little bit odd?

See above.

HTH and Cheers,
--ag
--
Artie Gold -- Austin, Texas
http://it-matters.blogspot.com (new post 12/5)
http://www.cafepress.com/goldsays
Jul 23 '05 #2
Johannes Bauer wrote:
Hi group,

inspired by the other inline assembly thread a question popped up in my
mind... Victor Bazarov mentioned in his response that the asm() clause
was covered by the C++ standard, subclause 7.3.. Well, I couldn't find
the C++ standard definition on the net, so I'm asking here:

Why is a thing like assembly covered by the standard at all? According
to Victor's response, it seems to be totally compiler dependent what's
done with the char* I pass on to asm(). If that were true, usage of
asm() would always yield undefined results (according to the standard).

Implementation-defined.

Doesn't that totally defy the purpose of a standard in the first place?

And isn't usage of a highly object-oriented language mixed with
_assembly_, a language not only dependant on the running OS (like
implementation of system/library calls), but also to the very most
extent dependant on the hardware a little bit odd?


With C++ you can do both portable and system-specific programming.

--
Ioannis Vranos

http://www23.brinkster.com/noicys
Jul 23 '05 #3
Artie Gold wrote:
Why is a thing like assembly covered by the standard at all? According
to Victor's response, it seems to be totally compiler dependent what's
done with the char* I pass on to asm(). If that were true, usage of
asm() would always yield undefined results (according to the standard).
Doesn't that totally defy the purpose of a standard in the first place?


No, it produces *implementation defined* results, just as is the case
with, for example, system(). [Implementation defined != undefined]


Well, but isn't the sole purpose of a _standard_ that I can compile my
programs with whichever compiler fulfills the standard's requirements
and it always behaves the same? An "implementa tion defined" result would
mean there could be compilers out there translating asm() into something
comepletely weird, maybe some compilers ignore it completely. And they
would all fulfill the standard's requirements, as the standard states
it's up to the implementation to decide what to do.

This seems awkward... are there more "implementa tion defined" places in
the C++ standard?

Greetings,
Johannes

--
PLEASE verify my signature. Some forging troll is claiming to be me.
My GPG key id is 0xCC727E2E (dated 2004-11-03). You can get it from
wwwkeys.pgp.net or random.sks.keys erver.penguin.d e.
Also: Messages from "Comcast Online" are ALWAYS forged.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFCU8ryCse FG8xyfi4RAgClAJ 9Q3n6CS+F+Rpono G9QJ3U79gwA3gCg ocPV
i+uT6p9KvTdDDxy 9Zi909qA=
=PYNO
-----END PGP SIGNATURE-----

Jul 23 '05 #4
Johannes Bauer wrote:

Artie Gold wrote:
Why is a thing like assembly covered by the standard at all? According
to Victor's response, it seems to be totally compiler dependent what's
done with the char* I pass on to asm(). If that were true, usage of
asm() would always yield undefined results (according to the standard).
Doesn't that totally defy the purpose of a standard in the first place?
No, it produces *implementation defined* results, just as is the case
with, for example, system(). [Implementation defined != undefined]


Well, but isn't the sole purpose of a _standard_ that I can compile my
programs with whichever compiler fulfills the standard's requirements
and it always behaves the same? An "implementa tion defined" result would
mean there could be compilers out there translating asm() into something
comepletely weird, maybe some compilers ignore it completely.


Yes exacxtly.
The problem for those writing the standard is as follows. There are
always regions where the committee cannot rule down what has to be done,
since those things are dependent on external influences. Take the system()
command for example. The standard committee thought it to be neccessary
to have some way to communicate with the operating systems command processor
(if there is one). But the exact way how this should be done, which string
to pass to create a specific reaction is outside their scope, mostly because
it is not the C++ committee who defines what those command line syntax looks
like. Or the exact format of file names or directory specifications in file
names, or ...
And they
would all fulfill the standard's requirements, as the standard states
it's up to the implementation to decide what to do.

This seems awkward... are there more "implementa tion defined" places in
the C++ standard?


Sure.
Whenever the standard needs to 'look across the borders of the language'
and has to accept that it cannot control the behaviour of the underlying
hardware and/or operating system.

C++ defines a language in contrast to eg. Java. Java defines the whole
platform, thus it has much better control over that platform. How that
virtual platform is implemented in real hardware or in a real operating
system is not the problem of Java per se.

--
Karl Heinz Buchegger
kb******@gascad .at
Jul 23 '05 #5
Johannes Bauer wrote:

Well, but isn't the sole purpose of a _standard_ that I can compile my
programs with whichever compiler fulfills the standard's requirements
and it always behaves the same?


No. The purpose is to give you a good shot at writing code that's
reasonably portable, which means knowing which parts can move to a
different system without change and which ones may need to be rewritten.
If you like the myth of "write once, run anywhere," use Java and learn
to love the undocumented changes in behavior.

--

Pete Becker
Dinkumware, Ltd. (http://www.dinkumware.com)
Jul 23 '05 #6

"Pete Becker" <pe********@acm .org> wrote in message
news:X9******** ************@rc n.net...
If you like the myth of "write once, run anywhere," use Java and learn
to love the undocumented changes in behavior.


Certainly Java has no inline assember <g>, and Java has not 100% achieved
the goal of write once, run anywhere. However, Java has made a major effort
to remove things like implementation defined and undefined behavior from the
language, and as a result it is intrinsically much more portable than C++.

For example, Java has a defined order of evaluation of the components of an
expression. Therefore, if those components have side effects, the expression
will behave the same on different platforms. C++ does not, it's
implementation defined, and the expression may behave differently, even
using the same compiler (just by changing optimization switches).

The reason for this flexibility in C++ is to allow more opportunities for
optimizing an expression. But I've written an advanced optimizer for both
C++ and Java compilers, and switching the "reorder the expression even if it
has side effects" has no discernible advantage for real code.

C++ would benefit from a pass through the spec and revisit each
implementation defined and undefined behavior, to see if they are still
justifiable given today's compiler technology rather than yesteryear's.
Fixing the spec won't break existing code if that code is written to avoid
relying on undefined and implementation defined code anyway <g>.

And can't C++ just say that shorts are 16 bits? Does anyone care about
programming the PDP-10 in C++? (I personally have a big soft spot for
the -10, but let's face it, it's been obsolete for 20 years.) Anyone have 18
bit shorts on the CPU drawing table? I'd be shocked if there was.

-Walter
www.digitalmars.com free C, C++, D compilers
Jul 23 '05 #7
Walter wrote:
"Pete Becker" <pe********@acm .org> wrote in message
news:X9******** ************@rc n.net...
If you like the myth of "write once, run anywhere," use Java and learn
to love the undocumented changes in behavior.

Certainly Java has no [...] Java has not 100% achieved
[..] Java [...] much more portable than C++.

For example, [...]


Java is a platform. C++ is a language. Can we move on now?
Jul 23 '05 #8
Walter wrote:
And can't C++ just say that shorts are 16 bits? Does anyone care about
programming the PDP-10 in C++? (I personally have a big soft spot for
the -10, but let's face it, it's been obsolete for 20 years.) Anyone have 18
bit shorts on the CPU drawing table? I'd be shocked if there was.

When people mention "Java" they are actually talking about two things. The Java language
(syntax) and the Java framework (JVM). The last is open only to the Java language. So when
you are programming form the JVM you are targeting only one platform, the JVM. That's why
everything has fixed size.
If JVM was available to other languages like C++, then C++ programmers would also target
one platform when targeting the JVM, and thus would also have the same fixed size and
other JVM facilities (like garbage collection etc).
This is what is happening with other virtual machine frameworks, like .NET (a CLI
compliant VM). My .NET applications are always targeting the framework and thus always
have fixed sizes (int and long are always 32-bit, short is always 16) in 64-bit .NET
frameworks too. They also have the garbage collection and other facilities of the framework.
So in few words, C++ takes advantage of all facilities a system provides. If you target a
virtual machine you get the type sizes and other facilities of the virtual machine, if you
target a native machine you get the sizes of the native machine.
I hope this makes things clear.


--
Ioannis Vranos

http://www23.brinkster.com/noicys
Jul 23 '05 #9
Ioannis Vranos wrote:

If JVM was available to other languages like C++,


The JVM *is* available to other languages like C++.
Jul 23 '05 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
2162
by: __PPS__ | last post by:
Hello I have a simple question about inline asm. suppose I have asm { push eax, 123 } does it mean that it will have exactly this effect as in usual asm or it's just a suggestion to the compiler (meaning that the compiled program might probably use some other register in place of eax) Thanks. Ps. I do not have any intention to use inline asm.
3
3674
by: Ganesh Tawde | last post by:
Hi. I am trying to use the below pure assembly code as inline assembly in C. The pure assembly code gives proper data but the inline assembly code gives me distorted data. I am not able to figure out the problem. can any body help me on this? here is the working pure assembly function *************************************************************************
18
5067
by: Method Man | last post by:
If I don't care about the size of my executable or compile time, is there any reason why I wouldn't want to inline every function in my code to make the program run more efficient?
30
19756
by: Will Pittenger | last post by:
Does C# inline functions? I do not see a inline keyword. Is there an implicit inline? Can the compiler select functions for auto-inlining? I am more used to C++ where all these things are possible. ---------- Will Pittenger E-Mail: mailto:will.pittenger@verizon.net All mail filtered by Qurb (www.qurb.com)
8
1753
by: neilmcguigan | last post by:
I just wanted to list some reasons why I prefer inline code to code-behind. 1. you can fix some bugs more quickly. remote desktop into server, change the aspx file, and she's good to go. I'd say this is one of the major reasons classic ASP became so popular. 2. don't have to upload the large codebehind site DLL to fix one bug. 3. updating the codebehind site DLL restarts the application. fixing
9
2899
by: chinu | last post by:
hi all, i did a small experiment to grasp the advantages of declaring a function as inline. inline int fun1(); int main(){ unsigned int start=0,end=0; asm("rdtsc\n\t"
7
3170
by: ypjofficial | last post by:
Hello All, Inline before a function definition is just a request to the compiler to make the function inline. The compiler may or maynot make it inline.. My question is ..is there any way by which I can find at runtime whether the particular function which is marked as inline,is made inline or is treated like other function by the compiler ?
2
1830
by: =?Utf-8?B?TWljayBPJ05laWxs?= | last post by:
I am currently trying to wrap an old library (ImageMagick) in .NET, and am having problems with inline expansions. I have recompiled the library in vc++ 2005 OK. However, when I try to access any inline methods of the library classes from my managed classes, the inlining does not seem to occur, and I end up with a linker error 2001 - unresolved external. Is there a trick for getting this to work. I have tried using Default inline (/Ob0) in...
15
2821
by: Chris Peters | last post by:
Hello Group Can anyone confirm or suggest workrounds for the following bug in lccwin32. If an inline assembly statement immediately follows a for loop and you try to set a breakpoint on it, then the breakpoint is hit at each iteration of the loop, not after the loop finishes. Thanks Chris
0
9462
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
9287
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
9886
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
9857
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
8723
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
0
5318
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
3817
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
3369
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
2677
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.