Почему различаются коды программы после gcc -S в Ubuntu и Windows? spoilerЯ изучил школьный эмулятор ассемблера ЛамПанель, хочу двигаться дальше, к сожалению, программирование не основная специальность. Возникают вопросы, которые, наверняка описаны например у Таненбаума, верно? В симуляторе всё было не так сложно, как на х86. Разрядность процессора там была 16, адресация 8 разрядная. Пишется код на мнемониках, затем этот код просто транслируется в машинные команды и записывается в память. Как таковой процесс компоновки не затрагивается, нету .exe или .com или .out. Основной интерес - это ассемблер на arm или иных микроконтроллерах. Вопрос дурацкий - когда пишется код на С, то этот код пишется как бы не под сам процессор, а под операционную систему, поэтому он различается в примерах, верно? Или эта разница вызвана просто разными версиями компилятора?int main (){ int a = 333; return 0; } gcc -S test.c gcc -S . /test.c Win7.file "test.c" .def ___main; .scl 2; .type 32; .endef .text .globl _main .def _main; .scl 2; .type 32; .endef _main: LFB0: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 andl $-16, %esp subl $16, %esp call ___main movl $333, 12(%esp) movl $0, %eax leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc LFE0: .ident "GCC: (GNU) 5.3.0" Ubuntu.file "test.c" .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 movl $333, -4(%rbp) movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3" .section .note.GNU-stack,"",@progbits
Различия в коде программы после компиляции с помощью gcc -S в Ubuntu и Windows могут быть вызваны различиями в версиях компилятора gcc, используемых на этих операционных системах, а также различиями в настройках компилятора для каждой платформы.
Также возможно, что различия вызваны тем, что на Windows используется компилятор MinGW, который предоставляет среду для разработки под Windows с использованием компилятора gcc, в то время как на Ubuntu используется стандартный компилятор gcc.
В общем, различия в машинном коде после компиляции могут быть вызваны различиями в компиляторах, операционных системах, а также настройках компилятора.
Различия в коде программы после компиляции с помощью gcc -S в Ubuntu и Windows могут быть вызваны различиями в версиях компилятора gcc, используемых на этих операционных системах, а также различиями в настройках компилятора для каждой платформы.
Также возможно, что различия вызваны тем, что на Windows используется компилятор MinGW, который предоставляет среду для разработки под Windows с использованием компилятора gcc, в то время как на Ubuntu используется стандартный компилятор gcc.
В общем, различия в машинном коде после компиляции могут быть вызваны различиями в компиляторах, операционных системах, а также настройках компилятора.