Skip to content

I found an issue when I call printf to output values of array items. #18

@zzdmfk

Description

@zzdmfk

printf outputs addresses of array items, not values. Have you got a schedule to fix issues?

C code:

int printf(const char* str, ...);

int main()
{
int i;
int arr[3];
arr[0] = 5;
arr[1] = 6;
arr[2] = 7;

for(i = 0; i < 3; i++)
printf("%d\n", arr[i]);

return 0;
}

Asm code:

george@george-ubuntu:~/Desktop/gitcompiler/PeachCompiler$ ./main
section .data
section .text
extern printf
global main
; main function
main:
push ebp
mov ebp, esp
sub esp, 16
push dword 5
pop eax
mov dword [ebp-16], eax
push dword 6
pop eax
mov dword [ebp-12], eax
push dword 7
pop eax
mov dword [ebp-8], eax
push dword 0
pop eax
mov dword [ebp-4], eax
jmp .for_loop1
.entry_point_3:
push dword [ebp-4]
pop eax
push eax
inc eax
push eax
pop eax
mov dword [ebp-4], eax
pop eax
.for_loop1:
push dword [ebp-4]
push dword 3
pop ecx
pop eax
cmp eax, ecx
setl al
movzx eax, al
push eax
pop eax
cmp eax, 0
je .for_loop_end2
lea ebx, [printf]
push ebx
pop ebx
mov dword [function_call_5], ebx
lea ebx, [ebp-16]
push ebx
pop ebx
push dword [ebp-4]
pop eax
imul eax, 4
add ebx, eax
push ebx
pop eax
push eax
mov eax, str_6
push eax
call [function_call_5]
add esp, 8
push eax
pop eax
push eax
add esp, 4
push dword [ebp-4]
pop eax
push eax
inc eax
push eax
pop eax
mov dword [ebp-4], eax
pop eax
jmp .for_loop1
.for_loop_end2:
.exit_point_4:
push dword 0
pop eax
add esp, 16
pop ebp
ret
add esp, 16
pop ebp
ret
section .data
function_call_5: dd 0
section .rodata
str_6: db '%', 'd', 10, 0
everything compiled file
/usr/bin/ld: ./test.o: warning: relocation in read-only section `.text'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
nasm -f elf32 ./test -o ./test.o && gcc -m32 ./test.o -o ./test

Outputs:

george@george-ubuntu:~/Desktop/gitcompiler/PeachCompiler$ ./test
-2215688
-2215684
-2215680
`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions