2016-07-16 18 views
-1

Könnte jemand mir die folgenden Mittel sagen. Ich kann nicht verstehen, die insl AnweisungWarum kann die Insl-Anweisung in x86-Dokument nicht gefunden werden

static inline void 
    insl(uint32_t port, void *addr, int cnt) { 
     asm volatile (
      "cld;" 
      "repne; insl;" 
      : "=D" (addr), "=c" (cnt) 
      : "d" (port), "0" (addr), "1" (cnt) 
      : "memory", "cc"); 
    } 
+1

Haben Sie versucht, nach der Anweisung zu suchen? Es gibt viele Referenzen im Internet für x86-Assembly. –

+1

Dies ist gcc erweiterte Assembler-Syntax. Sehen Sie sich die [gcc assembler extensions] (https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html) an. –

+0

Das ist keine Anweisung, sondern eine Funktion. Was ** speziell ** verstehst du nicht aus der Dokumentation? Was hast du probiert? – Olaf

Antwort

4

Diese Funktion cntdwords von dem Eingangsport spezifiziert durch port in den gelieferten Ausgangsarray addr gelesen wird.

insl entspricht insd: http://x86.renejeschke.de/html/file_module_x86_id_141.html

GAS Syntax der l Suffix verwendet Anweisungen zur Bezeichnung auf dword (32-Bit-Größe) Daten arbeitet.

+0

Warum die Eingabeparameter nicht von der INSL-Anweisung verwendet werden.Genau wie insl (% 0),% 1: (% 2); – Tianxin

+4

@Tianxin Es ist nur ein Relikt des alten x86-Befehlssatzes. Damals, als wir weniger Register hatten, hatte jeder seinen eigenen beabsichtigten Zweck. Viele Anweisungen verwendeten implizite Eingabe-/Ausgaberegister ... "in"/"out" verwenden "ax" und "dx", während die Zeichenfolgenanweisungen "si"/"di" verwenden. Implizite Register halten die Opcodes kürzer. – linguamachina

+0

Vielen Dank, ich verstehe. ^^ – Tianxin