Продолжая тему задачки 26. Есть два прямоугольника(двумерные множества) с целочисленными неотрицательными координатами в диапазоне от 0 до 2^32-1. Указатель на первый прямоугольник находится в регистре ESI, а на второй - в регистре EDI. Каждая координата занимает двойное слово, и у обоих прямоугольников они расположенны в порядке X1,Y1,X2,Y2. Причем X1<=X2, а Y1<=Y2. Размеры прямоугольника можно вычислить так: SX=X2-X1, SY=Y2=Y1. S=SX*SY - площадь прямоугольника. Необходимо написать 3 функции, которые вычисляют площади фигур, получающихся при выполнении операций объединения, пересечения и симметричной разности. Результат необходимо поместить в регистры EDX:EAX. Пример: A=RECT(1,1,3,3) B=RECT(2,2,4,4) Площадь объединения=7. Площадь пересечения=1. Площадь сим.разности=6. Здесь тоже как обычно всё делаем без переходов.
процедура нахождения пересечения, результат в eax. сохранение используемых регистров не производится. главная идея - использования команд условной пересылки CMOVcc. еси работает(вечером потестирую) то чтото больно просто получается... интел за нас решила проблему с переходами))) conj proc mov eax,[esi+8] cmp eax,[edi+8] cmovnc eax,[edi+8] mov ebx,[esi] cmp ebx,[edi] cmovc ebx,[edi] xor edx,edx sub eax,ebx cmovnc edx,eax mov eax,[esi+12] cmp eax,[edi+12] cmovnc eax,[edi+12] mov ebx,[esi+4] cmp ebx,[edi+4] cmovc ebx,[edi+4] xor ecx,ecx sub eax,ebx cmovnc ecx,eax mov eax,edx mul ecx ret conj endp объединение. результат в eax un proc mov eax,[esi+8] sud eax,[esi] mov edx,[esi+12] sub edx,[esi+4] mul edx mov ebx,eax mov eax,[edi+8] sud eax,[edi] mov edx,[edi+12] sub edx,[edi+4] mul edx add ebx,eax call conj sub ebx,eax mov eax,ebx ret un endp симметрическая разность.результат в eax sr proc call un mov eax,ecx call conj sub ecx,eax mov eax,ecx ret sr endp