source: xtideuniversalbios/trunk/Assembly_Library/Src/String/String.asm @ 619

Last change on this file since 619 was 619, checked in by aitotat, 11 months ago

Fixed return register info on two string library functions. No changes to code.

File size: 3.4 KB
Line 
1; Project name  :   Assembly Library
2; Description   :   Functions for handling characters.
3
4;
5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
7;
8; This program is free software; you can redistribute it and/or modify
9; it under the terms of the GNU General Public License as published by
10; the Free Software Foundation; either version 2 of the License, or
11; (at your option) any later version.
12;
13; This program is distributed in the hope that it will be useful,
14; but WITHOUT ANY WARRANTY; without even the implied warranty of
15; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16; GNU General Public License for more details.
17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
18;
19
20; Section containing code
21SECTION .text
22
23;--------------------------------------------------------------------
24; String_ConvertDSSItoLowerCase
25;   Parameters:
26;       DS:SI:  Ptr to string to convert
27;   Returns:
28;       CX:     Number of characters processed
29;   Corrupts registers:
30;       Nothing
31;--------------------------------------------------------------------
32ALIGN STRING_JUMP_ALIGN
33String_ConvertDSSItoLowerCase:
34    push    dx
35    push    ax
36
37    mov     dx, StringProcess_ConvertToLowerCase
38    call    StringProcess_DSSIwithFunctionInDX
39
40    pop     ax
41    pop     dx
42    ret
43
44
45;--------------------------------------------------------------------
46; String_ConvertWordToAXfromStringInDSSIwithBaseInBX
47;   Parameters:
48;       BX:     Numeric base (10 or 16)
49;       DS:SI:  Ptr to string to convert
50;   Returns:
51;       AX:     Word converted from string
52;       CX:     Number of characters processed
53;       CF:     Cleared if successful
54;               Set if error during conversion
55;   Corrupts registers:
56;       Nothing
57;--------------------------------------------------------------------
58ALIGN STRING_JUMP_ALIGN
59String_ConvertWordToAXfromStringInDSSIwithBaseInBX:
60    push    di
61    push    dx
62
63    xor     di, di
64    mov     dx, StringProcess_ConvertToWordInDIWithBaseInBX
65    call    StringProcess_DSSIwithFunctionInDX
66    xchg    ax, di
67
68    pop     dx
69    pop     di
70    ret
71
72
73;--------------------------------------------------------------------
74; String_CopyDSSItoESDIandGetLengthToCX
75;   Parameters:
76;       DS:SI:  Ptr to source NULL terminated string
77;       ES:DI:  Ptr to destination buffer
78;   Returns:
79;       CX:     Number of characters copied
80;       SI,DI:  Updated by CX characters
81;   Corrupts registers:
82;       Nothing
83;--------------------------------------------------------------------
84ALIGN STRING_JUMP_ALIGN
85String_CopyDSSItoESDIandGetLengthToCX:
86    push    ax
87
88    xor     cx, cx
89ALIGN STRING_JUMP_ALIGN
90.CopyNextCharacter:
91    lodsb                       ; Load from DS:SI to AL
92    test    al, al              ; NULL to end string?
93    jz      SHORT .EndOfString
94    stosb                       ; Store from AL to ES:DI
95    inc     cx                  ; Increment number of characters written
96    jmp     SHORT .CopyNextCharacter
97
98ALIGN STRING_JUMP_ALIGN
99.EndOfString:
100    pop     ax
101    ret
102
103
104;--------------------------------------------------------------------
105; String_GetLengthFromDSSItoCX
106;   Parameters:
107;       DS:SI:  Ptr to NULL terminated string
108;   Returns:
109;       CX:     String length in characters
110;   Corrupts registers:
111;       Nothing
112;--------------------------------------------------------------------
113ALIGN STRING_JUMP_ALIGN
114String_GetLengthFromDSSItoCX:
115    push    ax
116    push    si
117
118    call    Registers_ExchangeDSSIwithESDI
119    xor     ax, ax      ; Find NULL
120    mov     cx, -1      ; Full segment if necessary
121    repne scasb
122    mov     cx, di
123    call    Registers_ExchangeDSSIwithESDI
124
125    pop     si
126    stc
127    sbb     cx, si      ; Subtract NULL
128    pop     ax
129    ret
Note: See TracBrowser for help on using the repository browser.