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

Last change on this file since 53 was 53, checked in by Tomi Tilli, 14 years ago

Changes to Assembly Library:
File Dialog is now compatible with new line splitting.

File size: 2.9 KB
Line 
1; File name : String.asm
2; Project name : Assembly Library
3; Created date : 12.7.2010
4; Last update : 13.10.2010
5; Author : Tomi Tilli
6; Description : Functions for handling characters.
7
8; Section containing code
9SECTION .text
10
11;--------------------------------------------------------------------
12; String_ConvertDSSItoLowerCase
13; Parameters:
14; DS:SI: Ptr to string to convert
15; Returns:
16; CX: Number of characters processed
17; SI: Updated
18; Corrupts registers:
19; Nothing
20;--------------------------------------------------------------------
21ALIGN JUMP_ALIGN
22String_ConvertDSSItoLowerCase:
23 push dx
24 push ax
25
26 mov dx, StringProcess_ConvertToLowerCase
27 call StringProcess_DSSIwithFunctionInDX
28
29 pop ax
30 pop dx
31 ret
32
33
34;--------------------------------------------------------------------
35; String_ConvertWordToAXfromStringInDSSIwithBaseInBX
36; Parameters:
37; BX: Numeric base (10 or 16)
38; DS:SI: Ptr to string to convert
39; Returns:
40; AX: Word converted from string
41; CX: Number of characters processed
42; SI: Updated
43; CF: Cleared if successfull
44; Set if error during conversion
45; Corrupts registers:
46; Nothing
47;--------------------------------------------------------------------
48ALIGN JUMP_ALIGN
49String_ConvertWordToAXfromStringInDSSIwithBaseInBX:
50 push di
51 push dx
52
53 xor di, di
54 mov dx, StringProcess_ConvertToWordInDIWithBaseInBX
55 call StringProcess_DSSIwithFunctionInDX
56 xchg ax, di
57
58 pop dx
59 pop di
60 ret
61
62
63;--------------------------------------------------------------------
64; String_CopyDSSItoESDIandGetLengthToCX
65; Parameters:
66; DS:SI: Ptr to source NULL terminated string
67; ES:DI: Ptr to destination buffer
68; Returns:
69; CX: Number of characters copied
70; SI,DI: Updated by CX characters
71; Corrupts registers:
72; Nothing
73;--------------------------------------------------------------------
74ALIGN JUMP_ALIGN
75String_CopyDSSItoESDIandGetLengthToCX:
76 push ax
77
78 xor cx, cx
79ALIGN JUMP_ALIGN
80.CopyNextCharacter:
81 lodsb ; Load from DS:SI to AL
82 test al, al ; NULL to end string?
83 jz SHORT .EndOfString
84 stosb ; Store from AL to ES:DI
85 inc cx ; Increment number of characters written
86 jmp SHORT .CopyNextCharacter
87
88ALIGN JUMP_ALIGN
89.EndOfString:
90 pop ax
91 ret
92
93
94;--------------------------------------------------------------------
95; String_GetLengthFromDSSItoCX
96; Parameters:
97; DS:SI: Ptr to NULL terminated string
98; Returns:
99; CX: String length in characters
100; Corrupts registers:
101; Nothing
102;--------------------------------------------------------------------
103ALIGN JUMP_ALIGN
104String_GetLengthFromDSSItoCX:
105 push ax
106 push si
107
108 call Memory_ExchangeDSSIwithESDI
109 xor ax, ax ; Find NULL
110 mov cx, -1 ; Full segment if necessary
111 repne scasb
112 mov cx, di
113 call Memory_ExchangeDSSIwithESDI
114
115 pop si
116 stc
117 sbb cx, si ; Subtract NULL
118 pop ax
119 ret
Note: See TracBrowser for help on using the repository browser.