[41] | 1 | ; File name : String.asm
|
---|
| 2 | ; Project name : Assembly Library
|
---|
| 3 | ; Created date : 12.7.2010
|
---|
[54] | 4 | ; Last update : 24.10.2010
|
---|
[41] | 5 | ; Author : Tomi Tilli
|
---|
| 6 | ; Description : Functions for handling characters.
|
---|
| 7 |
|
---|
| 8 | ; Section containing code
|
---|
| 9 | SECTION .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 | ;--------------------------------------------------------------------
|
---|
| 21 | ALIGN JUMP_ALIGN
|
---|
| 22 | String_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 | ;--------------------------------------------------------------------
|
---|
| 48 | ALIGN JUMP_ALIGN
|
---|
| 49 | String_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 | ;--------------------------------------------------------------------
|
---|
| 74 | ALIGN JUMP_ALIGN
|
---|
[53] | 75 | String_CopyDSSItoESDIandGetLengthToCX:
|
---|
[41] | 76 | push ax
|
---|
[52] | 77 |
|
---|
[41] | 78 | xor cx, cx
|
---|
| 79 | ALIGN 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 |
|
---|
| 88 | ALIGN 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 | ;--------------------------------------------------------------------
|
---|
| 103 | ALIGN JUMP_ALIGN
|
---|
[52] | 104 | String_GetLengthFromDSSItoCX:
|
---|
| 105 | push ax
|
---|
[46] | 106 | push si
|
---|
| 107 |
|
---|
[54] | 108 | call Registers_ExchangeDSSIwithESDI
|
---|
[52] | 109 | xor ax, ax ; Find NULL
|
---|
| 110 | mov cx, -1 ; Full segment if necessary
|
---|
| 111 | repne scasb
|
---|
| 112 | mov cx, di
|
---|
[54] | 113 | call Registers_ExchangeDSSIwithESDI
|
---|
[46] | 114 |
|
---|
[52] | 115 | pop si
|
---|
| 116 | stc
|
---|
| 117 | sbb cx, si ; Subtract NULL
|
---|
[46] | 118 | pop ax
|
---|
| 119 | ret
|
---|