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

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

  1. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    что вообще значит записать числов строку? в какой систееме исчесления получим результат?
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Giroch
    Естесственно не выдаёт. Ждёт ведь нажатия клавиши.
    Пусть в al лежит число 60.
    1) Помещаете в другой регистр цифру 6 (настолько простой арифметикой, что я оставляю эту задачу на Вас)
    2) смотрите по таблице из #2: ага, 6 должна превратиться в 54, т.е. заменяем 6 на 54 (замена тоже очень простой арифметикой, и реальная таблица здесь, естесственно, не нужна)
    3) Записываете 54 либо во временный буфер (будущая строка) либо сразу на экран, например, как в #10.
    Аналогично вычленяем нуль. И т.д., пока цифры не закончатся.
     
  3. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    На клавиши то я нажимал
     
  4. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    ну вот теперь вижу реальную сторку - последовательность кодов каждой цыфры (СПАСИБО) только их кажется наоборот надо будет выдавать на экран. Но вот с элементарной арифметикой сложнеее :dntknw: нельзя ли вообще на пальцах? я имею ввиду общую закономерность перещота символов в ASCII, а не конкретно "60"
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Giroch
    Алгоритм, чтобы не пришлось выводить в обратном порядке:

    1. Находим остаток от деления исходного числа на 10 (или 16, если хотим в 16-ричном представлении).
    2. Запихиваем найденный остаток в стек.
    3. Инкрементируем счётчик цифр.
    4. Делим число на десять (на самом деле это уже сделано первым пунктом, если вывод предполагается в десятичной системе).
    5. Если частное не равно нулю, переходим к пункту 1. Иначе переходим к выводу на экран (начиная с пункта 6).

    6. Вынимаем последнюю записанную цифру из стека.
    7. Добавляем к ней 48 (это для вывода в десятичном представлении, для вывода в 16-ричном на грамм сложнее).
    8. Выводим полученное число (оно уже является кодом символа) на экран. Например, как в #10.
    9. Декрементируем счётчик цифр.
    10. Если счётчик цифр не равен нулю, то переходим к пункту 6. Иначе закругляемся.
     
  6. Giroch

    Giroch New Member

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

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Giroch
    Да не. Там сначала был ответ на пост #23. Потом я увидел пост #24 и решил сразу на него ответить.
     
  8. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    это я уже читал непонятно вот что коды ASCII это в какай системе 10 или 16 по моему их просто пронумировали

    цифра | 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


    48; 49: 50; 51 и т.д. Какая ж тут система счисления??
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Giroch
    Система счисления существует только в Вашем (и моём, и любого другого человека) воображении. Если вопрос в том, в какой системе счисления я имел в виду числа из таблицы, то в десятичной. Чаще всего подразумевается десятичная система, если в представлении числа не указано обратное: с помощью префикса (0x , например) или суффикса (h, например).
     
  10. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Я вообще удивляюсь, как можно простой вопрос растянуть на 30 постов? )
     
  11. Sholar

    Sholar New Member

    Публикаций:
    0
    Регистрация:
    16 окт 2011
    Сообщения:
    189
    l_inc наверное очень терпеливый человек, у меня уже давно сдали бы нервы)
     
  12. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Сессия :) Эта темка еще приличная. Про эллипс вообще месяц уговаривали правильно написать, а не рисовать квадратно-гнездовым :)
     
  13. Giroch

    Giroch New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2011
    Сообщения:
    48
    Может вопрос и прост, но досих пор никто неуловил его суть! Попробую ещо разок.

    цифра | 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


    В AL имеем "57". на экране нужно получить тоже "57", а не "9" как следует из таблички.
     
  14. Mikl___

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

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Giroch
    в AL число равное 57, чтобы вывести его на экран нужно 57 разделить на 10 к частному (=5) и остатку (=7) добавить число 48 и из чисел 53(=5+48) и 55(=7+48) создать строку и ограничить ее символом "$", адрес строки передать в DX и вывести строку на экран 9 функцией 21h прерывания
     
  15. Giroch

    Giroch New Member

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

    Всем огромное спасибо за терпение.
    Тему можно закрывать.
     
  16. l_inc

    l_inc New Member

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

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Уже бы дали человеку ссылку или показали подпрограмму.

    Код (Text):
    1. ; ax - 16-разрядное число для перевода
    2. ; ds:si - указатель на буфер в 5 байт или 6 байт (если записывается терминатор)
    3. usword:
    4.         mov bx,10
    5.         xor cx,cx
    6. @@:
    7.         xor dx,dx
    8.         div bx
    9.         inc cx
    10.         push dx
    11.         and ax,ax
    12.         jnz short @b
    13. @@:
    14.         pop ax
    15.         add al,"0"
    16.         mov [si],al
    17.         inc si
    18.         loop @b
    19. ;        mov [si],cl ; терминатор при необходимости
    20.         ret
     
  18. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Phantom_84
    И как же мы сразу не догадались. :) Приводили подробные пояснения, алгоритмы, пытались дать возможность самому написать, а оказывается надо было просто код привести.
     
  19. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Вывод:
    Код (Text):
    1. ; ds:dx - указатель на нольтерминальную строку
    2. print:
    3.   cld
    4.   push ds
    5.   pop es
    6.   mov di,dx
    7.   mov ax,4000h
    8.   mov bx,1 ; STDOUT
    9.   mov cx,0FFFFh
    10.   repne scasb
    11.   not cx
    12.   dec cx
    13.   int 21h
    14.   ret
    В нашем случае можно сделать проще:
    Код (Text):
    1.   mov si,number
    2.   call usword
    3.   mov ah,40h
    4.   mov bx,1
    5.   lea cx,[si-number]
    6.   mov dx,number
    7.   int 21h
    8.   ...
    9. number:
    10.   rb 5
     
  20. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    I_inc, по поводу элементарной вещи устроили обсуждение на две страницы. Сразу бы дал свой алгоритм вместе с подпрограммой и тема бы была закрыта.