Скомпилировать 64-битный вывод hello world из MSVC2012

Я хотел бы изменить некоторые сборочные строки из кода C++, сгенерированного MSVC. Причину, по которой я хочу это сделать, можно найти здесь. Разница в производительности между MSVC и GCC для высокооптимизированного кода матричного умножения

Поэтому я попытался найти информацию о выходе сборки, но получаю кучу ошибок. Вместо этого я просто попробовал пример "Привет, мир".

include <stdio.h>
int main() {
    printf("asdf\n");
}

Скомпилируйте его в 64-битном режиме с помощью /FA /O2... смотрите вывод ниже

Когда я запускаю ml64 /c Source.asm, я получаю следующую ошибку

Source.asm(35) : error A2006:undefined symbol : FLAT
Source.asm(17) : error A2006:undefined symbol : $LN3
Source.asm(18) : error A2006:undefined symbol : $LN3

Потратив слишком много времени на это, я нашел эти две темы http://social.microsoft.com/Forums/en-US/e0e541d9-5421-4297-8018-7c6a0f12ae62/compile-assembly-generated-by-cl?forum=whatforum и http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/4aad9e70-6bb8-4622-a5d9-a3b07b51fc7f/c-compiler-creates-assembler-directives-that-ml64-doesnt-understand?forum=windowssdk где Microsoft говорит

Перед тем, как была предпринята работа по нацеливанию x64 с помощью компилятора Microsoft C/C++, мы призвали больше не поддерживать сборку сгенерированных C / C++ файлов списков. Другими словами, файлы списков предназначены только для ознакомительных целей.

Может кто-нибудь объяснить другой метод генерации кода сборки из кода C++ в MSVC2012, чтобы я мог изменить несколько строк, а затем перекомпилировать / собрать его?

Изменить: Вот еще несколько полезных комментариев проблема с cl.exe и ml.exe и MS Visual Studio 2010, как использовать файл.asm

Вот выход сборки

; Listing generated by Microsoft (R) Optimizing Compiler Version 17.00.50727.1 

;include listing.inc

INCLUDELIB OLDNAMES

PUBLIC  ??_C@_05DBBGCHPA@asdf?6?$AA@            ; `string'
EXTRN   __imp_printf:PROC
EXTRN   __security_check_cookie:PROC
;   COMDAT ??_C@_05DBBGCHPA@asdf?6?$AA@
CONST   SEGMENT
??_C@_05DBBGCHPA@asdf?6?$AA@ DB 'asdf', 0aH, 00H    ; `string'
CONST   ENDS
PUBLIC  main
;   COMDAT pdata
pdata   SEGMENT
$pdata$main DD  imagerel $LN4
    DD  imagerel $LN4+24
    DD  imagerel $unwind$main
pdata   ENDS
;   COMDAT xdata
xdata   SEGMENT
$unwind$main DD 010401H
    DD  04204H
xdata   ENDS
; Function compile flags: /Ogtpy
;   COMDAT main
_TEXT   SEGMENT
main    PROC                        ; COMDAT
; Line 2
$LN4:
    sub rsp, 40                 ; 00000028H
; Line 3
    lea rcx, OFFSET FLAT:??_C@_05DBBGCHPA@asdf?6?$AA@
    call    QWORD PTR __imp_printf
; Line 4
    xor eax, eax
    add rsp, 40                 ; 00000028H
    ret 0
main    ENDP
_TEXT   ENDS
END

0 ответов

Другие вопросы по тегам