1/91
Name | Mastery | Learn | Test | Matching | Spaced |
|---|
No study sessions yet.
Mi a különbség a MOV EAX, [EBX] és a LEA EAX, [EBX] között?
A MOV kiolvassa az adatot a memóriából. A LEA csak kiszámolja a címet (a szögletes zárójel tartalmát), de nem nyúl a memóriához (gyakran használják gyors matekra).
Hány operandusa van a MUL utasításnak az assembly kódban, és hol keletkezik az eredmény (16 bites esetben)?
Csak egy operandusa van (a szorzó). A szorzandó implicit módon az AX. Az eredmény a DX:AX regiszterpárba kerül (32 biten).
MOV vs. LEA különbség?
A MOV kiolvassa az adatot a memóriából. A LEA csak kiszámolja a memóriacímet (vagy matematikai műveletet végez), de nem nyúl a memóriához.
Hány operandusa van a MUL utasításnak?
Csak 1 (a szorzó). A szorzandó implicit módon az AX (16 bit) vagy EAX (32 bit).
Hová kerül a 16 bites MUL eredménye?
A DX:AX regiszterpárba (felső 16 bit: DX, alsó 16 bit: AX).
Mit csinál a CMP utasítás?
Kivonást végez (Cél - Forrás), de nem menti el az eredményt, csak a Flageket (jelzőbiteket) állítja be.
Mire való a CDQ utasítás?
Az EAX előjelét kiterjeszti az EDX-re (EDX:EAX), hogy előkészítse az előjeles osztást (IDIV).
Mire való a CBW utasítás?
Az AL (8 bit) előjelét kiterjeszti az AX-re (16 bit).
LES utasítás működése?
Betölt egy távoli mutatót: az Offsetet a megadott regiszterbe, a Szegmenst pedig az ES (Extra Segment) regiszterbe tölti.
Melyik irányba nő a verem (Stack) x86-on?
A magas memóriacímektől az alacsony címek felé (lefelé).
ESP regiszter feladata?
Stack Pointer: Mindig a verem legtetejére (a legutóbb betett elemre) mutat.
EBP regiszter feladata?
Base Pointer: A veremkeret bázisa. Ehhez képest érjük el a paramétereket (pl. EBP+8) és lokális változókat (pl. EBP-4).
Melyik regiszter tárolja a visszatérési értéket?
Az EAX regiszter.
ECX regiszter tipikus szerepe?
Counter (Számláló): Ciklusoknál (LOOP) és string műveleteknél (REP) használják.
ESI és EDI regiszterek szerepe?
String műveleteknél az ESI a Forrás (Source) index, az EDI a Cél (Destination) index.
Melyik ugrást használjuk előjeles (SIGNED) "nagyobb" vizsgálathoz?
JG (Jump if Greater).
Melyik ugrást használjuk előjel nélküli (UNSIGNED) "nagyobb" vizsgálathoz?
JA (Jump if Above).
Melyik ugrást használjuk előjeles (SIGNED) "kisebb" vizsgálathoz?
JL (Jump if Less).
Melyik ugrást használjuk előjel nélküli (UNSIGNED) "kisebb" vizsgálathoz?
JB (Jump if Below).
JE (Jump if Equal) feltétele?
Akkor ugrik, ha a Zero Flag (ZF) értéke 1 (azaz az összehasonlítás eredménye egyenlő volt).
Melyik flag jelzi az előjel nélküli túlcsordulást?
CF (Carry Flag).
Melyik flag jelzi az előjeles túlcsordulást?
OF (Overflow Flag).
MOVSX jelentése?
Move with Sign Extend: Előjelhelyes kiterjesztés (az előjelbitet másolja a felső bitekre).
MOVZX jelentése?
Move with Zero Extend: Nullás kiterjesztés (nullákkal tölti fel a felső biteket).
SHL (Shift Left) matematikai megfelelője?
Szorzás 2-vel.
SAR (Shift Arithmetic Right) különlegessége?
Jobbra tolásnál megőrzi az eredeti előjelbitet (negatív szám negatív marad).
Mit csinál a "xor eax, eax"?
Nullázza az EAX regisztert (gyorsabb, mint a mov eax, 0).
Mit csinál az "and edi, 0xff"?
Maszkolás: Csak az alsó 8 bitet hagyja meg az EDI-ben, a többit törli.
Mit csinál a SETZ (vagy SETE) utasítás?
Ha a Zero Flag aktív (1), akkor a célregisztert 1-re állítja, egyébként 0-ra.
Mi történik PUSH utasításkor az ESP-vel?
Az ESP értéke csökken (a verem lefelé nő), majd az adat beíródik a memóriába.
EIP regiszter feladata?
Instruction Pointer: A következő végrehajtandó utasítás címét tárolja.
Melyik regisztert használják a portok írására/olvasására (I/O)?
Az EAX (vagy AL/AX) regisztert.
JMP utasítás típusa?
Feltétel nélküli ugrás (Unconditional Jump).
Mi a különbség a TEST és az AND utasítás között?
A TEST elvégzi az AND műveletet a flagek beállításához, de NEM menti el az eredményt (hasonlóan, mint a CMP a kivonásnál).
Mit jelent a 0x80000000 érték 32 bites előjeles számként?
A legkisebb ábrázolható negatív szám (INT_MIN).
Mit jelent a 0x7FFFFFFF érték 32 bites előjeles számként?
A legnagyobb ábrázolható pozitív szám (INT_MAX).
Mit csinál ez a kód? "mov ecx, 10" -> "label: dec ecx" -> "jnz label"
Egy ciklust valósít meg, ami 10-szer fut le (amíg ECX nem lesz 0).
Mit csinál ez a kód? "cmp eax, 0" -> "jge skip" -> "neg eax" -> "skip: ret"
Kiszámolja az EAX abszolút értékét (ha negatív, pozitívvá teszi).
Mit csinál ez a kód? "xor eax, eax" -> "ret"
A függvény visszatérési értékét (EAX) 0-ra állítja (pl. return 0; C-ben).
Melyik állítás igaz a "while" ciklus assembly implementációjára?
A feltétel ellenőrzése a ciklusmag ELŐTT történik (ha hamis, egyszer sem fut le).
Melyik állítás igaz a "do-while" ciklus assembly implementációjára?
A feltétel ellenőrzése a ciklusmag VÉGÉN történik (egyszer mindenképpen lefut).
Mit csinál ez a kód? "test eax, eax" -> "jz label"
Megvizsgálja, hogy EAX értéke nulla-e (anélkül, hogy módosítaná).
Ha EAX = 5 és EBX = 5, mi lesz az eredménye a "CMP EAX, EBX" után a ZF (Zero Flag)-nek?
ZF = 1 (mivel a kivonás eredménye 0).
Mi a különbség a "NEG EAX" és a "NOT EAX" között?
A NOT csak a biteket fordítja meg (1-es komplemens), a NEG matematikailag vált előjelet (2-es komplemens, azaz NOT + 1).
Mit csinál ez a kód? "push ebp" -> "mov ebp, esp"
Ez a függvények szabványos bevezetése (prológus): elmenti a hívó bázisát és beállítja az új veremkeretet.
Melyik utasítássorozat felel meg a "x = y" műveletnek (ahol x és y memóriaváltozók)?
mov eax, [y] -> mov [x], eax (Közvetlenül memória-memória másolás nem lehetséges!).
Hogyan tárolja a memóriában az x86 a 0x12345678 értéket (Little Endian)?
Fordított byte-sorrendben: 78 56 34 12.
Mit csinál ez a kód? "shl eax, 2"
Megszorozza az EAX értékét 4-gyel (2 a másodikon).
Mit csinál ez a kód? "shr eax, 1"
Elosztja az EAX értékét 2-vel (előjel nélküli osztás).
Melyik regisztert "rontja el" (módosítja) a MUL utasítás az EAX-en kívül?
Az EDX regisztert (ide kerül a szorzat felső része).
Mit jelent, ha a "JNZ" (Jump if Not Zero) utasítás ugrik?
Azt, hogy az előző művelet eredménye NEM nulla volt (ZF = 0).
Mi történik a veremmel a "RET" utasítás hatására?
A processzor kiveszi (POP) a visszatérési címet a verem tetejéről az EIP-be, és oda ugrik.
Melyik utasítás a C nyelvű "switch" szerkezet alapja assemblyben?
Gyakran egy "JMP" táblázat (Jump Table) vagy több "CMP / JE" sorozat.
Mit csinál ez a kód? "inc eax"
Megnöveli az EAX értékét 1-gyel (gyorsabb és rövidebb, mint az add eax, 1).
Mi a "Buffer Overflow" (puffer-túlcsordulás) assembly szintű oka?
Ha több adatot írunk a verembe (pl. egy lokális tömbbe), mint amennyi hely van, és felülírjuk a visszatérési címet.
Mit csinál ez a kód? "sub esp, 8" a függvény elején?
Helyet foglal a veremben lokális változóknak (8 bájtnyit).
Mit csinál a kód? "func: cmp edi, 0" -> "jl label" -> "mov eax, 1" -> "ret" -> "label: mov eax, -1" -> "ret"
Előjel-függvény (Signum): 1-et ad vissza ha pozitív/nulla, és -1-et ha negatív.
Melyik utasítás NEM módosítja a Flageket (jelzőbiteket)?
A MOV és a LEA (a legtöbb más, pl. ADD, SUB, AND, TEST módosítja).
Mit csinál ez a kód? "mov eax, 5" -> "mov ecx, 3" -> "xchg eax, ecx"
Megcseréli a két regiszter tartalmát (EAX lesz 3, ECX lesz 5).
Hogyan működik a CALL utasítás?
Elmenti a visszatérési címet (a következő utasítás címét) a verembe (PUSH EIP), majd elugrik a megadott címre.
Mi történik, ha egy függvényben több PUSH van, mint POP a RET előtt?
A verem "kiegyensúlyozatlan" lesz, a RET rossz címet vesz ki, és a program valószínűleg összeomlik (segfault).
Mit csinál a "test eax, 1" -> "jz paros" kódrészlet?
Megvizsgálja, hogy a szám páros-e (az utolsó bit 0). Ha páros, ugrik.
Melyik utasítás NEM végez írást a célregiszterbe: SUB vagy CMP?
A CMP (csak a flageket állítja).
Melyik utasítás NEM végez írást a célregiszterbe: AND vagy TEST?
A TEST (csak a flageket állítja).
Mekkora méretű adatot jelöl a "BYTE PTR"?
8 bit (1 bájt).
Mekkora méretű adatot jelöl a "WORD PTR"?
16 bit (2 bájt).
Mekkora méretű adatot jelöl a "DWORD PTR"?
32 bit (4 bájt / dupla szó).
Mit csinál a LOOP címke utasítás?
Csökkenti az ECX értékét 1-gyel, és ha az nem 0, visszaugrik a címkére (automatikus ciklusvezérlő).
Melyik regiszterpárban kell elhelyezni az osztandót 32 bites osztásnál (IDIV)?
Az EDX:EAX regiszterpárban (64 biten).
Mit jelent a [EAX] kifejezés (szögletes zárójelben)?
Az EAX-ben tárolt memóriacímen lévő értéket (dereferenciálás / pointer követés).
Mit csinál ez a kód? "mov eax, [ebp+8]"
Általában a függvény első paraméterét tölti be a veremből az EAX-be.
Mit csinál a NOP utasítás?
No Operation: Nem csinál semmit, csak időt/helyet foglal (pl. paddinghez vagy késleltetéshez).
Hogyan tárolja a számítógép a negatív egész számokat?
Kettes komplemens (Two's complement) formában.
Mit csinál a REP prefix (pl. REP MOVSB)?
Addig ismétli a string utasítást, amíg az ECX regiszter értéke 0 nem lesz.
Melyik regiszter az AX regiszter felső 8 bitje?
AH (Accumulator High).
Melyik regiszter az AX regiszter alsó 8 bitje?
AL (Accumulator Low).
Mit csinál ez a függvény? "cmp eax, ebx" -> "jge skip" -> "mov eax, ebx" -> "skip: ret"
Kiválasztja a két szám közül a nagyobbat (Maximum kiválasztás). Ha EAX < EBX, felülírja EAX-et EBX-szel.
Mi a különbség a "JMP" és a "CALL" között?
A JMP csak odaugrik (nem tud visszajönni), a CALL elmenti a visszatérési címet a verembe, hogy a RET utasítással vissza lehessen térni.
Igaz vagy Hamis: A verem (Stack) LIFO (Last In First Out) szerkezetű?
Igaz.
Melyik utasítás fordítja meg az összes bitet (0->1, 1->0) egy regiszterben?
NOT.
Melyik utasítás váltja meg egy szám előjelét (pl. 5-ből -5)?
NEG (ez matematikailag: NOT + 1).
Mit csinál a "sub eax, eax"?
Nullázza az EAX regisztert (ugyanaz a hatása, mint a xor eax, eax).
Mit csinál az LDS utasítás (az LES párja)?
Hasonló az LES-hez, de a távoli mutató szegmens részét a DS (Data Segment) regiszterbe tölti.
Melyik két Flag-et törli (állítja 0-ra) mindig az AND utasítás?
Az Overflow Flag-et (OF) és a Carry Flag-et (CF).
Lehetséges-e az "add [var1], [var2]" utasítás (memória hozzáadása memóriához)?
Nem, az x86 utasításoknál egyszerre legfeljebb egy operandus lehet memória.
Mit jelent az LEA utasítás nevében az "Effective Address"?
Azt a tényleges memóriacímet, amit a processzor kiszámol az alapcím, index és eltolás alapján.
Mit csinál a CDQE utasítás (64 bites módban)?
A CDQ "nagytestvére": Az EAX (32 bit) előjelét terjeszti ki az RAX (64 bit) regiszterre.
Melyik utasítás a "párja" a JGE (Jump Greater or Equal) utasításnak a SET utasítások közül?
A SETGE (Set if Greater or Equal) - 1-re állítja a bájtot, ha a feltétel igaz.
Mikor használunk MUL-t és mikor IMUL-t?
MUL: Előjel nélküli (unsigned) számokhoz. IMUL: Előjeles (signed) számokhoz.
Melyik flag jelzi, ha egy művelet eredménye negatív lett (signed értelmezésben)?
SF (Sign Flag).
Mi a különbség a "JMP" és a feltételes ugrások (pl. JZ) hatóköre között régebbi processzoroknál?
A feltételes ugrások gyakran csak rövid távolságra (short jump) tudtak ugrani, míg a JMP messzebbre is.
Miért nevezzük az EAX, EBX, ECX, EDX regisztereket "általános célúnak"?
Mert bár vannak speciális feladataik (pl. ECX ciklushoz), a legtöbb utasításban bármelyiket használhatjuk adattárolásra.