Вопрос № 26090: Вот, что товарищи программисты спросить хотел:
1. Для ввода символов неограниченной длинны в память компьютера нужно записывать
введенныю цифру не в байт, а в четыре бита.
Т.е. если испоьзовать функцию 0Ah int 21h, то в память помещ...
Вопрос № 26.090
Вот, что товарищи программисты спросить хотел:
1. Для ввода символов неограниченной длинны в память компьютера нужно записывать
введенныю цифру не в байт, а в четыре бита.
Т.е. если испоьзовать функцию 0Ah int 21h, то в память помещается каждая цифра в
один байт.
Допустим нужно использовать эту функцию для помещения в память числа 2005, то в
память поместиться 02 00 00 05, т.е. нужно следующее:
при вводе цифры 2 сдвинуть эту цифру на четыре бита влево, при вводе следующей
цифры сдвига делать не нужно, т.е. пользователь набирает 20, а программа делает
следующее:
input 2
shr 4
input 0
сдвиг не нужен
input 0
shr 4
input 5
сдвиг не нужен.
Т.е. делать сдвиг на четыре бита, каждой второй введенной цифрце, начиная с
первой.
Пусть будет число 234567
Для этого числа нужны три байта.
input 2
shr 4
input 3
сдвиг не нужен записать в тот же байт
input 4
shr 4
input 5
сдвиг не нужен записать в тот же байт
input 6
shr 4
input 7
сдвиг не нужен записать в тот же байт
Получается следующий алгоритм:
1. 2 - shl 4 |20|
2. 3 - |23| - записать в память
3. 4 - shl 4 |40|
4. 5 - |45| - записать в память
5. 6 - shl 4 |60|
6. 7 - |67| - записать в память
Что получим в памяти:
Строки 2, 4, 6 - |23| |45| |67|
Уважаемые программисты!
Если я где-то ступил, то пбольшая просьба меня не ругать!
Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
Всё это давно реализовано - это BSD.
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 09.09.2005, 11:32 Оценка за ответ: 4 Комментарий оценки: Значит я тоже реализовал, только сам!!
Отвечает: Татьяна
Здравствуйте, Терсков Алексей Николаевич!
Дело в том, что сама постановка наверное некорректна.
Все зависит, от того, что именно вы хотите вводить. Если вы собираетесь вводить символы, то в 4 бита вы сможете поместить лишь символы с кодом от 0 до 15, т.е. не более 16 символов всего разнообразия, если же вы хотите вводить цифры, не забудьте что цифра 2 и символ '2' (его код, к сожалению, не входит в диапазон 0-16) хранит в себе разную смысловую нагрузку. А хранение чисел в их стандартной форме, а не в предложенной вами, позволит вам только сэкономить память.
--------- Нет ничего невозможного!!!
Ответ отправила: Татьяна (статус: 1-ый класс)
Отправлен: 09.09.2005, 11:36
Отвечает: mvp
Здравствуйте, Терсков Алексей Николаевич!
Не совсем понятно, зачем это нужно - ведь вы никакой экономии не получаете: в один байт вы можете записать максимальное число 99, а ведь в байт вмещает 255!!! Раз речь идёт о числах неограниченной (?) длины, то лучше сразу их преобразовывать в двоичное представление, т. е. ввели 2 - записали 2 (вернее от кода символа "2" отняли код символа "0"), ввели 3 - умножили предыдущее значение на 10 и добавили 3 и т. д.
--------- Моя совесть чиста - не бывшая в употреблении
Ответ отправил: mvp (статус: 4-ый класс)
Отправлен: 09.09.2005, 20:34 Оценка за ответ: 5 Комментарий оценки: В этом все и дело, а в память то записывается 02 00 00 05 т.е. не 2005, а 2000005 Поместим в регистр AX и BX AX=0200 BX=0005 или наоборот BX=0200 AX=0005