2016-03-04 3 views
0

Мой код выглядит следующим образом:nasm: разрешено ли «global_start:»?

section .text 

global _start: 

_start: 

... 

Если я скомпилировать его с:

nasm -f elf test.asm

я не получаю никаких ошибок и после соединения программа работает для меня.

Проблема в том, что мой преподаватель не смог скомпилировать мою программу и должен был удалить «:» в строке global _start:, чтобы заставить ее работать.

  1. Как может быть, что я не получаю ошибки и не могу скомпилировать?
  2. «Разрешено/разрешено» и программа должна работать?
+0

'nasm -felf64': без ошибок 2.11.06. 'yasm -felf64':' nasm-syntax.asm: 1: ошибка: недопустимые аргументы для [global] 'с v1.3.0. Похоже, что разбор происходит, чтобы принять его, но вы не должны рассчитывать на него. Помимо сохранения нажатия клавиши в копировании/вставке, она не имеет преимуществ и нестандартна, поэтому не делайте этого. Терминология: «не собирается» или «может собираться». Вы не компилируете источник asm. –

+0

Имя ярлыка '_start', а не' _start: '. Не могли бы вы использовать двоеточия, когда ссылаетесь на метку иначе, например. 'jmp _start:'? – Michael

+0

@PeterCordes Это была одна из моих первых программ сборки, и я действительно не помню, почему я поставил «:» там :(Я больше этого не сделаю. Означает ли это, что она собирается для вас без проблем и работает? Или просто собирает без проблем? – Crypto

ответ

2

Я пытался выяснить, почему NASM не может отрицать, что:

GLOBAL, like EXTERN, allows object formats to define private extensions by means of a colon. The elf object format, for example, lets you specify whether global data items are functions or data:

global hashlookup:function, hashtable:data

Like EXTERN, the primitive form of GLOBAL differs from the user-level form only in that it can take only one argument at a time.

- http://www.nasm.us/doc/nasmdoc6.html

Так что это просто причуда анализатор. Он собирается, но я не проверял, на что он собрался.

Не делайте этого. Очевидно, это неправильно, и вы не должны ожидать, что это сработает. Это происходит только с удачей. Как всегда в этих случаях, придерживайтесь обычного синтаксиса, когда ничего не получится сделать иначе. Даже если вы не путаете компилятор/ассемблер, вы будете путать других читателей.

Смежные вопросы