This commit is contained in:
Win 2024-06-11 13:42:37 +07:00
parent 98a8fa09a9
commit 51f7f0e9b3
7 changed files with 101 additions and 0 deletions

BIN
x86-64/hello Executable file

Binary file not shown.

19
x86-64/hello.asm Normal file
View File

@ -0,0 +1,19 @@
format ELF64 executable 3
segment readable executable
entry main
main:
lea rsi, [msg] ; load effective address of msg into rdi
mov rax, 0x01 ; move 1 into rax (write syscall)
mov rdi, 1 ; stdout = 1
mov rdx, 14 ; add length to rdx register
syscall
mov rdi, 0 ; 0 return code
mov rax, 0x3c # exit syscall number
syscall
segment readable writable
msg db "Hello world!", 10, 0

BIN
x86-64/minimum/minimum Executable file

Binary file not shown.

View File

@ -0,0 +1,47 @@
;###############################
;
; MINIMUM IN X64
;
;##############################
; =============================
; Find smallest number
; rax = current item
; rbx = index of data_items
; rcx = smallest item found
; rdi = return value
; =============================
format ELF64 executable 0
segment readable executable
entry main
main:
mov rbx, 0
mov rax, [data_items + rbx * 8]
mov rcx, rax
loop_through:
cmp rax, 255
je exit
inc rbx
mov rax, [data_items + rbx * 8]
cmp rax, rcx
jge loop_through
mov rcx, rax
jmp loop_through
print:
mov rax, 0x01
mov rdi, 1
mov esi
exit:
mov rax, 0x3c
syscall
segment readable writable
data_items dq 3, 67, 34, 222, 45, 75, 54, 34, 44, 33, 22, 11, 66, 255

3
x86/minimum/Makefile Normal file
View File

@ -0,0 +1,3 @@
default:
as minimum.asm --32 -o minimum.o
gcc -o minimum.elf -m32 minimum.o -nostdlib

32
x86/minimum/minimum.asm Normal file
View File

@ -0,0 +1,32 @@
# FIND SMALLEST NUMBER
# edi = index of data_items
# ebx = smallest item found
# eax = current item
.global _start
.intel_syntax noprefix
.section .text
_start:
mov edi, 0 # move 0 to edi (first index)
mov eax, [data_items + edi * 4] # move first number to eax
mov ebx, eax # move eax to ebx
start_loop:
cmp eax, 255 # compare eax to 0
je loop_exit # if eax == 0, jump to loop_exit
inc edi # increment edi by 1
mov eax, [data_items + edi * 4] # move next number to eax
cmp eax, ebx # compare smallest item (ebx) to current item (eax)
jge start_loop # if ebx is greater than eax, 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 to eax (syscall number)
int 0x80 # kernel interrupt
.section .data
data_items: .long 3, 67, 34, 222, 45, 75, 54, 34, 44, 33, 22, 11, 66, 255

BIN
x86/minimum/minimum.elf Executable file

Binary file not shown.