Как добавить два регистра вместе без add
, adc
, sub
, sbb
, inc
и dec
?Ассамблея [ASM]: Добавление без использования арифметических операторов
ответ
Честно говоря, я просто взял this answer и перевел его сборку, номер на сумму в ax
и bx
, в то время как регистры cx
и dx
используются для получения промежуточных результатов, конечный результат в dx
:
mov ax, 12801 ;◄■■ FIRST NUMBER.
mov bx, 2017 ;◄■■ SECOND NUMBER.
l1:
mov cx, ax
and cx, bx
mov dx, ax
xor dx, bx
mov ax, cx
shl ax, 1
mov bx, dx
cmp ax, 0 ;◄■■ IF AX != 0 REPEAT.
jne l1
;RESULT IN DX = 14818
Очень сложный. Как насчет 'mov si, ax; lea dx, [bx + si] '(если мы придерживаемся 16 бит, о которых никто не говорил). – Jester
У меня есть это горячее желание оптимизировать код, который вы здесь представляете, за исключением того, что это было бы абсолютно абсурдно, потому что если вы действительно хотели оптимального кода, вы бы использовали 'add'! –
- 1. Дополнение без использования арифметических или побитовых операторов
- 2. добавляет два числа без использования + или любых арифметических операторов
- 3. Массив арифметических операторов
- 4. Перегрузка арифметических операторов C++
- 5. Ошибочное поведение арифметических операторов
- 6. Перегрузка арифметических операторов C++
- 7. Haskell - переопределение (скрытие) арифметических операторов
- 8. Как найти четное/четное число без арифметических операторов в C?
- 9. Массив арифметических операторов в Swift
- 10. Перегрузка арифметических операторов в JavaScript?
- 11. Обработка арифметических операторов как функций
- 12. Как инвертировать число без использования массива или любых арифметических операций
- 13. A + B без арифметических операторов, Python против C++
- 14. Применение арифметических операторов к спискам значений
- 15. Уточнение при добавлении двух чисел без использования каких-либо арифметических операторов
- 16. Получите наименьший Int из [Int] без использования предопределенных функций или арифметических операторов, кроме <=, ==,
- 17. Как умножить заданное число на 2 без использования арифметических операторов в c?
- 18. ASM простой кейлоггер без использования INT
- 19. Регулярное выражение для оценки и замены операторов арифметических операторов
- 20. (C++) Более длинные строки арифметических операторов
- 21. Выполнение арифметических Compound операторов присваивания в Java
- 22. Хранение основных арифметических операторов в переменных
- 23. Какой тип арифметических операторов (+ -/*) есть в PHP?
- 24. Inhibit неявного преобразования при использовании арифметических операторов
- 25. Использование арифметических операторов с переменной, содержащей список
- 26. Понимание побитовых, арифметических и булевых операторов Python
- 27. Необработанное исключение при использовании арифметических операторов VB
- 28. Реализация операции без операторов
- 29. добавление арифметических значений в словарь?
- 30. Без использования конъюнкции в условиях операторов выбора
Вы забыли упомянуть о какой архитектуре. Для x86 вы можете использовать 'LEA'. – Jester
@Jester Для x86 –
@Jester Как насчет 'movd mm0, eax; movd mm0, ecx; paddd мм0, мм1; movd eax, mm0'? – fuz