Задать вопрос
Qubc
@Qubc
Ненавижу полисемию.

Почему различаются коды программы после 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
  • Вопрос задан
  • 839 просмотров
Подписаться 2 Простой 3 комментария
Решения вопроса 1
Основное отличие именно в коде, что под Windows ты скомпилировал код как 32-битный, а под Ubuntu - 64-битный. Остальные отличия косметические, на уровне информации для линковщика.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы