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

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

Initial commit for Assembly Library.

File size: 2.2 KB
Line 
1; File name     :   String.asm
2; Project name  :   Assembly Library
3; Created date  :   12.7.2010
4; Last update   :   6.9.2010
5; Author        :   Tomi Tilli
6; Description   :   Functions for handling characters.
7
8; Section containing code
9SECTION .text
10
11;--------------------------------------------------------------------
12; String_ConvertWordToAXfromStringInDSSIwithBaseInBX
13;   Parameters:
14;       BX:     Numeric base (10 or 16)
15;       DS:SI:  Ptr to string to convert
16;   Returns:
17;       AX:     Word converted from string
18;       DI:     Offset to NULL or first invalid character
19;       CF:     Set if conversion successfull
20;               Cleared if invalid string
21;   Corrupts registers:
22;       DX
23;--------------------------------------------------------------------
24ALIGN JUMP_ALIGN
25String_ConvertWordToAXfromStringInDSSIwithBaseInBX:
26    xor     dx, dx
27    cld
28
29ALIGN JUMP_ALIGN
30.ConvertWordToAXfromStringInDSSIwithBaseInBX:
31    lodsb                       ; Load character from DS:SI to AL
32    call    Char_ConvertIntegerToALfromDigitInALwithBaseInBX
33    jnc     SHORT .InvalidCharacter
34    xor     ah, ah
35    push    ax                  ; Push integer
36    xchg    ax, dx              ; Copy WORD to AX
37    mul     bx                  ; DX:AX = word in AX * base in BX
38    pop     dx                  ; Pop integer
39    add     dx, ax              ; WORD back to DX
40    jmp     SHORT .ConvertWordToAXfromStringInDSSIwithBaseInBX
41
42ALIGN JUMP_ALIGN
43.InvalidCharacter:
44    sub     al, 1               ; Set CF if NULL character, clear CF otherwise
45    xchg    ax, dx              ; Return WORD in AX
46    ret
47
48
49;--------------------------------------------------------------------
50; String_CopyToESDIfromDSSIwithoutTerminatingESDI
51;   Parameters:
52;       DS:SI:  Ptr to source NULL terminated string
53;       ES:DI:  Ptr to destination buffer
54;   Returns:
55;       CX:     Number of characters copied
56;       SI,DI:  Updated by CX characters
57;   Corrupts registers:
58;       Nothing
59;--------------------------------------------------------------------
60ALIGN JUMP_ALIGN
61String_CopyToESDIfromDSSIwithoutTerminatingESDI:
62    push    ax
63    xor     cx, cx
64
65ALIGN JUMP_ALIGN
66.GetAndStoreNewCharacter:
67    lodsb                       ; Load from DS:SI to AL
68    test    al, al              ; NULL to end string?
69    jz      SHORT .EndOfString
70    stosb                       ; Store from AL to ES:DI
71    inc     cx                  ; Increment number of characters written
72    jmp     SHORT .GetAndStoreNewCharacter
73
74ALIGN JUMP_ALIGN
75.EndOfString:
76    pop     ax
77    ret
Note: See TracBrowser for help on using the repository browser.