COMPARISON AND JUMPS

In C, I use conditional statements to make decisions based on the value of a variable. In assembly, I use comparison and jump instructions to achieve the same result. These instructions compare two values and then jump to a different part of the program based on the result of the comparison.


CMP Operation

The cmp instruction is used to perform comparison operations. It compares the values of two operands and sets the status flags in the EFLAGS register based on the result of the comparison.

section .text
    .global _start

_start:
    mov eax, 5      ; Load value 5 into eax
    cmp eax, 10     ; Compare eax with 10

In this example, I compare the value in eax with 10. The cmp instruction subtracts the second operand 10 from the first operand 5 but does not store the result. Instead, it sets the status flags in the EFLAGS register based on the result of the comparison which is 5 - 10 = -5.


JMP Operation

The jmp instruction is used to perform unconditional jumps. It transfers control to a different part of the program based on the specified label or memory address.

section .text
    .global _start

_start:
    mov eax, 5      ; Load value 5 into eax
    cmp eax, 10     ; Compare eax with 10
    jne not_equal   ; Jump to 'not_equal' if not equal
    jmp equal       ; Jump to 'equal' if equal

not_equal:
    mov ebx, 10     ; Load value 10 into ebx
    jmp end

equal:
    mov ebx, 5      ; Load value 5 into ebx

end:
    int 80h         ; End of the program

In this example, I compare the value in eax with 10. If the values are not equal, I jump to the not_equal label. If the values are equal, I jump to the equal label. Finally, I reach the end label, which signifies the end of the program.


Conditional Jumps Table

Here is a table of common conditional jumps in assembly language:

Instruction Description Condition
je Jump if Equal ZF = 1
jne Jump if Not Equal ZF = 0
jg Jump if Greater ZF = 0 and SF = OF
jge Jump if Greater or Equal SF = OF
jl Jump if Less SF ≠ OF
jle Jump if Less or Equal ZF = 1 or SF ≠ OF
ja Jump if Above CF = 0 and ZF = 0
jae Jump if Above or Equal CF = 0
jb Jump if Below CF = 1
jbe Jump if Below or Equal CF = 1 or ZF = 1

SF = Sign Flag OF = Overflow Flag ZF = Zero Flag CF = Carry Flag