Сборка Умножающаяся операция 64 битаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Сборка Умножающаяся операция 64 бита

Сообщение Anonymous »

У меня есть некоторые проблемы со следующими действиями в сборке.
Я работаю над сборкой IA32. Предположим -4 (%ebp) = x и -8 (%ebp) = y, и я уже получаю их от пользователя (оба длины 32 бит).
Это код: < /p>

format1: .string "Multiply : %u * %u = %llu\n"
format2: .string "Divide : %u / %u = %u\n"

# operation multiply
movl -4(%ebp), %eax
mull -8(%ebp)
pushl %edx
pushl %eax
pushl -8(%ebp)
pushl -4(%ebp)
pushl $format1
call printf

# operation divide
movl -4(%ebp), %eax
divl -8(%ebp)
pushl %eax
pushl -8(%ebp)
pushl -4(%ebp)
pushl $format2
call printf
< /code>

Причина, по которой результат умножения находится в %LLU, заключается в том, что я хочу иметь возможность умножить 2 длинных числа и печатать результат, даже если он достигает 64 байтов.
, а также в том, что в %EDX команда Mull сохраняет «другие 32 байта» из 64 байтов, поэтому мне нужно подтолкнуть его к стеку. Я хочу этот вывод: < /p>

Multiply : 4000000000 * 2 = 16000000000
< /code>

Также я хочу, чтобы операция разделения 3 с 4, чтобы вернуть результат x.yz. (не более 2 чисел в Мантиссе, и без округления)
e.g.

Divide : 3 / 4 = 0.75
< /code>

для 19 и 1000: < /p>

Divide : 19 / 1000 = 0.01
< /code>

и для 8 и 2: < /p>

Divide : 8 / 2 = 4.00
< /code>

Я действительно пытался много, чтобы получить результат, но без успеха.
Спасибо большое! :)

Подробнее здесь: https://stackoverflow.com/questions/135 ... on-64-bits
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»