Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 239
от 14.09.2005, 23:36

Администратор:Калашников О.А.
В рассылке:Подписчиков: 264, Экспертов: 22
В номере:Вопросов: 1, Ответов: 3


Вопрос № 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|

Уважаемые программисты!
Если я где-то ступил, то пбольшая просьба меня не ругать!
Отправлен: 09.09.2005, 11:21
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
Всё это давно реализовано - это 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться
Вспомнить пароль

В избранное