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

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

  1. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    Объясните пожалуйсто руским языком как, на масме под ДОС, вывести на экран результат полученый в регистре. Читал что для выведения числа на экран нужно его записать в строку. Но строка тоже ведь состоит из чисел!!!! И чем отличаеться первоначальное число, на пример скан код нажатой клавиши в возвращённый в AH от записи тогоже числа в строку сохранённого в некую область памяти? Зачем эти преобразования??
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Giroch
    Код (Text):
    1.  цифра | ASCII-код | сканкод
    2.    0   |     48    |   11  
    3.    1   |     49    |    2  
    4.    2   |     50    |    3  
    5.    3   |     51    |    4  
    6.    4   |     52    |    5  
    7.    5   |     53    |    6  
    8.    6   |     54    |    7  
    9.    7   |     55    |    8  
    10.    8   |     56    |    9  
    11.    9   |     57    |   10
    ASCII-код - то число, которое будучи в строке (точнее в одном байте ASCII-строки) будет изображаться на экране соответствующей цифрой.

    Сканкод (PS/2) — код клавиши на клавиатуре, на которой расположена указанная цифра. На самом деле он в данном случае вообще не причём и приведен просто для сравнения, т.к. Вы сами его упомянули.

    Надеюсь, теперь понятно, как переводить число в его строковое представление.
     
  3. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Есть такое понятие как код символа
    Например кодам 0x41 - 0x5A ответствуют символы англ. алфавита ('A' - 'Z' ), кодам 0х30 - 0х39 символы чисел ( 0 - 9 ).
    Подробней тут
    http://ru.wikibooks.org/wiki/Кодирование_текста
    http://microsin.ru/content/view/652/43/
     
  4. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Записать его в строку. Можно тупо прибавлять к каждому разряду число 30h и записывать результат в буфер, который ты позже выводишь на экран. Как ответить на остальные вопросы так, чтобы не запутать еще больше не знаю (:
     
  5. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    Т. е. я так понял что записывая в видиобуфер "48" то на экране получаем "0"?
    Что тогда будет строкой а что числом??
     
  6. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Понятие строка/число условное, все это байты:) .
    Просто у компа есть шрифты и они задают соответствие число - картина ( та которая отображается как символ(это может быть буква,число, знак какой то)).
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Giroch
    Именно.
    В каком смысле? Вопрос в том, что как называть что ли? :)
    325 - число. "325" - строка. Последовательность (массив) чисел 51,50,53 тоже можно называть строкой. Как хотите, так и называйте. :)

    "325", например, можно тоже назвать числом, представленным в 256-ричной системе счисления. Например, если (в masm) написать mov eax,"325", то в eax попадёт 256-ричное число, равное
    "325" = "3"*256^2+"2"*256^1+"5"*256^0 = 51*256^2+50*256+53 = 3355189
     
  8. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    спасибо за потраченое время это действительно кое что прояснеет, но всё же... мне нужно вывести на экран значение значение регистра AL без изменений!!! т.е. хочу малюсенькую прогу : нажал на клавишу а она тебе ASCII код и радуешся... ;)) и всё так блин просто 16H --- INT 21H ----- AL = ASCII код но вот КАК его увидеть блин!!!!!!!!!!!!!
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Giroch
    Т.е. :
    Код (Text):
    1. ...
    2. mov ah,01
    3. int 21h
    4. ...
    И можно радоваться.
     
  10. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Не понял, у тебя в AL находится символ, который нужно вывести на экран? Тогда так:
    Код (Text):
    1. mov dl, al
    2. mov ah, 02h
    3. int 21h
     
  11. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    Пасибо, ща попробую

    Но как же быть с числами и стрроками???
    кстати предположим преобразовали число в строку и занесли её в произвольний буфер или переменнную что как я понял одно и тоже. Дальше что? на экран как???!!!!!!!!
     
  12. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Код (Text):
    1. mov ah, 09h
    2. mov dx, offset string
    3. int 21h
     
  13. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    Х-ммммм и что будет на экране "содержимое памяти по указаному адресу" или опять что то вроде вот такой пупаницы: если (в masm) написать mov eax,"325", то в eax попадёт 256-ричное число, равное
    "325" = "3"*256^2+"2"*256^1+"5"*256^0 = 51*256^2+50*256+53 = 3355189
     
  14. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Giroch
    Вообще не код символа будет выведен. :) Будет выведен сам символ. Невнимательно прочёл Ваш вопрос. Чтобы вывести код символа, его нужно, как Вы сами в первом посте написали, преобразовать в строку (как именно, я думаю понятно: вычисляете последовательно цифры, и каждую цифру преобразуете в код её символа). А вывод строки либо посимвольно, как показал Sholar в #10, либо целой строкой, как в #12, либо прямой записью в текстовую видеопамять (по адресу 0b8000h) в каждый чётный (если я правильно помню) байт.
     
  15. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    Так не делается. В ah заносится номер функции(09h), а dx смещение до твоей строки.
    Вот пример:
    Код (Text):
    1. CSEG segment
    2.  org 100h
    3.  
    4.  start:
    5.  
    6.     mov ah,9
    7.     mov dx,offset Message
    8.     int 21h
    9.  
    10.     int 20h
    11.  
    12.  Message db 'Hello, world!$'
    13.  CSEG ends
    14.  end start
    UPD
    Так тебе строку нужно вывести или ASCII код символа?!
     
  16. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    KLOS: mov ah, 10h ; в AL получаем ASCII код символа
    int 16h ; в AH получаем расширенный скан код символа
    mov dl,al
    mov ah, 01
    int 21
    jmp KLOS

    не работает что-то ваше

    mov ah, 01
    int 21
     
  17. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    ASCII символа
     
  18. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Giroch
    Мало того, что переписали неправильно, так ещё и лишний вызов int 16h добавили. Это уже Ваше, а не моё. И с учётом поправки в #14.
     
  19. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    Простите, а можно по подробнее про вычесление? Я понимаю перевести с 16-ричной (ASCII как я понял) в 10-чную или какуюто ещё, но как вычислить так чтобы осталась в 16-ричной??!! вот в чём вопрос
     
  20. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    вот вот ваше в моём не работает хотя вроде всё просто.

    нет беp поправки в #14 но не выдаёт ничего вообще