_basmp_ Вообще идея очень оригинальная, а если бы bsf и bsr могли сканировать всю память, то можно было бы и до 2^32 считать. Кстати, у нас ведь еще есть scasb, может с ним попробовать? Но на самом деле изменённый формат тоже позволяет от 0 до 2^32-1 считать и памяти не намного больше ест.
Black_mirror Любая работа с памятью как минимум на порядок медленее работы с регистрами. Имхо быстрее сдвигать по 5 бит или по 6 (shrd,shld). Только счас допер: rep не забанен и флаг направления тоже.. Не получится. Не вся память доступна для чтения и порты тоже.
Продолжая издеваться над форматом храним числа через байт XBn...XB1XB0. Те в 32х битной переменной лежит 16 битное число xor eax,ebx == and eax,0101010101010101b and ebx,0101010101010101b add eax,ebx sum eax,ebx == or eax,1010101010101010b and ebx,0101010101010101b add eax,ebx not eax == and eax,0101010101010101b add eax,0101010101010101b neg eax == not eax or eax,1010101010101010b add eax,1 sub eax,ebx == neg ebx sum eax,ebx Пока все.
KeSqueer Простое, но не эффективное! _basmp_ Идея очень хорошая! До получения философского камня, то есть NOT для всех 32х разрядов осталось совсем не много. Ну еще нужно упаковать пару таких чисел в 32 разряда, потому что ставить 4Гб чтобы адресоваться только к 64К не рационально
Black_mirror not eax ; uses ebx == mov ebx,eax and eax,0101010101010101b add eax,0101010101010101b and eax,0101010101010101b and ebx,1010101010101010b add ebx,1010101010101010b and ebx,1010101010101010b or eax,ebx
_basmp_ Замечательно! Теперь осталось придумать структуру, чтобы не только NOT (его можно будет и за меньшее число команд сделать), а так же ADD, SUB, AND, OR, XOR можно было не более чем за 8 команд выполнить (полученный NOT для этих операций будет не очень полезен
Странно както делать проц - реализовать всю логику и битовые операции, а для орифметики оставить только сумму. Темболее OR AND XOR и NOT это бызывые элементы. Тот же сумматор например на них строится. Да и в здравом уме никто не будет делать полу x86 тк его архитектура команд уже устарела с 90го года. Такое ощущение Black_mirror ,что тебе дали задание (препод наверно),а ты хитрым способом хочеш пролесть за чужой счет. Лучшеб сделел топик "разминка для ума", а не придумывал всю эту ахинею.
SWR Эта тема как раз и есть "разминка для ума". Жаль только что это не всем очевидно. Как видишь NOT уже сделали, так что, несмотря на заявления предсказателей "Без NOT изначально мертвый проц.", проц очень даже не мёртвый (он просто еще не родившийся Сумматор у него есть (так же как и AND и OR), значит где-то внутри сумматора есть и NOT и XOR, главное их от туда достать. А если эта задачка не нравится, то можешь порешать другие: http://www.wasm.ru/forum/viewtopic.php?id=27319 http://www.wasm.ru/forum/viewtopic.php?id=27313 ну и еще целая куча задачек на форуме есть.
Такой ксор подойдет? xor eax,XXXXXXXX ============== push ebx push ecx mov ebx,XXXXXXXX mov ecx,33 ;21h loop: dec ecx jz ex test ebx,1 jz @f ; если первый бит 0 test eax,1 jz inc_ ;tесли 0 то включаем бит ;если не 0 то выключаем and eax,11111110b jmp @f inc_: or eax,00000001b jmp @f @@: ror eax,1 ror ebx,1 jmp loop EX: pop ecx pop ebx
PaCHER Неа, у нас уже есть NOT в 8 команд. Если добавить к нему 1, то получим NEG A за 9 команд, если добавим B, то получим B-A за 10 команд, если к (A or B) добавим NOT(A and B)+1, то получим XOR за 13 команд. А если придумаем другую структуру для хранения чисел, то получим все эти операции не более чем за 8 команд.