Возвращаемое значение функции C для ASM

Я пытаюсь вызвать функцию из ASM. Я знаю, как это назвать, но мне трудно найти, как получить возвращаемое значение этой функции. Ниже приведен пример:

C код:

int dummy() { return 5; } 

(N) код ASM:

 dummyFunction: call dummy ;grab return into eax inc eax ; eax should be 6 now ret 

Есть идеи?

Возвращаемое значение находится в eax . Если вы вызвали функцию C из asm, вы можете прочитать возвращаемое значение из eax . Если вы пытаетесь вернуться из asm-функции в C, сохраните требуемое возвращаемое значение в eax .

Вещи становятся немного более сложными для возвращения значений с плавающей запятой, long long значений или структур, поэтому спросите, если вам это нужно, и кто-то (может быть, мне) поможет вам.

Хотя ответов достаточно, чтобы ответить на вопрос OP, вот экстракт, охватывающий большинство случаев из man-страницы DJPP для полноты:

Возвращаемое значение

  • Целые числа (любого размера до 32 бит) и указатели возвращаются в регистре %eax .
  • Значения с плавающей точкой возвращаются в верхнем регистре 387, st(0) .
  • Возвращаемые значения типа long long int возвращаются в %edx:%eax (самое значительное слово в %edx и наименее значимое в %eax ).
  • Возrotation структуры сложно и редко полезно; старайтесь избегать этого. (Обратите внимание, что это отличается от возврата указателя на структуру.)

Если ваша функция возвращает void (например, нет значения), содержимое этих регистров не используется.

Это зависит от платформы и соглашения о вызове, но обычно возвращаемое значение уже должно быть возвращено в eax если оно является примитивным типом или указателем, а в регистре с плавающей запятой st(0) если это тип с плавающей точкой, я думаю.