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

Last change on this file since 369 was 369, checked in by gregli@…, 12 years ago

Removed align directives for initalization code and added define for align in boot-time calls to the assembly library (defaulting to 1), resulting in a significant savings for the AT and 386 builds. Fixed a bug with switch command line handling in the serial server. Put in CR characters in licesnse.txt, so that it properly displays on Windows. In the configurator, added default values for user supplied CHS and LBA values, defaulting to values within range when those features are enabled. Updated the copyright message in the configurator as the literal word Copyright is important.

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