Путаница в простой инструкции с плавающей запятой - PullRequest
0 голосов
/ 14 апреля 2019

У меня был вопрос по поводу следующей инструкции с плавающей запятой и '0', который передается в f2 (регистр с плавающей запятой)

fld f2,0(Rx)

Что я знаю об этой инструкции из моего исследования, так это то, что fld загружает содержимое от 0 (Rx) до f2, и я знаю, что Rx является целочисленным / адресным регистром. Я просто запутался, если число 0 сохраняется в f2 или содержимое Rx в 0

1 Ответ

1 голос
/ 15 апреля 2019

Эти операнды выглядят как MIPS l.d, а не x86.

x86 fld в синтаксисе AT & T выглядит как fld 0(%esi), с неявным назначением st0.

x87 Имена регистров стека: st0..st7.x86 + x87 не имеет регистров с именем f2.


С другой стороны, MIPS имеет регистры целых чисел / указателей r0..r31, а регистры FP f0..f31 и imm16 + register с этим синтаксисом.(классический) единственный режим адресации MIPS.


Но это также не MIPS, потому что fld не является мнемоникой MIPS (это x87) , и большинство ассемблеров MIPS используют$ в качестве префикса для имен регистров.

Как и l.d $f2, 0($4) или 0($a0) - это обычный синтаксис MIPS, который будет собираться с GAS или с MARS.(И l.d - это псевдоинструкция для загрузки с двойной точностью в 2 регистра.)

Фактическая машинная инструкция, которую вы хотите для MIPS, равна ldc1 $f2, 0($4), для 64-битной загрузки, необходимой для выравнивания в$ f2 и $ f3.


Если это для какого-либо реального ISA, это, вероятно, не MIPS или x86, но я не узнаю конкретный.

Но независимо от этого синтаксис asm довольно универсален: Это загрузка в регистр FP и адрес источника 0 + Rx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...