Перевести строку в шестибайтное число - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Суть алгоритма: считывается число в восьмеричной системе счисления (16 цифр) после чего преобразуется в реальное шестибайтное число, с которым можно работать. Преобразовать строку получилось, но только в четырехбайтное число. Была объявлена df шестибайтная переменная для этого числа
anum DF 0
После чего производилось преобразование следующим образом: переменную anum сдвигаем на 3 бита влево
rcl [si], 3
(si тут указывает на нее) и прибавляем очередную цифру. И конвертация работает, но только для четырех байт. Оставшиеся два байта при сдвиге попросту игнорируется. Почему? Ведь переменная объявлена как шестибайтовая... Полный код функции:
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
Функция конвертирует строку, на которую указывает di, в число, на которое указывает si. Но число получается четырехбайтным, хоть si и указывает на шестибайтную переменную.

Решение задачи: «Перевести строку в шестибайтное число»

textual
Листинг программы
shl   dword ptr [edi],5

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы