My Code
const int howmany = 5046;
char buffer[howmany];
asm("lea buffer,%esi"); //Get the address of buffer
asm("mov howmany,%ebx"); //Set the loop number
asm("buf_loop:"); //Lable for beginning of loop
asm("movb (%esi),%al"); //Copy buffer[x] to al
asm("inc %esi"); //Increment buffer address
asm("dec %ebx"); //Decrement loop count
asm("jnz buf_loop"); //jump to buf_loop if(ebx>0)
My Problem
I am using the gcc compiler. For some reason my buffer/howmany variables are undefined in the eyes of my asm. I’m not sure why. I just want to move the beginning address of my buffer array into the esi register, loop it ‘howmany’ times while copying each element to the al register.
Are you using the inline assembler in gcc? (If not, in what other C++ compiler, exactly?)
If gcc, see the details here, and in particular this example:
%0and%1are referring to the C-level variables, and they’re listed specifically as the second (for outputs) and third (for inputs) parameters toasm. In your example you have only “inputs” so you’d have an empty second operand (traditionally one uses a comment after that colon, such as/* no output registers */, to indicate that more explicitly).