2015-01-17 3 views
0

Какая из этих двух операций на процессоре 8086 будет быстрее в исполнении и почему?Какая из этих двух операций на процессоре 8086 будет быстрее в исполнении и почему?

  1. прочитать слово 0x000A с адреса 0x0000B
  2. прочитать слово 0x000B с адреса 0x0000A
+0

Единственный способ узнать наверняка - измерить его. Каков ваш практический вопрос программирования? (Вы проектируете встроенную систему и хотите знать, как выложить свои структуры данных? В этом случае ничего не ставьте на 0x000A или 0x000B. Это таблица прерываний, и процессор использует это для других вещей.) –

+0

2 может быть немного быстрее, потому что адрес, естественно, выравнивается по словам. –

ответ

1

передача из памяти в регистр на 8086 CPU занимает 8 часов + часы, необходимые для расчета эффективный адрес.

mov ax,[0x000B] ; Executes in 8+6+4 clocks 

Выравнивание данных по границе слова обеспечивает быстрее получать раз, так можно было бы ожидать, что линия 2 может быть быстрее. И это!

mov ax,[0x000A] ; Executes in 8+6 clocks 

Почему вы указываете содержание по таким адресам? Я не ожидаю, что это повлияет на скорость чтения.

+0

Не могли бы вы объяснить границу слова более точно? К сожалению, я не совсем понимаю, что вы имеете в виду. Что именно происходит в этих 4 дополнительных часах. – JohnnyFromBF

+1

Слово граница просто говорит, что это четный адрес. Дополнительные часы при чтении слова из нечетного адреса проистекают из того, что ЦП должен адресовать как слово на следующем нижнем четном адресе, так и слово на следующем более высоком четном адресе. Затем CPU использует один байт из каждого, чтобы вывести слово в AX (в данном случае). –

+0

Кажется, что CPU всегда вычисляет адреса с MSb равным нулю. Звучит странно, но подходит для вашего комментария Sep. Итак, содержимое слова в 0x0000B должно быть выбрано как верхний (0x0000B) ORed с нижним (0x000C)? Шина адреса может адресовать только адреса? – alvaroc