Hello & Welcome to our community. Is this your first visit? Register

Page 1 of 2 12 LastLast
Results 1 to 15 of 19
  1. #1
    Alpha Member

    Rank
    Alpha Male
    Join Date
    Sep 2004
    Location
    Sydney NSW Aust
    Posts
    2,965
    Likes (Received)
    4

    Assembler Basic Guide

    This is a Tutorial my Programming Teacher gave to me at School and found it very very useful to learn the basics of Assembly. I Hope you like it. I couldnt find the name of the original author so sorry :(.

    Assembler

    Assembler is the start and the end of all programming languages. After all, all languages are translated to assembler. In most languages we deal with relatively clear syntaxes. However, it's a completely other story in assembler where we use abbreviations and numbers and where it all seems so weird

  2. #2
    Alpha Member

    Rank
    Alpha Male
    Join Date
    Sep 2004
    Location
    Sydney NSW Aust
    Posts
    2,965
    Likes (Received)
    4

    Continued

    ---------------------------------------------------------------------------------------------

    CALL (Call)
    Syntax: CALL something

    The instruction CALL pushes the RVA (Relative Virtual Address) of the instruction that
    follows the CALL to the stack and calls a sub program/procedure.

    CALL can be used in the following ways:

    CALL 404000 ;; MOST COMMON: CALL ADDRESS
    CALL EAX ;; CALL REGISTER - IF EAX WOULD BE 404000 IT WOULD BE SAME AS THE ONE ABOVE
    CALL DWORD PTR [EAX] ;; CALLS THE ADDRESS THAT IS STORED AT [EAX]
    CALL DWORD PTR [EAX+5] ;; CALLS THE ADDRESS THAT IS STORED AT [EAX+5]

    ---------------------------------------------------------------------------------------------

    CDQ (Convert DWord (4Byte) to QWord (8 Byte))
    Syntax: CQD

    CDQ is an instruction that always confuses newbies when it appears first time. It is
    mostly used in front of divisions and does nothing else then setting all bytes of EDX
    to the value of the highest bit of EAX. (That is: if EAX <80000000, then EDX will be
    00000000; if EAX >= 80000000, EDX will be FFFFFFFF).

    ---------------------------------------------------------------------------------------------

    CMP (Compare)
    Syntax: CMP dest, source

    The CMP instruction compares two things and can set the C/O/Z flags if the result fits.

    CMP EAX, EBX ;; compares eax and ebx and sets z-flag if they are equal
    CMP EAX,[404000] ;; compares eax with the dword at 404000
    CMP [404000],EAX ;; compares eax with the dword at 404000

    ---------------------------------------------------------------------------------------------

    DEC (Decrement)
    Syntax: DEC something

    dec is used to decrease a value (that is: value=value-1)

    dec can be used in the following ways:
    dec eax ;; decrease eax
    dec [eax] ;; decrease the dword that is stored at [eax]
    dec [401000] ;; decrease the dword that is stored at [401000]
    dec [eax+401000] ;; decrease the dword that is stored at [eax+401000]

    The dec instruction can set the Z/O flags if the result fits.

    ---------------------------------------------------------------------------------------------

    DIV (Division)
    Syntax: DIV divisor

    DIV is used to divide EAX through divisor (unsigned division). The dividend is always
    EAX, the result is stored in EAX, the modulo-value in EDX.

    An example:
    mov eax,64 ;; EAX = 64h = 100
    mov ecx,9 ;; ECX = 9
    div ecx ;; DIVIDE EAX THROUGH ECX

    After the division EAX = 100/9 = 0B and ECX = 100 MOD 9 = 1

    The div instruction can set the C/O/Z flags if the result fits.

    ---------------------------------------------------------------------------------------------

    IDIV (Integer Division)
    Syntax: IDIV divisor

    The IDIV works in the same way as DIV, but IDIV is a signed division.
    The idiv instruction can set the C/O/Z flags if the result fits.

    ---------------------------------------------------------------------------------------------

    IMUL (Integer Multiplication)
    Syntax: IMUL value
    IMUL dest,value,value
    IMUL dest,value

    IMUL multiplies either EAX with value (IMUL value) or it multiplies two values and puts
    them into a destination register (IMUL dest, value, value) or it multiplies a register
    with a value (IMUL dest, value).

    If the multiplication result is too big to fit into the destination register, the
    O/C flags are set. The Z flag can be set, too.

    ---------------------------------------------------------------------------------------------

    INC (Increment)
    Syntax: INC register

    INC is the opposite of the DEC instruction; it increases values by 1.
    INC can set the Z/O flags.


    ---------------------------------------------------------------------------------------------

    INT
    Syntax: int dest

    Generates a call to an interrupt handler. The dest value must be an integer (e.g., Int 21h).
    INT3 and INTO are interrupt calls that take no parameters but call the handlers for
    interrupts 3 and 4, respectively.

    ---------------------------------------------------------------------------------------------

    JUMPS
    These are the most important jumps and the condition that needs to be met, so that
    they'll be executed (Important jumps are marked with * and very important with **):

    JA* - Jump if (unsigned) above - CF=0 and ZF=0
    JAE - Jump if (unsigned) above or equal - CF=0
    JB* - Jump if (unsigned) below - CF=1
    JBE - Jump if (unsigned) below or equal - CF=1 or ZF=1
    JC - Jump if carry flag set - CF=1
    JCXZ - Jump if CX is 0 - CX=0
    JE** - Jump if equal - ZF=1
    JECXZ - Jump if ECX is 0 - ECX=0
    JG* - Jump if (signed) greater - ZF=0 and SF=OF (SF = Sign Flag)
    JGE* - Jump if (signed) greater or equal - SF=OF
    JL* - Jump if (signed) less - SF != OF (!= is not)
    JLE* - Jump if (signed) less or equal - ZF=1 and OF != OF
    JMP** - Jump - Jumps always
    JNA - Jump if (unsigned) not above - CF=1 or ZF=1
    JNAE - Jump if (unsigned) not above or equal - CF=1
    JNB - Jump if (unsigned) not below - CF=0
    JNBE - Jump if (unsigned) not below or equal - CF=0 and ZF=0
    JNC - Jump if carry flag not set - CF=0
    JNE** - Jump if not equal - ZF=0
    JNG - Jump if (signed) not greater - ZF=1 or SF!=OF
    JNGE - Jump if (signed) not greater or equal - SF!=OF
    JNL - Jump if (signed) not less - SF=OF
    JNLE - Jump if (signed) not less or equal - ZF=0 and SF=OF
    JNO - Jump if overflow flag not set - OF=0
    JNP - Jump if parity flag not set - PF=0
    JNS - Jump if sign flag not set - SF=0
    JNZ - Jump if not zero - ZF=0
    JO - Jump if overflow flag is set - OF=1
    JP - Jump if parity flag set - PF=1
    JPE - Jump if parity is equal - PF=1
    JPO - Jump if parity is odd - PF=0
    JS - Jump if sign flag is set - SF=1
    JZ - Jump if zero - ZF=1

    ---------------------------------------------------------------------------------------------

    LEA (Load Effective Address)
    Syntax: LEA dest,src

    LEA can be treated the same way as the MOV instruction. It isn't used too much for its
    original function, but more for quick multiplications like this:

    lea eax, dword ptr [4*ecx+ebx]
    which gives eax the value of 4*ecx+ebx

    ---------------------------------------------------------------------------------------------

    MOV (Move)
    Syntax: MOV dest,src

    This is an easy to understand instruction. MOV copies the value from src to dest and src
    stays what it was before.

    There are some variants of MOV:

    MOVS/MOVSB/MOVSW/MOVSD EDI, ESI: Those variants copy the byte/word/dword ESI points to,
    to the space EDI points to.

    MOVSX: MOVSX expands Byte or Word operands to Word or Dword size and keeps the sign of the
    value.

    MOVZX: MOVZX expands Byte or Word operands to Word or Dword size and fills the rest of the
    space with 0.

    ---------------------------------------------------------------------------------------------

    MUL (Multiplication)
    Syntax: MUL value

    This instruction is the same as IMUL, except that it multiplies unsigned. It can set the
    O/Z/F flags.

    ---------------------------------------------------------------------------------------------

    NOP (No Operation)
    Syntax: NOP

    This instruction does absolutely nothing
    That's the reason why it is used so often in reversing ;)

    ---------------------------------------------------------------------------------------------

    OR (Logical Inclusive Or)
    Syntax: OR dest,src

    The OR instruction connects two values using the logical inclusive or.
    This instruction clears the O-Flag and the C-Flag and can set the Z-Flag.

    To understand OR better, consider those two binary values:

    1001010110
    0101001101

    If you OR them, the result is 1101011111

    Only when there are two 0 on top of each other, the resulting bit is 0. Else the resulting
    bit is 1. You can use calc.exe to calculate OR. I hope you understand why, else
    write down a value on paper and try ;)

    ---------------------------------------------------------------------------------------------

    POP
    Syntax: POP dest

    POP loads the value of byte/word/dword ptr [esp] and puts it into dest. Additionally it
    increases the stack by the size of the value that was popped of the stack, so that the next
    POP would get the next value.

    ---------------------------------------------------------------------------------------------

    PUSH
    Syntax: PUSH operand

    PUSH is the opposite of POP. It stores a value on the stack and decreases it by the size
    of the operand that was pushed, so that ESP points to the value that was PUSHed.

    ---------------------------------------------------------------------------------------------

    REP/REPE/REPZ/REPNE/REPNZ
    Syntax: REP/REPE/REPZ/REPNE/REPNZ ins

    Repeat Following String Instruction: Repeats ins until CX=0 or until indicated condition
    (ZF=1, ZF=1, ZF=0, ZF=0) is met. The ins value must be a string operation such as CMPS, INS,
    LODS, MOVS, OUTS, SCAS, or STOS.

    ---------------------------------------------------------------------------------------------

    RET (Return)
    Syntax: RET
    RET digit

    RET does nothing but return from a part of code that was reached using a CALL instruction.
    RET digit cleans the stack before it returns.

    ---------------------------------------------------------------------------------------------

    SUB (Subtraction)
    Syntax: SUB dest,src

    SUB is the opposite of the ADD command. It subtracts the value of src from the value of
    dest and stores the result in dest.

    SUB can set the Z/O/C flags.

    ---------------------------------------------------------------------------------------------

    TEST
    Syntax: TEST operand1, operand2

    This instruction is in 99% of all cases used for "TEST EAX, EAX". It performs a Logical
    AND(AND instruction) but does not save the values. It only sets the Z-Flag, when EAX is 0
    or clears it, when EAX is not 0. The O/C flags are always cleared.

    ---------------------------------------------------------------------------------------------

    XOR
    Syntax: XOR dest,src

    The XOR instruction connects two values using logical exclusive OR (remember OR uses
    inclusive OR).

    This instruction clears the O-Flag and the C-Flag and can set the Z-Flag.
    To understand XOR better, consider those two binary values:

    1001010110
    0101001101

    If you OR them, the result is 1100011011

    When two bits on top of each other are equal, the resulting bit is 0. Else the resulting
    bit is 1. You can use calc.exe to calculate XOR.
    The most often seen use of XOR is

  3. #3
    Member of M.A.G.E.S

    Rank
    True Member
    Join Date
    Feb 2005
    Location
    UK, Midlands, Leicestershire
    Posts
    352
    Likes (Received)
    0
    Fantastic guide 9/10 ;)
    Join M.A.G.E.S (Mmorpgers Against Gigantic Exp Servers)
    Email the founder matt@forsaken-mu.net.
    You can only help someone if they are prepared to help themself, no matter how much of a friend they are..
    Carp who swim over the dragons gate them themselves become dragons.
    To have faith in your own abilities, you must have first faith in others abilities

  4. #4
    Alpha Member ringmaup's Avatar

    Rank
    Alpha Male
    Join Date
    Sep 2005
    Location
    nottingham
    Posts
    2,031
    Likes (Received)
    0
    cool guide 10/10 where to download :D?

  5. #5
    Alpha Member

    Rank
    Alpha Male
    Join Date
    Sep 2004
    Location
    Sydney NSW Aust
    Posts
    2,965
    Likes (Received)
    4
    What do you mean by download?

  6. #6
    KearTS hacker_kts's Avatar

    Rank
    Alpha Male
    Join Date
    Aug 2004
    Location
    新加坡
    Posts
    2,161
    Likes (Received)
    1
    He wanted to download this guide, but he don't know how.
    Btw.. Excellent guide, thank you !
    P.S : Try to print this thread lol. :P
    柷人为快乐知本(:
    I don't give support through PM.

  7. #7
    Account Upgraded | Title Enabled! Nick's Avatar

    Rank
    True Member
    Join Date
    Oct 2005
    Location
    New york
    Posts
    327
    Likes (Received)
    0
    Great guide. :)

  8. #8
    Hardcore Member

    Rank
    Member
    Join Date
    Oct 2005
    Posts
    130
    Likes (Received)
    1
    9.9/10

    Small typo:
    • MEGABYTE - Again, not just 1 million bytes, but 1024*1024 or 1,048,578 bytes.

    it's really 1,048,576 or 2^20

    Other than that, good guide :-)

  9. #9
    Nasty By Nature. Mattio's Avatar

    Rank
    Gamma
    Join Date
    Dec 2004
    Location
    Clutchin Dutch
    Posts
    3,365
    Likes (Received)
    20
    You surely didn't write all that? And. . . Wow. . .

    -Mattio

  10. #10
    Bungee Jump Fix karak's Avatar

    Rank
    True Member
    Join Date
    May 2004
    Location
    In WonderLand
    Posts
    225
    Likes (Received)
    6
    :O

    thx , that guide cleared me some doubts about some registers...

  11. #11
    Coder Mod [N]asser's Avatar

    Rank
    True Member
    Join Date
    Nov 2004
    Posts
    1,045
    Likes (Received)
    0
    Awesome guide. This deserves a sticky.

    EDIT: 1000th post :O YAY

    [N]asser` ~ Out


  12. #12
    Alpha Member ringmaup's Avatar

    Rank
    Alpha Male
    Join Date
    Sep 2005
    Location
    nottingham
    Posts
    2,031
    Likes (Received)
    0
    i meen the compiler coder

  13. #13
    Registered

    Rank
    Member
    Join Date
    May 2005
    Location
    asia
    Posts
    6
    Likes (Received)
    0
    Cool guide aseembler too hard to learn way to go Hybrid your a Hybrid

  14. #14
    Alpha Member ringmaup's Avatar

    Rank
    Alpha Male
    Join Date
    Sep 2005
    Location
    nottingham
    Posts
    2,031
    Likes (Received)
    0
    hardest lang to learn?

  15. #15
    :drools: GriffinHeart's Avatar

    Rank
    Alpha Male
    Join Date
    Sep 2003
    Location
    With u :)
    Posts
    1,508
    Likes (Received)
    5
    Quote Originally Posted by ringmaup
    hardest lang to learn?
    damn sure it is, the only thing lower level than that is programing in hexa directly (btw you can do it if you know the op code of each instruction), you need to understand how a processor works in order to fully enjoy Assembly, every thing you can do with any other language you can do with assembly, but that is to much of effort (damn LOADS of effort).



 

 
Page 1 of 2 12 LastLast

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HostKey
Sponsored by HostKey , secured by Incapsula and mods by DBTech.
All times are GMT +1. The time now is 01:23 AM.
Powered by vBulletin® Copyright , Jelsoft Enterprises Ltd.