Вывод числа на экран

Тема в разделе "WASM.BEGINNERS", создана пользователем Giroch, 12 дек 2011.

  1. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Phantom_84
    Чтобы вписать ник адресата в сообщение, можно клацнуть по нему.
    Что же до своего алгоритма, то в двух страниц (у меня, кстати, одна, если что) обсуждения вряд ли удалось бы избежать. Хотите на две страницы обсудить, почему? :)
     
  2. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    Что!? Как в противоположную сторону!? Можно по-подробние
     
  3. Painter

    Painter New Member

    Публикаций:
    0
    Регистрация:
    1 окт 2011
    Сообщения:
    46
    Giroch
    Дело в том что в "русифицированном" досе используется 866 кодовая страница http://ru.wikipedia.org/wiki/Кодовая_страница. Для того что бы на экране появилась цифра 0, надо по соответствующему адресу внести код символа - это число 48. В 866 кодовой странице(в дальнейшем просто 866) цифре 0 соответствует код 48, цифре 1 соответствует код 49 и так далее(вам это уже l_inc писал...

    цифра | ASCII-код | сканкод
    0 | 48 | 11
    1 | 49 | 2
    2 | 50 | 3
    3 | 51 | 4
    4 | 52 | 5
    5 | 53 | 6
    6 | 54 | 7
    7 | 55 | 8
    8 | 56 | 9
    9 | 57 | 10

    В 866 один символ кодируется одним байтом. Соответственно если вы просто поместите в адрес видеокарты число из регистра al, то увидите не его численное представление, а символ кодовой страницы которому соответствует данное число. Поясню на примере...
    Если в al находится число 65 то при выводе его вы увидите не 65 а букву "A" так как именно этой букве соответствует ASCII-код 65! Для того что бы увидеть на экране число 65 надо:
    1 вывести на экран ASCII-код символа 6 которому соответствует число 54
    2 перейти на следующий символ и там вывести ASCII-код символа 5 которому соответствует число 53
    ну и в результате вы увидите число 65 на экране. Ну или проделать то же самое но не с экраном а со строкой, а потом при помощи соответствующих функций дос(лень смотреть каких) вывести строку на экран. То есть число 65 в строковом представлении будет иметь 2 байта(54,53) а не 1 как регистр al.
    А алгоритм перевода довольно таки простой. Дело в том что разница между числом и его символьным представлением(ASCII-кодом) равна 48. Это видно из таблицы. Нужно только выделить единицы, десятки, сотни, тысячи и т.д. делением на 10. А потом каждый из символов перевести в ASCII-код.
    Например двух-байтовое число 64324 будет выглядеть

    6 - 54
    4 - 52
    3 - 51
    2 - 50
    4 - 52

    в строке как пять байтов - (54,52,51,50,52) (я не учитываю символ конца строки, который кстати обязателен. Ну а с этим символом строка будет иметь конечно не пять, а шесть байтов).
     
  4. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    Нет уж уважаемый, так просто вы отменя не отделались бы, я разобраться хотел. И благодаря терпению отвечавших вроде разобрался. Ну я так думал до того как l_inc не написал про таблицу наоборот, а теперь даже незнаю....
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Giroch
    Ну куда уж подробнее? Вывести число на экран означает вывести последовательно его цифры. Цифры находятся в левом столбце, а не в среднем. Это значит, что нужно искать в левом столбце то, что хотим вывести, а в среднем то, что должны записать (на экран или в строку).

    57 - это число, а не цифра. Вывести на экран число 57 означает, что сначала нужно вывести цифру 5, а потом вывести цифру 7. Это значит, что мы ищем сначала цифру 5 в левом столбце, а передаём в функцию вывода то, что в среднем столбце. Не наоборот!
     
  6. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    Ну где то так я и понял. записали код на экране получили цыфру, а строка потому что кода идут в ряд. Это кажется очень просто, но поверьте только после того как уловиш принцып. Теперь я и сам не понимаю что в этом может быть непонятного :)))
     
  7. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    Giroch
    Символы должны декларироваться до их употребления. Описание символа связывает внутренний номер символа с его изображением. Внутри описания номер символа может встречаться только один раз.
    Компьютеры обрабатывают не только числа, но и главным образом тексты, поэтому для ввода данных с клавиатуры и для последующего их вывода на принтер или на экран договорились рассматривать байты не как числа, а как буквено-цифровые символы. Для того, чтобы данные можно было передавать между ЭВМ и периферийными устройствами различных производителей договорились использовать один из стандартных кодов для обмена информацией. Кодирование символов – операция в достаточ­ной мере произвольная, и поэтому существует несколько стандартных бук­вено-цифровых кодов, например 8-разрядный двоично-десятичный код EBCDIC (Extended Binary Coded Decimal Interchange Code), применяющийся на мэйнфреймах IBM, код Холлерита, для записи информации на перфокартах, 5-разрядный код Бодо, который долгое время являлся стандартным кодом для телетайпов. Наиболее широкораспространенным буквено-цифровым кодом является ASCII (или ANSI). ASCII = American Standard Code for Information Interchange (Американский стан­дартный код для обмена информацией). Для представления всех букв, цифр и служебных знаков, появляющихся на экране компьютера, обычно используется всего один байт. Всего в ASCII-коде 28=256 символов. ASCII-код используется в мини- и микро-ЭВМ, в том числе и в системах построенных на базе микропроцессоров x86. Символы ASCII включают все символы «американской пишущей машинки» (коды от 32 до 127), специальные «управляющие» коды, такие как табуляция, возврат каретки и так далее (коды от 0 до 31), символы псевдографики и символы для иностранных алфавитов (коды от 128 до 255, так называемая расширенная таблица символов), позволяющие использовать разные умляуты (Â, Á, Å и т.д.) и рисовать псевдографические рисуночки вроде панелей DOS-овского Нортона и progress bar'ов во время копирования. С кодировкой ASCII конкурируют кодовые страницы от MicroSoft и древнее чудовище EBCDIC, почти вымершее со времен господства мэйнфреймов IBM. В на­стоящее время ASCII код морально устарел и постепенно вытесняется Unicode'ом.
    При нажатии, например, клавиши «W» на клавиатуре произойдет формирование и передача в компьютер соответствующего этой букве ASCII-кода – 57h. Если же компьютер посылает на монитор или принтер ASCII-код, например 59h, монитор или принтер должны дешифровать эти биты и отреагировать соответствующим образом – вывести на экран или на бумагу букву «Y». ASCII-код используется также для создания файлов в общем формате. Хранение данных в формате ASCII обычно менее компактно, чем в двоичном формате, однако преимущество кода состоит в том, что он является стандартной основой для обмена данными.
    Кроме буквенно-цифровых кодов ASCII содержит непечатаемые управляющие символы, частично заимствованные из телетайпных кодов: NULL (нуль) – символ содержащий нули во всех разрядах и применяющийся для разделения цепочки символов, а также для других целей, CR (возврат каретки) и LF (перевод строки), устанавливающиеся при печати новой строки, FF (перевод формата), использующийся для перехода к новой странице, ESC, служащий в качестве разделителя команд, ETX (конец текста или «управляющее C»), которое многими операционными системами интерпретируется как указание прервать выполнение программы и т.д.
    Для быстрой ориентации в ASCII-кодах запомните содержимое таблицы
    Код (Text):
    1. Биты  |     Группа символов
    2. 7 6 5 |
    3. ------|------------------------
    4. 0 0 0 |Управляющие символы
    5. 0 0 1 |Цифры и знаки пунктуации
    6. 0 1 0 |Прописные латинские буквы и спецсимволы
    7. 0 1 1 |Строчные латинские буквы и спецсимволы
    Код буквы «Z» – 5Ah (01011010b). Чтобы получить код строчной ла­тинской буквы, нужно взять код соответствующей прописной буквы и установить в 5-ом разряде 1. Код буквы «z» – 7Ah (01111010b).
    Коды десятичных цифр 0-9 в любой кодировке (ASCII, EBCDIC, Unicode и т.д.) должны идти в возрастающем порядке, причём коды двух соседних цифр должны отличаться на единицу. Для символов ASCII-цифр значение кода равно самому числу плюс число 30h. Так как ASCII-цифры следуют в возрастающем порядке, поэтому для сравнения значений применимы арифметические действия непосредственно над кодами чисел. Числа передаются в(из) компьютер(а) в виде последовательности символов, представленных в коде ASCII. Например, число 1234 передается как 31h, 32h, 33h, 34h. Компьютер, принимая число, может запомнить его без модификации, как ASCII-строку; либо обнулить старшие тетрады, что будет соответствовать числу в неупакованном BCD-формате – 01020304h; либо может удалить старшие тетра­ды и получить число в упакованном BCD-формате – 1234h; наконец он может преобразовать это число в двоичный формат – 04D2h (4×162+ 13×161 + 2×160= 1234). Выбор того или иного способа преобразования зависит от выполняемой программы.
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Giroch
    Вот что породило непонимание. Строка с точки зрения программирования состоит из кодов, которые к сожалению тоже записываются цифрами. Код символа цифры, представление цифры в программе и скан-код цифры- это три разные вещи. А поэтому чтобы не было "каши" в голове, то не надо сразу задавать вопросы в разделе новичков, а для начала азы ПОЧИТАТЬ. Там все это разжевано и показано на примерах. А вашу методу обучения я называю условно "кавалерийский наскок".