This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Generating DA A via C code.

Hi all.
I am facing this problem.
If I am using following syntax, logically it is ok, but it is generating a wrong asm code via keil C51.
Problem 1

ACC = ACC + B;
This statement works fine with C.
Now I thought it will generate
ADD A, B;
but it is generating
MOV A, B;
ADD A, B;

Problem 2
his C code also involving ACC without my wish.
 ACC = z;
B = 0;
if(ACC<100)
...
his is generating following asm code
MOV A, z(0X0A)
CLR A;
MOV B, A;
this is not what i want.
if I interchange the first 2 lines it works OK. Why so?

Problem 3
I want the DA A command to take place in my code after the addition what I will have to do?
As I want to convert the result in decimal and form that I want to show it on LCD. (DEC to ASCII is quite simple)
I tried lot of C code variations which show correct result as far as only C is concerned but they arte generating absurd AS code and nothing is working.
Please suggest something.

Parents
  • Your problem is that you are using a C compiler but you are writing assembly code. This is like using a chainsaw to perform dental surgery.

    The compiler has to use the accumulator to do its job. When you write code that tries to manipulate the accumulator, you will ultimately fail. The reason is because the compiler uses the accumulator. So, if the compiler uses the accumulator and you also use the accumulator in your C program, you will corrupt the code the compiler is trying to generate.

    If you want to write assembly code, use the assembler.

    Jon

Reply
  • Your problem is that you are using a C compiler but you are writing assembly code. This is like using a chainsaw to perform dental surgery.

    The compiler has to use the accumulator to do its job. When you write code that tries to manipulate the accumulator, you will ultimately fail. The reason is because the compiler uses the accumulator. So, if the compiler uses the accumulator and you also use the accumulator in your C program, you will corrupt the code the compiler is trying to generate.

    If you want to write assembly code, use the assembler.

    Jon

Children