Please show all the steps and comments Use only basic 8086 i
Please, show all the steps and comments. Use only basic 8086 instruction set.
Convert the following C program to x86 assembly code.
----- C code -----
#define count 2
int y[2];
int main (void)
{
int A, B;
y[0] = A + B – count;
y[1] = - B + count;
return(0);
}
Solution
I use the gcc compiler tool chain to do this . You can generate the assembly code using it. YOu can do it if you have the gcc compiler installed on your system. Let\'s say the program file is \"pgm.c\"
STEP:1 Pre-compilation step
// The constants that you define using pre processor directives doesn\'t go into binary and is replaced in this phase.
cpp -o pgm.i pgm.c
STEP:2 Compilation step // Generate the assembly code
cc -o pgm.s -S pgm.i
You can check the assembly code in pgm.s file
STEP:3 Object code generation
as -o pgm.o pgm.s
Now you can also disassemble the object file using objdump
objdump -d pgm.o
Following is the output of the objdump utility for your program :
pgm.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <main>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 8b 45 f8 mov -0x8(%rbp),%eax
7: 8b 55 fc mov -0x4(%rbp),%edx
a: 01 d0 add %edx,%eax
c: 83 e8 02 sub $0x2,%eax
f: 89 05 00 00 00 00 mov %eax,0x0(%rip) # 15 <main+0x15>
15: b8 02 00 00 00 mov $0x2,%eax
1a: 2b 45 f8 sub -0x8(%rbp),%eax
1d: 89 05 00 00 00 00 mov %eax,0x0(%rip) # 23 <main+0x23>
23: b8 00 00 00 00 mov $0x0,%eax
28: 5d pop %rbp
29: c3 retq

