Spørsmål:
xcListe med instruksjoner for x86 / x64 som implisitt får tilgang til registre
bernd feinman
2016-04-08 21:09:34 UTC
view on stackexchange narkive permalink

Så jeg leter etter en liste over instruksjoner som implisitt gjør ting som å lese eller skrive til registre. Åpenbare ville være

push / pop endrer esp, pushad får tilgang til alle

men jeg er sikker på at det er flere. Kjenner noen til en omfattende liste?

rediger: Med implisitt mener jeg registre som ikke eksplisitt er nevnt i argumentene eller opkoden. (unntatt eflags)

Jeg tror et mer interessant spørsmål ville være "instruksjoner som IKKE får tilgang til registre", med `jmp` som den eneste jeg kan tenke på akkurat nå. Betingede hopptilgangsflagg (teller de som registre?), `Call` /` ret` access `[er] sp`, til og med to adresseinstruksjoner som` movsb` access `[er] di` /` [er] si` , og `[er] cx` hvis de inkluderer prefikset` rep`.
Eller betyr din `implisitt`" registre som ikke er nevnt eksplisitt i opcode / argumenter "?
Guntram Blohm ja det er akkurat det jeg mener. :) Jeg legger til det.
hva er "xcList", forresten?
Tre svar:
user1354557
2016-06-16 23:22:48 UTC
view on stackexchange narkive permalink

Jeg vet ikke om noen omfattende liste, men her ( 32-bit / 64-bit) er en veldig nyttig referanse som inneholder mesteparten av informasjonen du vil ha.

Legg merke til beskrivelsen av operandkolonnene:

Hvis en operand er satt opp med kursiv, er den er en implisitt operand, som ikke brukes eksplisitt. Hvis en operand er satt opp med fet skrift, blir den endret av instruksjonen.

Så for eksempel i 8-biters versjonen av MUL instruksjonen ( AX = AL * r / m8 ), viser de operandene som AX , AL og r / m8. Vær oppmerksom på at de to første operandene er kursiv fordi de er implisitte, og den første operanden er fet skrift fordi den er modifisert.

Dessverre dekker dette ikke alle tilfeller av registerendring. For eksempel viser MOVSD bare m32 og m32 for operandene og nevner ikke det faktum at ESI og EDI blir referert og justert med 4.


Det dekker likevel nesten alle tilfeller, inkludert: AAA , AAD , AAM , AAS , CBW , CDQ , CLTS , CMPXCHG , CMPXCHG8B , CPUID kode>, CWD , CWDE , DAA , DAS , DIV , ENTER , IDIV , IMUL , IN , LAHF , LEAVE , LGDT , LIDT , LLDT , LMSW , LOOP , LOOPcc , MONITOR , MUL , OUT , POPA , PUSHA , RDMSR , RDPMC , RDTSC , RDTSCP , REP , SAHF , SALC , SGDT , WRMSR , og mange av instruksjonene for flyt og SSE, samt et par instruksjoner som ikke har mnemonics.

Det dekker ikke (helt) noen andre, inkludert g: CMPS , INS , LODS , MASKMOVDQU , MASKMOVQ , MOVS , OUTS , SCAS , STOS . Endringer i stabelpekeren er generelt ikke nevnt.

Hvis du bryr deg om segmentregistre, er det også LDS , LES , LFS , LGS , LSS , og segmentprefikset. Flere andre instruksjoner kan imidlertid implisitt endre segmentregistrene. I tillegg gir instruksjoner som får tilgang til minne implisitt tilgang til hurtigbufret informasjon fra segmentregistrene.

Merk: Ovennevnte er ikke omfattende lister!

Til slutt må du les Intel Manuals for å få den offisielle dokumentasjonen, men dette diagrammet bør likevel spare deg for mye tid.

dingo_kinznerhook
2016-04-08 21:23:53 UTC
view on stackexchange narkive permalink

Denne listen kommer til å inneholde de fleste instruksjonene i instruksjonssettet fordi de fleste instruksjonene endrer flagg eller registre på en eller annen måte ("mov" -instruksjonen er en som ikke gjør det). Flaggene som er tilgjengelige for betingede hopp lagres i EFLAGS-registeret. Du finner informasjonen du leter etter ved å se i Intel-manualen - les delen om bruken av hver instruksjon.

peter ferrie
2016-04-11 22:04:06 UTC
view on stackexchange narkive permalink

Her er forsøket mitt på listen:

DAA, DAS, AAA, AAS, PUSHA, POPA, NOP, PAUSE, CBW, CWD [E], CDQ, CQO, WAIT, AAM, AAD, XLAT, JMP, LOADALL, EMMS, FINIT, CALL, RET [F], INT, INTO, RSM, PUSH, POP, ENTER, LEAVE, hvilken som helst FPU-instruksjon som ender med 'P' ...

Å finne en omfattende liste vil kreve at du avklarer spørsmålet ytterligere. Det er instruksjoner som for eksempel endrer minne ved hjelp av umiddelbare verdier. De får ikke tilgang til registre, så de ser ut til å kvalifisere seg, men sannsynligvis ikke hva du har tenkt.



Denne spørsmålet ble automatisk oversatt fra engelsk.Det opprinnelige innholdet er tilgjengelig på stackexchange, som vi takker for cc by-sa 3.0-lisensen den distribueres under.
Loading...