Смекни!
smekni.com

Перевод чисел из различных систем счисления (стр. 3 из 3)

jne.hex1 ; то переходим к.hex1

mov al, 'o' ; иначе 'o' сохраняем

mov BYTE ptr [ebx+esi+1], al; в последний байт массива

add BYTE ptr [ebx], 1; и увеличиваем длину массива на 1

jmp.exitperepolnenie ; переход на выход

hex1:

cmp ecx, 16 ; если выходная система не равна 16

jne.exitperepolnenie ; то переходим к.exitperepolnenie

mov al, 'h' ; иначе 'h' сохраняем

mov BYTE ptr [ebx+esi+1], al ; в последний байт массива

add BYTE ptr [ebx], 1; и увеличиваем длину массива на 1

jmp.exitperepolnenie ; переход на выход

errmax:

mov flag, 5; присваеваем flag код ошибки 5

exitperepolnenie:

pop edi; возвращаем из стека edi

ret

perepolnenie endp

;##########################################################################

; in eax указатель на строку, edx разрядность выходной строки

; out флагошибки

public perevod

push eax

push ebx

push ecx

push edx

pushedi

push esi

mov ebx, eax; записываем в ebx указатель на строку

mov oss, ecx; записываем в oss разрядность выходной строки

xor eax, eax; обнуляем eax

mov al, BYTE PTR [ebx]; записываем в edi длину строки

mov edi, eax; копируем в edi длину строки

cmp edi, 0; если длина строки равна нулю,

je.pustayastroka; то переходим к.pustayastroka

call inputss; определяем входную разрядность, результат в iss

cmp flag, 0; если флаг ошибки не равен нулю,

jne.exitperevod; то переход к.exitperevod

call verinput; переводим символы в массиве в цифры и проверяем правильность ввода

cmp flag, 0; если флаг ошибки не равен нулю,

jne.exitperevod; то переход к.exitperevod

call perepolnenie; проверяем на превышение максимальных значений и производим перевод числа

jmp.exitperevod; переход к.exitperevod

pustayastroka:

mov flag, 1; присваеваем флагу код 1

exitperevod:

cmp flag, 0; если флаг равен нулю

je.end; то переход в конец

mov eax, flag; копируем флаг в eax

mov BYTE PTR [ebx], 1; устанавливаем длину строки в 1

mov BYTE PTR [ebx+1], al; записываем в первый элемент массива код ошибки

end:

pop esi

pop edi

pop edx

pop ecx

pop eax

ret

perevod endp

end