LINUX.ORG.RU

Сообщения DLamer

 

Боль, безысходность, работа с ассемблером из под 64х разрядной системы.

Форум — Development

Здравствуйте уважаемые форумчане, недавно начал ознакомление с ассемблером, и ввиду пока что слабой осведомленности в данном вопросе сразу столкнулся с следующей проблемой: в университете у нас на всех машинах стоят 32х разрядные системы и соответственно преподают нам язык именно с расчетом на учебные компьютеры, дома же у меня стоит 64х разрядная система, а так как синтаксис для данных, как мне удалось разузнать(спасибо дедушке гуглу за это). Теперь перейду к конкретным примерам.

Функция для поиска среднего арифметического трех чисел:

.intel_syntax noprefix
.globl avg3_asm
.type avg3_asm, @function
avg3_asm:
  push rdx
  push rbx
  mov rax, [rsp + 12]
  add rax, [rsp + 16]
  add rax, [rsp + 20]
  mov rbx, 3
  cltd
  idiv rbx
  pop rbx
  pop rdx
  ret  
//Функция для запуска на си:
# include <stdio.h>

extern int avg3_asm(int, int, int);

int main(void)
{
  int a, b, c;
  scanf("%d%d%d", &a, &b, &c);
  printf("%d\n", avg3_asm(a, b, c));
  return 0;
} 

Ввод: 1,2,3 Вывод: 4195845

А теперь вопрос, чего я не понимаю в этой жизни, что не так с моим кодом, и что собственно возвращает функция на ассемблере, т.к. предполагалась, что это будет целое число?

 ,

DLamer
()

RSS подписка на новые темы