2016-08-04 3 views
0

im работает с mips. Я запутался между машинным кодом и кодом mips. если я использую mips, я могу видеть адреса ветви в количестве слов, которые нужно перескакивать из инструкции после ветки. Я не понимаю, как это работает «за саксофоном»? и как в этом случае участвует «сдвиг влево» на 2? Мне нужно слово, которое должно быть выровнено на 4 байта (слово), поэтому на самом деле адрес, который я вижу в mips languge, - это число слов * 4 = количество байтов, которое нам нужно скрыть?расчет филиалов адреса

другой вопрос: если сдвиг влево был на 3? что может случиться? это даст мне неправильный адрес?

благодаря

+0

Все инструкции размер 4 байта, и должен начинаться с адреса, который слово выровнен (кратно 4). Из этого следует, что расстояние между двумя инструкциями всегда будет кратным 4 байтам. Поэтому нет смысла тратить биты, кодирующие расстояние ветвления как количество байтов, когда вы знаете, что он всегда будет кратным 4 (т. Е. Два младших значащих бита всегда будут равны 0). Вместо этого вы сохраняете расстояние, разделенное на 4 (сдвинутое вправо на 2) в слове инструкции, и когда инструкция выполняется, процессор выполняет левое смещение этого значения. – Michael

ответ

0

В архитектуре MIPS, ветвление осуществляется путем сравнения значения, как только команда дается, опираясь на не предыдущей операции или флага. Это занимает место в формате инструкции, оставляя только 16 бит, которые будут использоваться в качестве адреса филиала. Это слишком мало для адреса, чтобы быть особенно полезным, поэтому вместо разветвления до этот адрес, он отвечает Относительно к его собственному адресу. Расчет этого смещения ветви обрабатывается все ассемблером, поэтому выглядит, как операция ветвления, будет ветвиться непосредственно на метку/адрес.

Источник: http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html

Смежные вопросы