2017-01-31 11 views
0

Книга, которую я читаю на 8086 сборочный утверждает, чтоКак XCHG реализован в процессоре 8086?

XCHG AX, VAR 

эквивалентно:

MOV DX, AX  ; DX is a temporary register 
MOV AX, VAR 
MOV VAR, DX 

Является ли это на самом деле, используя регистр данных, такие как DX, и внутренне исполнение эквивалент трех переместить инструкции или сделать что-то еще в 8086? Если первый случай верен, что происходит с содержимым регистра данных?

+1

Подождите, вы не сможете получить исчерпывающий ответ, не видя конструкций процессора, но я могу, конечно, сказать, что инструкция 'xchg' на самом деле не уничтожает какой-либо (видимый пользователем) третий регистр. Я также предлагаю вам ознакомиться с _register renaming_, поскольку это может дать ключ к тому, что действительно происходит «под капотом». – davmac

+0

Вы уверены, что в первой строке? Он должен читать «MOV DX, AX». –

+0

Нет, он не использует регистр данных. –

ответ

1

Существует два способа реализации инструкции 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, но это, похоже, не так, по-видимому, потому, что оно редко используется.

+0

или просто импигмент в логике ... который является основным решением. –

-2

От 3 до 4 часов на неконвейерном процессоре, есть два чтения и две записи, поэтому может быть параллельна.

read register 
read external 
swap (logic, route signals, no time for xor nor extra register stuff) same clock cycle as one of the reads. 
write both if one is external, if both are registers then an additional clock. 

Так что составляет от 3 до 4. Если была регистр температуры или некоторая операция XOR было бы еще пара/три часов.

+0

xchg занимает от 3 до 4 тактов. A mov занимает 2 на 8086. Ergo вряд ли использовало бы специальное оборудование для xchg, или инструкция была бы быстрее. Даже на современном процессоре xchg намного медленнее, чем MOV. – Johan