Rev 7577 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7577 | Rev 7579 | ||
---|---|---|---|
Line 88... | Line 88... | ||
88 | or al,0x30 |
88 | or al,0x30 |
89 | stosb |
89 | stosb |
90 | mov byte[edi],0 ;в конец строки ставим 0, что-бы не вылазил мусор |
90 | mov byte[edi],0 ;в конец строки ставим 0, что-бы не вылазил мусор |
91 | @@: |
91 | @@: |
92 | ret |
92 | ret |
93 | 93 | ||
- | 94 | ;input: |
|
- | 95 | ; buf - указатель на строку, число должно быть в 10 или 16 ричном виде |
|
- | 96 | ;output: |
|
- | 97 | ; eax - число |
|
- | 98 | align 4 |
|
- | 99 | proc conv_str_to_int, buf:dword |
|
- | 100 | xor eax,eax |
|
- | 101 | push ebx ecx esi |
|
- | 102 | xor ebx,ebx |
|
- | 103 | mov esi,[buf] |
|
- | 104 | ;определение отрицательных чисел |
|
- | 105 | xor ecx,ecx |
|
- | 106 | inc ecx |
|
- | 107 | cmp byte[esi],'-' |
|
- | 108 | jne @f |
|
- | 109 | dec ecx |
|
- | 110 | inc esi |
|
- | 111 | @@: |
|
- | 112 | ||
- | 113 | cmp word[esi],'0x' |
|
- | 114 | je .load_digit_16 |
|
- | 115 | ||
- | 116 | .load_digit_10: ;считывание 10-тичных цифр |
|
- | 117 | mov bl,byte[esi] |
|
- | 118 | cmp bl,'0' |
|
- | 119 | jl @f |
|
- | 120 | cmp bl,'9' |
|
- | 121 | jg @f |
|
- | 122 | sub bl,'0' |
|
- | 123 | imul eax,10 |
|
- | 124 | add eax,ebx |
|
- | 125 | inc esi |
|
- | 126 | jmp .load_digit_10 |
|
- | 127 | jmp @f |
|
- | 128 | ||
- | 129 | .load_digit_16: ;считывание 16-ричных цифр |
|
- | 130 | add esi,2 |
|
- | 131 | .cycle_16: |
|
- | 132 | mov bl,byte[esi] |
|
- | 133 | cmp bl,'0' |
|
- | 134 | jl @f |
|
- | 135 | cmp bl,'f' |
|
- | 136 | jg @f |
|
- | 137 | cmp bl,'9' |
|
- | 138 | jle .us1 |
|
- | 139 | cmp bl,'A' |
|
- | 140 | jl @f ;отсеиваем символы >'9' и <'A' |
|
- | 141 | .us1: ;составное условие |
|
- | 142 | cmp bl,'F' |
|
- | 143 | jle .us2 |
|
- | 144 | cmp bl,'a' |
|
- | 145 | jl @f ;отсеиваем символы >'F' и <'a' |
|
- | 146 | sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки |
|
- | 147 | .us2: ;составное условие |
|
- | 148 | sub bl,'0' |
|
- | 149 | cmp bl,9 |
|
- | 150 | jle .cor1 |
|
- | 151 | sub bl,7 ;convert 'A' to '10' |
|
- | 152 | .cor1: |
|
- | 153 | shl eax,4 |
|
- | 154 | add eax,ebx |
|
- | 155 | inc esi |
|
- | 156 | jmp .cycle_16 |
|
- | 157 | @@: |
|
- | 158 | cmp ecx,0 ;если число отрицательное |
|
- | 159 | jne @f |
|
- | 160 | sub ecx,eax |
|
- | 161 | mov eax,ecx |
|
- | 162 | @@: |
|
- | 163 | pop esi ecx ebx |
|
- | 164 | ret |
|
- | 165 | endp'a' |
|
- | 166 | >'A' |
|
94 | 167 | > |