Задача: найти Z = X - Y, где X, Y - двойные слова(4 байта), на 16-битном процессоре.
Пока смог придумать только такой алгоритм: извлекать побайтово с конца X в AL, сравнивать с соответствующим байтом Y, если извлеченный байт X меньше соотв. байта Y, прибавлять +1 к регистру AH, отнимать 1 у [Y + 1], проводить вычитание и записывать результат в Z. Но такой алгоритм, например, не получит правильный Z, если X меньше Y. Да и, как мне кажется, он неоптимален.
Может есть какой-то более оптимальный и правильный алгоритм? Может, можно каким-то образом использовать регистры флагов?
Между сложением и вычитанием нет никакой разницы. А - Б это то же самое, что и А + (-Б). Т.е. вычитаешь; если установлен CF, значит произошло "переполнение" (мы ведь суммируем два беззнаковых числа, где отрицательное записано в дополнительном коде).
По идее, проверка флага будет эффективнее сравнения двух операндов. Ну и логически это более правильно.