Я работаю над сборкой 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
Мобильная версия