Made __uitoa comply with our calling convention

Changed __uitoa order of arguments from
  src,base,target
to
  src,target,base
Also returns target in EAX
This commit is contained in:
Jarkko Toivanen 2024-08-17 20:21:04 +03:00
parent 0d9fcf5ae4
commit f9e2dc33e9
Signed by: jt
GPG key ID: 9151B109B73ECAD5
2 changed files with 35 additions and 31 deletions

View file

@ -1,8 +1,12 @@
;; Modified from: https://gist.github.com/SplittyDev/8e728627012e57ac0deac196660014fb ;; Modified from: https://gist.github.com/SplittyDev/8e728627012e57ac0deac196660014fb
; __itoa(src int, target addr, base)
;target address returned in EAX
;EBX, EBP, ESP preserved as our calling convention,
;refer to docs or something
; ;
; Routine to convert a 32-bit integer to a string. ; Routine to convert a 32-bit integer to a string.
; Registers are preserved.
; ;
; EAX: Source integer ; EAX: Source integer
; EBX: Target address ; EBX: Target address
@ -26,9 +30,13 @@
; ECX: Target address (active) ; ECX: Target address (active)
; EDX: Target address (temporary) ; EDX: Target address (temporary)
; ;
; return:
; put original target at EAX
; (we trust this blindly)
macro kuitoa src*, dest*, base* { macro kuitoa src*, dest*, base* {
push dest
push base push base
push dest
push src push src
call __uitoa call __uitoa
add esp, 3*4 add esp, 3*4
@ -39,14 +47,11 @@ __uitoa:
push ebp push ebp
mov ebp, esp mov ebp, esp
push eax
push ebx push ebx
push ecx
push edx
mov eax, [ebp+8] mov eax, [ebp+8]
mov ecx, [ebp+12] mov ebx, [ebp+12]
mov ebx, [ebp+16] mov ecx, [ebp+16]
mov edx, ecx mov edx, ecx
mov ecx, ebx mov ecx, ebx
@ -83,11 +88,9 @@ __uitoa:
dec ecx dec ecx
jmp .reverse jmp .reverse
.end: .end:
pop edx
pop ecx
pop ebx pop ebx
pop eax
mov eax, [ebp+12] ; Return target address
pop ebp pop ebp
ret ret

View file

@ -52,45 +52,46 @@ start:
add esp, 2*4 add esp, 2*4
sub esp, 36 ;Reserve stack for return sub esp, 36 ;Reserve stack for return
kuitoa [mbootinfo.fb_addr], esp, 16 mov ebx, esp ;Store str buff addr
serw stuff.fbaddrmsgpfx, esp
kuitoa [mbootinfo.fb_width], esp, 10 kuitoa [mbootinfo.fb_addr], ebx, 16
serw stuff.fbdimensionsmsgpfx, esp, stuff.x serw stuff.fbaddrmsgpfx, ebx
kuitoa [mbootinfo.fb_height], esp, 10 kuitoa [mbootinfo.fb_width], ebx, 10
serw esp, stuff.x serw stuff.fbdimensionsmsgpfx, ebx, stuff.x
kuitoa [mbootinfo.fb_height], ebx, 10
serw ebx, stuff.x
movzx eax, byte [mbootinfo.fb_bpp] movzx eax, byte [mbootinfo.fb_bpp]
kuitoa eax, esp, 10 kuitoa eax, ebx, 10
serw esp serw ebx
movzx eax, byte [mbootinfo.fb_rpos] movzx eax, byte [mbootinfo.fb_rpos]
kuitoa eax, esp, 10 kuitoa eax, ebx, 10
serw stuff.rpostxt, esp serw stuff.rpostxt, ebx
movzx eax, byte [mbootinfo.fb_gpos] movzx eax, byte [mbootinfo.fb_gpos]
kuitoa eax, esp, 10 kuitoa eax, ebx, 10
serw stuff.gpostxt, esp serw stuff.gpostxt, ebx
movzx eax, byte [mbootinfo.fb_bpos] movzx eax, byte [mbootinfo.fb_bpos]
kuitoa eax, esp, 10 kuitoa eax, ebx, 10
serw stuff.bpostxt, esp serw stuff.bpostxt, ebx
movzx eax, byte [mbootinfo.fb_rmasksize] movzx eax, byte [mbootinfo.fb_rmasksize]
kuitoa eax, esp, 10 kuitoa eax, ebx, 10
serw stuff.rmasksizetxt, esp serw stuff.rmasksizetxt, ebx
movzx eax, byte [mbootinfo.fb_gmasksize] movzx eax, byte [mbootinfo.fb_gmasksize]
kuitoa eax, esp, 10 kuitoa eax, ebx, 10
serw stuff.gmasksizetxt, esp serw stuff.gmasksizetxt, ebx
movzx eax, byte [mbootinfo.fb_bmasksize] movzx eax, byte [mbootinfo.fb_bmasksize]
kuitoa eax, esp, 10 kuitoa eax, ebx, 10
serw stuff.bmasksizetxt, esp serw stuff.bmasksizetxt, ebx
add esp, 36 ;Clean reserved uitoa return string from stack add esp, 36 ;Clean reserved uitoa return string from stack