Перевести строку в шестибайтное число - Assembler
Формулировка задачи:
Здравствуйте.
Суть алгоритма: считывается число в восьмеричной системе счисления (16 цифр) после чего преобразуется в реальное шестибайтное число, с которым можно работать.
Преобразовать строку получилось, но только в четырехбайтное число. Была объявлена df шестибайтная переменная для этого числа После чего производилось преобразование следующим образом: переменную anum сдвигаем на 3 бита влево (si тут указывает на нее) и прибавляем очередную цифру. И конвертация работает, но только для четырех байт. Оставшиеся два байта при сдвиге попросту игнорируется. Почему? Ведь переменная объявлена как шестибайтовая...
Полный код функции:
Функция конвертирует строку, на которую указывает di, в число, на которое указывает si. Но число получается четырехбайтным, хоть si и указывает на шестибайтную переменную.
anum DF 0
rcl [si], 3
OCTTOU PROC ; di указывает на строку ; si указывает на число cicle: mov al, [di] cmp al, 0 je endconv ;строка заканчивается нулевым байтом, выходим если дошли до него clc ; очищаем cf rcl [si], 3 ; сдвиг влево на 3 бита (умножение на 8) sub al, '0' ; получаем число из символа inc di ; увеличиваем указатель строки add [si], al ; прибавляем к сумме полученное число jmp cicle endconv: ret OCTTOU ENDP
Решение задачи: «Перевести строку в шестибайтное число»
textual
Листинг программы
shl dword ptr [edi],5