Почему различаются коды программы после 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

21 Авг 2019 в 06:23
232 +1
0
Ответы
1

Различия в коде программы после компиляции с помощью gcc -S в Ubuntu и Windows могут быть вызваны различиями в версиях компилятора gcc, используемых на этих операционных системах, а также различиями в настройках компилятора для каждой платформы.

Также возможно, что различия вызваны тем, что на Windows используется компилятор MinGW, который предоставляет среду для разработки под Windows с использованием компилятора gcc, в то время как на Ubuntu используется стандартный компилятор gcc.

В общем, различия в машинном коде после компиляции могут быть вызваны различиями в компиляторах, операционных системах, а также настройках компилятора.

20 Апр в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 706 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир