assembly-playground/x86/maximum/intel/maximum.asm

34 lines
1.0 KiB
NASM
Raw Permalink Normal View History

2024-06-10 18:54:05 +07:00
# edi = index of data_items
# ebx = largest data item found
# eax = current data item
.global _start
.intel_syntax noprefix
.section .text
_start:
mov edi, 0 # copy 0 into edi - first addresss
mov eax, [data_items + edi * 4] # move the first number (edi * 4) to eax
jmp start_loop
2024-06-10 18:59:27 +07:00
mov ebx, eax # move ebx to eax
2024-06-10 18:54:05 +07:00
start_loop:
cmp eax, 0 # check if eax is 0, return value stored in EFLAGS register
je loop_exit # checks EFLAGS if cmp is equal
inc edi # move to the next number (increase index which is edi)
mov eax, [data_items + edi * 4] # move the next number (edi * 4) to eax
cmp eax, ebx # compare largest item (ebx) to current item (eax)
jle start_loop # if eax is less than ebx - jump to start_loop
mov ebx, eax # move eax to ebx
jmp start_loop # jump back to start_loop
loop_exit:
mov eax, 1 # move '1' into eax (exit syscall)
int 0x80 # call kernel interrupt to exit program
.section .data
data_items:
.long 3, 67, 34, 222, 45, 75, 54, 34, 44, 33, 22, 11, 66, 0