Существует два способа реализации инструкции XCHG.
a. используя скрытый регистр. 8085 has 2 hidden registers, но неизвестно, использовали ли эти регистры для инструкции xchange. 8086 еще не был спроектирован с обратной стороны, поэтому мы не знаем, сколько скрытых регистров оно имеет.
Temp = A
A = B
B = Temp
b. используя the xor trick.
A = A xor B
B = A xor B
A = A xor B (Now A and B are swapped).
Следует отметить, что как метод А и использование В 3 шага, так что нет никакого способа, чтобы говорить с помощью времени выполнения команды, которая используется метод.
Обратите внимание, что метод A может быть распараллелен, а метод B не может, но 8086 не делает таких причудливых оптимизаций.
На modern CPU'sxchg
последовательно в два раза быстрее, чем в mov
и занимает в два раза больше микрооперации, намекают на регистр темп используется, это может быть сделано в 2 этапа, потому что первые два присвоения сливают в одну, используя регистр переименование.
Если инструкция была жесткой, ее можно было выполнить с той же скоростью, что и mov
, но это, похоже, не так, по-видимому, потому, что оно редко используется.
Подождите, вы не сможете получить исчерпывающий ответ, не видя конструкций процессора, но я могу, конечно, сказать, что инструкция 'xchg' на самом деле не уничтожает какой-либо (видимый пользователем) третий регистр. Я также предлагаю вам ознакомиться с _register renaming_, поскольку это может дать ключ к тому, что действительно происходит «под капотом». – davmac
Вы уверены, что в первой строке? Он должен читать «MOV DX, AX». –
Нет, он не использует регистр данных. –