Skip navigation

2. Kis ZH

Tömbök indexelése

A tömbök indexelésekor figyelembe kell vennünk az elemek méretét is.

Ha pl.:

.data
TOMB WORD 181, 182, 183, 184, 185

akkor a 182-es értékű második elem kivétele:

    MOV     AX, [TOMB+2]      ; 2 byte-os eltolás

Adatok mérete

Fontos tudni az adatok méreteit:

  • DB - BYTE - SBYTE (8 BIT)
  • DW - WORD - SWORD (16 BIT)
  • DD - DWORD - SDWORD (32 BIT)

Adatmozgatásnál a méretek

Az adatok mozgatásánál általában ugyanakkora méretű adatokon kell végezni a műveleteket.

  • NEM TESZÜNK 8 BITES REGISZTERBE 16 BITES ADATTAGOT ÉS FORDÍTVA
  • NEM TESZÜNK 8 BITES REGISZTERBE 32 BITES ADATTAGOT ÉS FORDÍTVA
  • NEM TESZÜNK 16 BITES REGISZTERBE 32 BITES ADATTAGOT ÉS FORDÍTVA
  • NEM VÉGZÜNK MŰVELETEKET KÜLÖNBÖZŐ NAGYSÁGÚ REGISZTEREK KÖZÖTT NAGY ÁTLAGBAN

Kivétel:

  • A MOVZX, és MOVSX esetében a forrás határozottan kisebb, mint a cél!
  • Az osztásnál az osztandó mérete duplája az osztónak!

Adatok kiterjesztése

A CBW-nek, CWD-nek, CWDE-nek nincs operandusa

  • CBW: AL -> AX csak és kizárólag,
  • CWD: AX -> DX:AX csak és kizárólag,
  • CWDE: AX -> EAX csak és kizárólag.

Az adatok kiterjesztésének módja nem összekeverhető:

  • Előjeles számok a MOVSX-el, vagy a CBW/CWD/CWDE/CDQ-val,
  • Előjel nélküli számok a MOVZX-el, vagy a felső bitek kinullázásával.

Utasítások

Az előjel nélküli szorzásnak és az osztásnak csak egy operandusa van.

MUL
HA OP == 8 BIT, AL*OP -> AX
HA OP == 16 BIT, AX*OP -> DX:AX
HA OP == 32 BIT, EAX*OP -> EDX:EAX
DIV
HA OP == 8 BIT, AX/OP -> AL
AX%OP -> AH
HA OP == 16 BIT, DX:AX/OP -> AX
DX:AX%OP -> DX
HA OP == 32 BIT, EDX:EAX/OP -> EAX
EDX:EAX%OP -> EDX