1
我有這樣的例子簡單的代碼:C++雙重代表ASM
int main() {
double i_3 = 4.1; // 8 bytes
return 0;
}
讓我們編譯該樣品與-S選項:
g++ -S -o asm_types.s asm_types.cpp
編譯器返回與下面的代碼.s文件:
.file "asm_types.cpp"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movabsq $4616302208045442662, %rax
movq %rax, -8(%rbp)
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4"
.section .note.GNU-stack,"",@progbits
我試圖瞭解這一行.s文件
的0movabsq $4616302208045442662, %rax
什麼是4616302208045442662?
感謝
這是一個64位整數立即設置爲你想要的'double'值相同的位。 – EOF
請參閱[binaryconvert](http://www.binaryconvert.com/result_double.html?decimal=052046049) – Jester
別忘了'printf'%x \ n'4616302208045442662'產生'4010666666666666' –