External include files

This commit is contained in:
2025-10-12 21:29:22 -04:00
parent 33175e2c19
commit 510c21ae4e
4 changed files with 52 additions and 36 deletions

View File

@@ -1,6 +1,7 @@
.PHONY: all clean
SRC := $(wildcard *.asm)
SRC := $(filter-out functions.asm, $(SRC))
OBJDIR := build
OBJS := $(SRC:%.asm=$(OBJDIR)/%.o)
BINS := $(SRC:%.asm=$(OBJDIR)/%)

View File

@@ -1,3 +1,3 @@
# asm
Build x86_64 assembly examples from [asmtutor.com](https://asmtutor.com)
x86 assembly exercises using [asmtutor.com](https://asmtutor.com)

39
functions.asm Normal file
View File

@@ -0,0 +1,39 @@
SYS_EXIT equ 1
SYS_WRITE equ 4
STDOUT equ 1
strlen:
push ebx
mov ebx, eax
nextchar:
cmp byte[eax], 0
jz finished
inc eax
jmp nextchar
finished:
sub eax, ebx
pop ebx
ret
print:
push ebx
push ecx
push edx
mov ebx, eax
call strlen
mov edx, eax
mov ecx, ebx
mov ebx, STDOUT
mov eax, SYS_WRITE
int 0x80
pop edx
pop ecx
pop ebx
ret
quit:
mov ebx, 0
mov eax, SYS_EXIT
int 0x80

View File

@@ -1,39 +1,15 @@
; Hello World Program - asmtutor.com
; Compile with: nasm -f elf helloworld.asm
; Link with (64 bit systems require elf_i386 option): ld -m elf_i386 helloworld.o -o helloworld
; Run with: ./helloworld
%include 'functions.asm'
SECTION .data
msg db 'Hello, brave new world!', 0Ah ; assign msg variable with your message string
section .data
msg1 db "Hello, world!", 0Ah
msg2 db "Display a line of text", 0Ah
SECTION .text
global _start
section .text
global _start
_start:
mov eax, msg
call strlen
mov edx, eax ; our function leaves the result in EAX
mov ecx, msg
mov ebx, 1 ; STDOUT
mov eax, 4 ; SYS_WRITE
int 80h
mov ebx, 0 ; return 0
mov eax, 1 ; SYS_EXIT
int 80h
strlen:
push ebx ; preserve EBX while we use in this function
mov ebx, eax ; move the address in EAX into EBX
nextchar:
cmp byte [eax], 0 ; compare the byte pointed to by EAX at this address against zero (Zero is an end of string delimiter)
jz finished ; jump (if the zero flagged has been set) to the point in the code labeled 'finished'
inc eax ; increment the address in EAX by one byte (if the zero flagged has NOT been set)
jmp nextchar ; jump to the point in the code labeled 'nextchar'
finished:
sub eax, ebx
pop ebx
ret
mov eax, msg1
call print
mov eax, msg2
call print
call quit