I'm trying to translate the following code from C++ into Asembly language but am having trouble. I know that I have to make a cmp and one or more jmp. If any1 has sugguestions or tips thats great. Here's the C++ coding:

int x = 1 * 2;
    int y = 3 * 4;

    cout << "x = " << x << endl;
    cout << "y = " << y << endl;

    if (x == y)
        cout << "x and y are the same." << endl;
    else
        cout << "x and y are not the same." << endl;

    
    return 0;

Recommended Answers

All 10 Replies

Is there anything wrong with the output of g++ -S prog.cpp Use it as a guide for your own attempt.

include /masm32/include/masm32rt.inc
;compile with masm32 console link & compile
.data
	x dd 1*2
	y dd 3*4
.code
start:
  print "x="
  print str$(x),13,10
  print "y="
  print str$(y),13,10
  invoke cmpmem,addr x,addr y,sizeof x
  .if (eax!=0)
	  print "equal",13,10
  .else
	  print "not  equal",13,10
  .endif
   exit
end start

probably not what u expected ;-) but using a HL Macro Assembler, the difference to other languages ( c) is not so big as one would assume ....

Ummm, yeah that isn't really what I expected lol since I'm using the Kip Irvine files. Btw sorry I think I forgot to mention we can't use .IF statements lol.

> I'm using the Kip Irvine files.
And now you're only telling us this?

> I forgot to mention we can't use .IF statements lol.
More restrictions on the solution, is there anything else you should be telling us?

Post YOUR attempt.

Wow i'm really sorry about all that. I was looking at a different program that I wasn't allowed to use .IF statements. So thanks for the help I'll check out what u gave me now.

Ok now the only problems i'm getting is that cmpmem is an undefined symbol and print is undefined as well. Finally i have this error unmatched block nesting : main

my code is for the original masm32 package, u can find some download links here
http://www.masm32.com/masmdl.htm
make sure to install in top level of ur drive, otherwise the standard include paths won't work.

there are two files: build.bat and buildc.bat in the /bin directory, the later is the correct one for console apps.

the print macro is a very useful macro, located in include file: /macros/macros.asm, see description in
help file: /help/hlhelp.hlp - Console Mode Macros - print

the cmpmem is a routine located in /include/masm32.inc and the corresponding library is
/lib/masm32.lib ,
see description in /help/masmlib.hlp - Memory Functions - cmpmem
( both functions/macros are available through the

include /masm32/include/masm32rt.inc

line only )


it might be a good idea to check some step by step assembly tutorials first, before getting too deep into some programming tasks to early.
though i don't think that assembler is much more difficult than other programming languages, it sure is different and the learning curve in the beginning takes more time than with other languages.
its better to spend more time with the basics in the beginning, than wasting too much time with error fixing when u take the second step before the first...

Is there some other way to output information other than using the "Print" command?

u can try:
invoke crt_printf,addr msg
or with the irvine libs:
;lea edx,msg
;call Writestring

I don't know why but those functions don't seem to cooperate with my program

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.