Returning back to asm and coding in general, got an issue with what's probably an obvious mistake but I'm stumped non-the-less.
kputs("Testing");
;
; Print a single character to screen
;
kputchar:
; assumes the register ax will contain the character to print
mov edx, [SCREEN] ; edx = screen
; or ax and colour to give a word correct for screen memory
; E.G. character 'A' (0x41) and colour black background white text
; (0x0F00) becomes 0x0F41
or ax, [COLOUR]
mov WORD[edx], ax ; copy ax to memory pointed to by edx
; increment edx by 2 (I.E. point framebuffer to
; place in memory 2 bytes higher than before
add edx, 2
mov [SCREEN], edx
ret
;
; Print a string to screen
;
kputs:
; get our first argument address into esi
push ebp
mov ebp, esp
mov esi, [ebp + 8]
; assumes string address was moved to esi correctly
xor eax, eax ; eax = 0
lodsb ; load next character
; if al = 0 end
or al, al
jz .kputsend
;mov ax, 'A'
call kputchar
jmp kputs
.kputsend:
call knewline
pop ebp
ret
I get a string of random ASCII characters, uncommenting mov ax, 'A' gives me a line of A's so I know my code works fine, it's obviously just something I'm doing wrong grabbing the argument off the stack.
It might be worth noting I have no debug tools that I know of available as I'm not doing this inside any operating system, hence why I'm asking rather than debugging.
If anyone can point out the mistake for me I'd be really happy!