diff --git a/src/convert.asm b/src/convert.asm index d5d5e5e..97a6758 100644 --- a/src/convert.asm +++ b/src/convert.asm @@ -2,6 +2,7 @@ section .bss cnvtBuff resb 21 + cnvtBuffRev resb 21 section .text global dec2str global udec2str @@ -18,9 +19,10 @@ section .text ; rsi* Points to cnvtBuff for writing characters ; r8* Dividor for div dec2str: - lea rsi, [rel cnvtBuff] + lea rsi, [rel cnvtBuffRev] test rdi, rdi jnz .notZero + lea rsi, [rel cnvtBuff] mov byte [rsi], '0' mov byte [rsi+1], EOS jmp .quit @@ -38,20 +40,26 @@ dec2str: mov r8, 10 div r8 add rdx, '0' - push rdx + mov [rsi], dl + inc rsi inc rcx test rax, rax jnz .convert test dil, dil jz .makeString - push byte '-' + mov [rsi], byte '-' inc rcx + inc rsi .makeString: - pop rdx - mov byte [rsi], dl - inc rsi - loop .makeString - mov byte [rsi], EOS + lea rdi, [rel cnvtBuff] + dec rsi + .makeStringLoop: + mov al, [rsi] + mov [rdi], al + inc rdi + dec rsi + loop .makeStringLoop + mov byte [rdi], EOS .quit: lea rax, [rel cnvtBuff] @@ -68,9 +76,10 @@ dec2str: ; rsi* Points to cnvtBuff for writing characters ; r8* Dividor for div udec2str: - lea rsi, [rel cnvtBuff] + lea rsi, [rel cnvtBuffRev] test rdi, rdi jnz .notZero + lea rsi, [rel cnvtBuff] mov byte [rsi], '0' mov byte [rsi+1], EOS jmp .quit @@ -83,16 +92,20 @@ udec2str: mov r8, 10 div r8 add rdx, '0' - push rdx + mov [rsi], dl + inc rsi inc rcx test rax, rax jnz .convert - .makeString: - pop rdx - mov byte [rsi], dl - inc rsi - loop .makeString - mov byte [rsi], EOS + lea rdi, [rel cnvtBuff] + dec rsi + .makeStringLoop: + mov al, [rsi] + mov [rdi], al + inc rdi + dec rsi + loop .makeStringLoop + mov byte [rdi], EOS .quit: lea rax, [rel cnvtBuff] @@ -112,9 +125,10 @@ udec2str: ; r11* Amount to add to number (for ASCII conversion, lowercase or uppercase) hex2str: mov r9, rsi - lea rsi, [rel cnvtBuff] + lea rsi, [rel cnvtBuffRev] test rdi, rdi jnz .notZero + lea rsi, [rel cnvtBuff] mov word [rsi], '0x' mov byte [rsi + 2], '0' mov byte [rsi + 3], EOS @@ -141,19 +155,23 @@ hex2str: .num: add rdx, '0' .push: - push rdx + mov [rsi], dl + inc rsi inc rcx test rax, rax jnz .convert - mov word [rsi], '0x' - add rsi, 2 + mov word [rsi], 'x0' + inc rsi + add rcx, 2 + lea rdi, [rel cnvtBuff] .makeString: - pop rdx - mov byte [rsi], dl - inc rsi + mov al, [rsi] + mov [rdi], al + inc rdi + dec rsi loop .makeString - mov byte [rsi], EOS + mov byte [rdi], EOS .quit: lea rax, [rel cnvtBuff]