Вывести DEC на экран

Тема в разделе "WASM.BEGINNERS", создана пользователем Chuvaka4x, 2 июн 2007.

  1. Chuvaka4x

    Chuvaka4x New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2007
    Сообщения:
    15
    Как вывести десятичное 8123462 на экран?
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    по разному
    вам в какой системе? на каком языке?

    чувствуется сессия идет )
     
  3. Chuvaka4x

    Chuvaka4x New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2007
    Сообщения:
    15
    для tasma.Сессия рулит.Я считал MBR в буфер,надо считать размер жестяка и десятичным числом вывести на экран
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    кросспостинг :\
     
  5. Chuvaka4x

    Chuvaka4x New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2007
    Сообщения:
    15
    Юзаю,но найти не могу. :6 а курсак горит.
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    ну сказали же, ПОИСК. П. О. И. С. К. Что непонятного???
     
  7. Chuvaka4x

    Chuvaka4x New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2007
    Сообщения:
    15
    ну чайник реально.опера глючит на запрос поиска лепит пустые страницы
     
  8. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Код (Text):
    1. Hex2Dec proc rEAX:DWORD, pStr:DWORD
    2. LOCAL InvStr[10]: BYTE
    3.     pushad
    4.     mov eax,rEAX
    5.     mov ecx,0Ah
    6.     xor esi,esi
    7.     lea edi,InvStr
    8.  
    9. @1: xor edx,edx
    10.     div ecx
    11.     add edx,30h
    12.     mov byte ptr [edi+esi],dl
    13.     inc esi
    14.     test eax,eax
    15.     jnz @1
    16.  
    17.     mov ecx,esi
    18.     mov esi,edi
    19.     mov edi,pStr
    20. @2: movzx eax,byte ptr [esi+ecx-01]
    21.     stosb
    22.     loop @2
    23.  
    24.     mov byte ptr [edi],0
    25.     popad
    26.     ret
    27. Hex2Dec endp
    Вот код перевода числа в строку. Если надо 16 бит, переделай сам - минута делов. Какой функцией вывести не знаю, т.к. с досом давно не работал
     
  9. TheBits

    TheBits Сергей

    Публикаций:
    0
    Регистрация:
    7 апр 2006
    Сообщения:
    50
    Адрес:
    St.Petersburg
    Код (Text):
    1. buf db '8123462', 10, 13, '$'
    2.  
    3. push ax, dx
    4. lea dx, buf
    5. mov ax, 9
    6. int 21h
    7. pop ax, dx
    Печать строки на экран в досе.
     
  10. Satyr

    Satyr New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    1
    Используй FPU. Алгоритм таков: делишь число на 10, записывая остаток от деления, пока не останется ноль.
    8123462/10=812346 ;ост=2
    812346/10 =81234 ;ост=6
    81234/10 =8123 ;ост=4
    8123/10 =812 ;ост=3
    812/10 =81 ;ост=2
    81/10 =8 ;ост=1
    8/10 =0 ;ост=8
    оператор FPREM делит st(0) на st(1) и пишет остаток в st(0)
    т.е. остатки от деления выводишь в обратном порядке.
     
  11. Mikl_

    Mikl_ New Member

    Публикаций:
    0
    Регистрация:
    14 ноя 2006
    Сообщения:
    907
    Satyr если уж и использовать FPU, то на полную катушку
    Код (Text):
    1. .data
    2. Data_Int64   dq ?;64-разрядное число
    3. Data_BCD     dt ?;число в BCD-формате
    4. mesbox_text db 25 dup(0)
    5. ...
    6. .code
    7.       mov di,offset mesbox_text;куда выводить
    8.     fninit            ;сброс сопроцессора
    9.     fild Data_Int64        ;загрузить число в двоичном коде
    10.     fbstp Data_BCD        ;извлечь число в коде BCD
    11.     mov si,9               ;в десятом байте информация о знаке числа
    12. b2: cmp byte ptr [si-1+Data_BCD],0
    13.     jnz b3
    14.     dec si
    15.     jnz b2           ;пропускаем незначащие (нулевые) разряды слева
    16. b3:    mov al,byte ptr [si-1+Data_BCD];загружаем первую значащую пару разрядов
    17.     cmp al,0  ;если в старшей тетраде 0 - пропустить старшую тетраду
    18.     ja b4
    19.     add al,30h        ;младшую тетраду переводим в ASCII
    20.     stosb
    21.     dec si
    22. b4:  xor ax,ax        ;распаковываем остальные разряды числа
    23.     mov al,byte ptr [si-1+Data_BCD]
    24.     shl ax,4         ;выделяем старшую и младшую тетрады
    25.     shr al,4
    26.     add ax,3030h        ;переводим в ASCII-код и выводим в нормальном порядке
    27.     xchg ah,al
    28.     stosw
    29.     dec si
    30.     jnz b4