бы ничего, но попалась задача про числа с плавающей запятой.
Условия: код пишу на gas, для ввода вывода подтягиваю стандартную библиотеку C.
Проблема: не могу передать функции scanf адрес на double переменную.
Код примерно таков:
alpha:
.double 0
require_integer:
.string "%f"
...
# Ввод alpha
mov $require_integer, %rdi
xor %rax, %rax
# передача alpha в xmm0?
call scanf
Бэкграунд: чего только не перепробовал. И через rax пытался передавать значение, и через стек, и разные варианты mov использовал. Ничего не помогает.
UPD.
Заранее отвечая на вопрос: нахрена мне xmm0, прикладываю ссылку на сайт, где об этом вычитал.
movsd инструкция :)
ABI Linux64? Первый параметр — rdi, второй — rsi. При чём тут rax?
для floating-point же кстати нет :)
Есть такое... https://gcc.godbolt.org/z/Es8vsev36
Я наверное что-то делаю не так, но не помогает. Прикладываю полный код, меня интересует конкретно процедура input. Вроде всё должно работать, но нет, вводишь число, и получаешь ошибку сегментирования.
сигнатуру функции можно?
Обсуждают сегодня