[41] | 1 | ; Project name : Assembly Library
|
---|
| 2 | ; Description : Functions for handling characters.
|
---|
| 3 |
|
---|
| 4 | ; Section containing code
|
---|
| 5 | SECTION .text
|
---|
| 6 |
|
---|
| 7 | ;--------------------------------------------------------------------
|
---|
[53] | 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 | ;--------------------------------------------------------------------
|
---|
[369] | 17 | ALIGN STRING_JUMP_ALIGN
|
---|
[53] | 18 | String_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 | ;--------------------------------------------------------------------
|
---|
[41] | 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
|
---|
[53] | 37 | ; CX: Number of characters processed
|
---|
[52] | 38 | ; SI: Updated
|
---|
[293] | 39 | ; CF: Cleared if successful
|
---|
[52] | 40 | ; Set if error during conversion
|
---|
[41] | 41 | ; Corrupts registers:
|
---|
[52] | 42 | ; Nothing
|
---|
[41] | 43 | ;--------------------------------------------------------------------
|
---|
[369] | 44 | ALIGN STRING_JUMP_ALIGN
|
---|
[41] | 45 | String_ConvertWordToAXfromStringInDSSIwithBaseInBX:
|
---|
[52] | 46 | push di
|
---|
| 47 | push dx
|
---|
[41] | 48 |
|
---|
[52] | 49 | xor di, di
|
---|
| 50 | mov dx, StringProcess_ConvertToWordInDIWithBaseInBX
|
---|
| 51 | call StringProcess_DSSIwithFunctionInDX
|
---|
| 52 | xchg ax, di
|
---|
[41] | 53 |
|
---|
[52] | 54 | pop dx
|
---|
| 55 | pop di
|
---|
[41] | 56 | ret
|
---|
| 57 |
|
---|
| 58 |
|
---|
| 59 | ;--------------------------------------------------------------------
|
---|
[53] | 60 | ; String_CopyDSSItoESDIandGetLengthToCX
|
---|
[41] | 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 | ;--------------------------------------------------------------------
|
---|
[369] | 70 | ALIGN STRING_JUMP_ALIGN
|
---|
[53] | 71 | String_CopyDSSItoESDIandGetLengthToCX:
|
---|
[41] | 72 | push ax
|
---|
[52] | 73 |
|
---|
[41] | 74 | xor cx, cx
|
---|
[369] | 75 | ALIGN STRING_JUMP_ALIGN
|
---|
[52] | 76 | .CopyNextCharacter:
|
---|
[41] | 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
|
---|
[52] | 82 | jmp SHORT .CopyNextCharacter
|
---|
[41] | 83 |
|
---|
[369] | 84 | ALIGN STRING_JUMP_ALIGN
|
---|
[41] | 85 | .EndOfString:
|
---|
| 86 | pop ax
|
---|
| 87 | ret
|
---|
[46] | 88 |
|
---|
| 89 |
|
---|
| 90 | ;--------------------------------------------------------------------
|
---|
[52] | 91 | ; String_GetLengthFromDSSItoCX
|
---|
[46] | 92 | ; Parameters:
|
---|
[52] | 93 | ; DS:SI: Ptr to NULL terminated string
|
---|
[46] | 94 | ; Returns:
|
---|
[52] | 95 | ; CX: String length in characters
|
---|
[46] | 96 | ; Corrupts registers:
|
---|
| 97 | ; Nothing
|
---|
| 98 | ;--------------------------------------------------------------------
|
---|
[369] | 99 | ALIGN STRING_JUMP_ALIGN
|
---|
[52] | 100 | String_GetLengthFromDSSItoCX:
|
---|
| 101 | push ax
|
---|
[46] | 102 | push si
|
---|
| 103 |
|
---|
[54] | 104 | call Registers_ExchangeDSSIwithESDI
|
---|
[52] | 105 | xor ax, ax ; Find NULL
|
---|
| 106 | mov cx, -1 ; Full segment if necessary
|
---|
| 107 | repne scasb
|
---|
| 108 | mov cx, di
|
---|
[54] | 109 | call Registers_ExchangeDSSIwithESDI
|
---|
[46] | 110 |
|
---|
[52] | 111 | pop si
|
---|
| 112 | stc
|
---|
| 113 | sbb cx, si ; Subtract NULL
|
---|
[46] | 114 | pop ax
|
---|
| 115 | ret
|
---|