Compare commits

...

3 Commits

Author SHA1 Message Date
33175e2c19 Subroutines 2025-10-07 22:18:26 -04:00
5685ac6e67 Calculate string length 2025-10-07 20:29:32 -04:00
3360f1976c Proper program exit 2025-10-07 17:03:59 -04:00

View File

@@ -4,14 +4,36 @@
; Run with: ./helloworld
SECTION .data
msg db 'Hello World!', 0Ah ; assign msg variable with your message string
msg db 'Hello, brave new world!', 0Ah ; assign msg variable with your message string
SECTION .text
global _start
_start:
mov edx, 13 ; number of bytes to write - one for each letter plus 0Ah (line feed character)
mov ecx, msg ; move the memory address of our message string into ecx
mov ebx, 1 ; write to the STDOUT file
mov eax, 4 ; invoke SYS_WRITE (kernel opcode 4)
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