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

Last change on this file since 620 was 619, checked in by Tomi Tilli, 3 years 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.