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

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

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

File size: 2.9 KB
RevLine 
[41]1; File name     :   String.asm
2; Project name  :   Assembly Library
3; Created date  :   12.7.2010
[53]4; Last update   :   13.10.2010
[41]5; Author        :   Tomi Tilli
6; Description   :   Functions for handling characters.
7
8; Section containing code
9SECTION .text
10
11;--------------------------------------------------------------------
[53]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;--------------------------------------------------------------------
[41]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
[53]41;       CX:     Number of characters processed
[52]42;       SI:     Updated
43;       CF:     Cleared if successfull
44;               Set if error during conversion
[41]45;   Corrupts registers:
[52]46;       Nothing
[41]47;--------------------------------------------------------------------
48ALIGN JUMP_ALIGN
49String_ConvertWordToAXfromStringInDSSIwithBaseInBX:
[52]50    push    di
51    push    dx
[41]52
[52]53    xor     di, di
54    mov     dx, StringProcess_ConvertToWordInDIWithBaseInBX
55    call    StringProcess_DSSIwithFunctionInDX
56    xchg    ax, di
[41]57
[52]58    pop     dx
59    pop     di
[41]60    ret
61
62
63;--------------------------------------------------------------------
[53]64; String_CopyDSSItoESDIandGetLengthToCX
[41]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
[53]75String_CopyDSSItoESDIandGetLengthToCX:
[41]76    push    ax
[52]77
[41]78    xor     cx, cx
79ALIGN JUMP_ALIGN
[52]80.CopyNextCharacter:
[41]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
[52]86    jmp     SHORT .CopyNextCharacter
[41]87
88ALIGN JUMP_ALIGN
89.EndOfString:
90    pop     ax
91    ret
[46]92
93
94;--------------------------------------------------------------------
[52]95; String_GetLengthFromDSSItoCX
[46]96;   Parameters:
[52]97;       DS:SI:  Ptr to NULL terminated string
[46]98;   Returns:
[52]99;       CX:     String length in characters
[46]100;   Corrupts registers:
101;       Nothing
102;--------------------------------------------------------------------
103ALIGN JUMP_ALIGN
[52]104String_GetLengthFromDSSItoCX:
105    push    ax
[46]106    push    si
107
[52]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
[46]114
[52]115    pop     si
116    stc
117    sbb     cx, si      ; Subtract NULL
[46]118    pop     ax
119    ret
Note: See TracBrowser for help on using the repository browser.