Что такое "=qm" в расширенном ассемблере
Я просматривал предоставленную Intel эталонную реализацию RDRAND
инструкция. На этой странице приведено руководство по внедрению программного обеспечения для цифрового генератора случайных чисел (DRNG), а код взят из примеров программного кода для цифрового генератора случайных чисел.
Ниже приводится соответствующая часть от Intel. Он читает случайное значение и помещает его в val
и устанавливает флаг переноса на успех.
char rc;
unsigned int val;
__asm__ volatile(
"rdrand %0 ; setc %1"
: "=r" (val), "=qm" (rc)
);
// 1 = success, 0 = underflow
if(rc) {
// use val
...
}
Соори нужно спросить. Я не думаю, что это было описано в GNU Extended Assembler, и поиск "=qm" приводит к ложным попаданиям.
Что это "=qm"
значит в расширенном ассемблере?
3 ответа
То, на что вы смотрите - это ограничение встроенного ассемблера. Вот этот (=qm
) объединяет три флага, которые указывают:
=
: Операнд только для записи - его предыдущее значение не имеет значения.q
: Операнд должен быть в регистреa
,b
,c
, или жеd
(это не может быть вesi
, например).m
: Операнд может быть помещен в память.
qm, вероятно, означает, что 1-байтовый 8-битный mem =qm будет допустимым ограничением для сохранения 1-байтового результата. Посмотрите, что хочет setc
http://web.itu.edu.tr/~aydineb/index_files/instr/setc.html
reg8 и mem8
поскольку мы знаем только регистры eax, ebx edx ecx .. a,b,c,d, которые могут быть использованы ссылкой q, потому что к ним можно обращаться с помощью младшего байта al dl cl... При объединении qm мы получаем mem8 . м означало память. Это то, что я имел в виду
Ничего себе, что сначала озадачило меня, но я немного обыскал и обнаружил, что это ссылка на модель процессора, для которой предназначен этот кусочек кода.
Спикально я прочитал, что это для i7 Quadcore.
Это откуда вы взяли этот код?
Это простой индикатор значения для переменного синтаксиса.