MIPS, с плавающей точкой: swc1 по сравнению с s.s

Существует много голосов за Завершенный Код Steve McConnell, но что относительно его Практические советы для освоения системы Проекта программного обеспечения книга? Я думаю, что они оба требуются, читая, но по разным причинам.

6
задан Eliseo Ocampos 11 March 2014 в 16:07
поделиться

2 ответа

Мой единственный вопрос: в чем разница? Насколько я могу судить, оба набора инструкций делают одно и то же.

Да, вы правы. Единственное различие, которое может появиться, - это когда псевдо-инструкция транслируется более чем в одну «настоящую» инструкцию.

Могут ли псевдо-инструкции существовать только потому, что их легче читать?

Опять же, да. Вот , почему они существуют. Они создают иллюзию более выразительного набора инструкций. Цитата Организация и дизайн компьютера / Patterson & Hennessy :

... ассемблер также может обрабатывать общие варианты инструкций машинного языка, как если бы они были инструкциями сами по себе. Аппаратному обеспечению не нужно выполнять эти инструкции; однако их появление на языке сборки упрощает перевод и программирование. ...

Учитывая ваш пример, более "ясно" сказать:

l.s $f2, 24(t1)       # Load Single contained in 24(t1) to $f2

, чем

lwc1 $f2, 24(t1)      # Load Word into Coprocessor 1 from 24(t1) to $f2

, и вы можете лучше понять:

move $7, $18        # move contents of $18 to $7

, чем

add $7, $18, $0

. Для меня просто помогает мнемоника, чтобы улучшить читаемость кода.

однако их появление на языке сборки упрощает перевод и программирование. ...

Учитывая ваш пример, более "ясно" сказать:

l.s $f2, 24(t1)       # Load Single contained in 24(t1) to $f2

, чем

lwc1 $f2, 24(t1)      # Load Word into Coprocessor 1 from 24(t1) to $f2

, а также вы можете лучше понять:

move $7, $18        # move contents of $18 to $7

, чем

add $7, $18, $0

Для меня просто помогает мнемоника, чтобы улучшить читаемость кода.

однако их появление на языке сборки упрощает перевод и программирование. ...

Учитывая ваш пример, более "ясно" сказать:

l.s $f2, 24(t1)       # Load Single contained in 24(t1) to $f2

, чем

lwc1 $f2, 24(t1)      # Load Word into Coprocessor 1 from 24(t1) to $f2

, и вы можете лучше понять:

move $7, $18        # move contents of $18 to $7

, чем

add $7, $18, $0

. Для меня просто помогает мнемоника, чтобы улучшить читаемость кода.

9
ответ дан 9 December 2019 в 22:38
поделиться

Джон, проблема в том, что ваш запрос построен так, что он выбирает из производной таблицы. Производная таблица не может получить выгоду от ваших индексов. Попробуйте обновить свой запрос следующим образом:

SELECT
  Parts.*,
  Image.type, Image.width, Image.height,
  Location_State.name AS state,
  Location_Region.name AS region,
  Promotion.start_date AS promotion_start_date,
  Promotion.end_date AS promotion_end_date
FROM Parts
LEFT JOIN Image ON Parts.image_id = Image.id
LEFT JOIN Location_State ON Parts.state_id = Location_State.id
LEFT JOIN Location_Region ON Parts.state_id = Location_Region.id
LEFT JOIN Promotion ON Parts.promotion_id = Promotion.id
INNER JOIN Parts_Category ON (Parts_Category.category_id = 40 OR Parts_Category.main_category_id = 40)
WHERE Parts.status = 'A'
GROUP BY Parts.id
ORDER BY Parts.level DESC, Parts.warehouse DESC, Parts.updated DESC LIMIT 0, 15

Обратите внимание: если вам не нужны LEFT JOIN для таблиц Location_State, Location_Region, Promotion, тогда используйте вместо этого INNER JOIN. Скорее всего, он будет работать лучше. LWC1 (Сопроцессор 1 загрузки слова, показанный на фиг. 4) и
LDC1 (загрузка двойного слова сопроцессора 1, показанного на фиг. 8).

LWC1 загружает 32-битное слово из подсистемы памяти в общие регистры FPC.
LDC1 загружает 64-битное двойное слово из подсистемы памяти в общие регистры FPC.

что подтверждает это.
(кстати: не пытайтесь найти цифры, указанные здесь, если вы имеют доступ к сайту).

2
ответ дан 9 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: