Unterschied zwischen impliziter und unmittelbare Adressierung Modus?
Stillschweigend: Operanden werden implizit in der definition von Unterricht. Beispiele: CLA
,CME
,INP
.
Es ist vor allem für Null-Adress (STACK-organisiert) und Ein-Adress (AKKUMULATOR-organisiert) Anweisungen.
Unmittelbaren: operand angegeben ist, die in der Instruktion selbst und vor allem für die Konstanten . Beispiel: ADD R1,#3
,MUL R1,R2,#7
aber kommt die Frage, wie Sie die Anweisung:
1) PUSH 3
und
2)LD 7
Erste ist eine null-Adresse der Instruktion (Stack-basiert) und das zweite ist ein Akku-Anweisung. In beiden Anweisungen Operanden definiert ist, die in der Instruktion selbst. Die Adressierung ist dieser Modus zu bevorzugen, oder am besten beschreibt?
Wie um zu überprüfen, ob die Anweisung impliziert ist, oder sofort?
Weitere Beispiele für implizite Operanden auf x86: SAHF
, LAHF
, und CPUID
.
Quelle: https://en.wikipedia.org/wiki/CPUID
In assembly-Sprache, die die CPUID-Anweisung nimmt keine expliziten Parameter wie CPUID verwendet implizit die register " EAX (und manchmal ECX), um zu bestimmen, die zurückgegebenen Informationen in EAX,EBX,ECX und EDX.
Quelle: http://www.felixcloutier.com/x86/LAHF.html
LAHF — Load Status Flags into AH Register
This instruction executes as described above in compatibility mode and legacy mode. It is valid in 64-bit mode only if CPUID.80000001H:ECX.LAHF-SAHF[bit 0] = 1.
Quelle: http://www.felixcloutier.com/x86/SAHF.html
SAHF — Store AH into Flags
Loads the SF, ZF, AF, PF, and CF flags of the EFLAGS register with values from the corresponding bits in the AH register (bits 7, 6, 4, 2, and 0, respectively). Bits 1, 3, and 5 of register AH are ignored; the corresponding reserved bits (1, 3, and 5) in the EFLAGS register remain as shown in the “Operation” section below.
This instruction executes as described above in compatibility mode and legacy mode. It is valid in 64-bit mode only if CPUID.80000001H:ECX.LAHF-SAHF[bit 0] = 1.
Beispiel: (Quelle: https://www.slideshare.net/rbtaccess/flag-control )
MOV AH, 25H ; immediate source operand
SAHF ; implicit operands
mehr Beispiele CLC
, STC
, und CMC
, die klar legen, oder drehen Sie das carry-flag CF-bzw. (CF ist ein bit im FLAGS-Parameter, nicht für ein ganzes register.)
- Wie um zu überprüfen, ob die Anweisung impliziert ist, oder sofort? Das macht nicht wirklich Sinn machen. Sie haben sich jeder operand einzeln, nicht die ganze Anleitung. z.B. PUSH implizit speichert der stack, aber der expliziten operand kann ein register oder direkt. Auf einigen Architekturen wie x86, PUSH kann auch akzeptieren, ein Speicher-operand.
PUSH r/m32
ist ein opcode und Adressierungsart wählt zwischen Speicher oder register Quelle. - wenn die Anweisung
PUSH A
der operand ist im Speicher, dann wird es stillschweigend Modus, weil der operand ist nicht der EIGENTLICHE OPERAND ? - Es ist nicht klar, warum es darauf ankommt. Verwenden Sie einfach die Anweisung.
- diese Frage ist eindeutig über eine gewisse Art von Akkumulator-Architektur, wo dieser operand ist immer implizit. Ersetzt die meisten die Frage mit x86-Beispiele nicht angemessen sind. Deine Bearbeitung besser funktionieren würde als eine Antwort oder evtl. einem gesonderten Abschnitt auf die Frage nach dem ursprünglichen text.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen Befehl wie PUSH hat zwei Operanden: implizite Ziel und die explizite Quelle. Dass die explizite Quelle kann ein register, eine unmittelbare oder (auf einigen ISA wie x86), eine explizite memory-operand, wie
push qword [rdi + rax*8]
.Implizite -, register -, explizite-Speicher oder direkt eine Eigenschaft des Operanden, nicht die ganze Anleitung.
Kann man nicht beschriften Sie die ganze Unterricht als mit entweder implizit oder direkt. Könnten Sie darüber sprechen, nur der source-operand wird implizit vs. sofort für einige einfache Akku-ISAs, aber deine Frage zeigte auch, was aussah wie ARM-Anweisungen, die als Beispiele für unmittelbare.
Eine Anweisung, wo alle Operanden sind von der gleichen Kategorie sein könnte, sagte implizite Operanden, zum Beispiel. z.B. x86 ist
movsd
- Anweisung zwei Operanden hat, und beide sind das implizite Gedächtnis Operanden. (Kopien von[rsi]
zu[rdi]
, und Schritten beide Zeiger. Oder dekrementiert entsprechend DF, so dass eine weitere implizite Eingabe).x86 ist
inc
- Anweisung hat nur einen Operanden, die register oder Speicher. (Eigentlich FLAGS ist eine implizite output-operand, wie für die meisten x86-Anweisungen).push-3
dekrementiert den stack-pointer und speichert, um Speicher (mit dem neuen Wert der stack-pointer als Adresse). Dies gilt auf x86, und viele andere Architekturen (stack wächst nach unten und verweist auf das Letzte, was gedrückt).Wenn wir also wollen, um in die details
push imm8
hat die folgenden Operanden:rsp
)[rsp]
Ignorieren wir x86-Segmentierung, oder wir zählen konnten
ss
als zusätzliche implizite input-Operanden, zusammen mitrsp
).Angedeutet: Nicht direkt angegeben. Operanden-Adresse sind nicht ausdrücklich angegeben.
Nehmen Sie Null-Adresse des Stack-Organisation für ein Beispiel.
HINZUFÜGEN
Hier Operanden werden nicht direkt angegeben. Die beiden oberen Elementen des stack geholt werden, und dann Hinzugefügt. Hinweis die Operanden sind nicht direkt in der Anleitung. STILLSCHWEIGEND
Sofort: Das ist ganz einfach, Operanden sind direkt vorhanden in das Feld Adresse ein. Das Feld Adresse ist mehr wie operandenfeld.
Implizite Adressierung-Modus:
Implizite Adressierung-Modus, auch bekannt als "Implizite" oder "Angeboren" addressing mode ist die Adressierungsart, in denen keine Operanden(register oder Speicheradresse oder Daten) ist in den Instruktionen angegeben. In diesem Modus wird der operand angegeben sind implizit in der definition von Unterricht.
Als Beispiel: Die Anweisung:"Ergänzen Akkumulator" ist eine Implizite Mode-Anweisung, da die Operanden im Akkumulator-register ist implizit in der definition von Unterricht.In Assembler-Sprache geschrieben, wie:
CMA: Nehmen Ergänzung der Inhalte von AC
Ebenso die Anweisung,
RLC: Drehen Sie die Inhalte von Akkumulator ist eine implizite Anleitungen.
Darüber hinaus alle Register-Verweis-Anweisung, verwenden Sie ein Akku und keine-Adresse-Anweisung in einem Stapel Organisiert Computer sind stillschweigend-Modus Anweisungen, da im Register Referenz-Operanden implizit im Akkumulator und in Null-Adress Anweisung, den Operanden implizit auf den Top of Stack.
Unmittelbare Adressierung Modus:
In Unmittelbare Adressierungsart operand angegeben ist, die in der Instruktion selbst.In anderen Worten, eine sofortige mode-Anweisung Operanden-Feld anstatt ein Feld "Adresse", die enthalten die tatsächlichen Operanden verwendet werden in Verbindung mit den Operanden in den Instruktionen angegeben.Das heißt, in diesem Modus,das format der Anweisung ist:
Als Beispiel: Die Anweisung:
MVI 06
Bewegen Sie 06 bis der AkkuADD 05
ADD-05 zu den Inhalten des AkkumulatorsZusätzlich zu dieser , dieser Modus ist sehr nützlich für die Initialisierung der register mit einem Konstanten Wert.
CMA
Instruktion hatte auch eine Anweisung zu ergänzen, werden einige andere register, man könnte sagen, es hatte ein explizites Ziel. (Aktuelle CPUs mit einem Akku haben oft ein paar anderen Registern neben den Akkumulator, z.B. einige 16-bit-Zeiger regs getrennt von einem 8-bit-AC. Sie unterstützen in der Regel ein paar Operationen auf Sie, wie Schrittweite, aber nicht so viele wie AC). Oder vielleicht würden Sie sagen, dass beide Befehle nichts und hatte impliziten Ziele, wenn Ihre Anweisung Codierung war anders, anstatt die gleichen, außer für ein bit-oder 2-Codierung das Ziel.MVI 6
hat auch AC als eine implizite Ziel, und die OP ' s Verwirrung war über den ganzen Unterricht nur mit einem einzigen Modus. Aber ziemlich gute Antwort, trotzdem, herzlich willkommen auf Stack Overflow.