endlessRiver
(usa Ubuntu)
Enviado em 11/12/2020 - 13:28h
Tenho o seguinte código em C:
#include <stdio.h>
int main (){
float x = 1.7, y;
y = x - 1.4;
printf ("y = 1.7-1.4 = %10.13f\n", y);
}
Ao fazer a compilação com o gcc e usando a flag -m32 (Compilar em 32 bits), recebo o seguinte codigo em assemby:
.file "teste.c"
.text
.section .rodata
.LC2:
.string "y = 1.7-1.4 = %10.13f\n"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
endbr32
leal 4(%esp), %ecx
.cfi_def_cfa 1, 0
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
.cfi_escape 0x10,0x5,0x2,0x75,0
movl %esp, %ebp
pushl %ecx
.cfi_escape 0xf,0x3,0x75,0x7c,0x6
subl $20, %esp
flds .LC0
fstps -16(%ebp)
flds -16(%ebp)
fldl .LC1
fsubrp %st, %st(1)
fstps -12(%ebp)
flds -12(%ebp)
subl $4, %esp
leal -8(%esp), %esp
fstpl (%esp)
pushl $.LC2
call printf
addl $16, %esp
movl $0, %eax
movl -4(%ebp), %ecx
.cfi_def_cfa 1, 0
leave
.cfi_restore 5
leal -4(%ecx), %esp
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE0:
.size main, .-main
.section .rodata
.align 4
.LC0:
.long 1071225242
.align 8
.LC1:
.long 1717986918
.long 1073112678
.ident "GCC: (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0"
.section .note.GNU-stack,"",@progbits
.section .note.gnu.property,"a"
.align 4
.long 1f - 0f
.long 4f - 1f
.long 5
0:
.string "GNU"
1:
.align 4
.long 0xc0000002
.long 3f - 2f
2:
.long 0x3
3:
.align 4
4:
Eu sei que o numero 1071225242 (Em LC01) reprensenta em decimal, a representação de 1.7 em ponto flutuante 32 bits. Mas o que significam os outros longs em LC1, especificamente 1717986918 e 1073112678?