IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> Вывод чисел
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


Как в вывести числа в Ассемблере? Можно, конечно, взять число поделить на 10, к остатку прибавить 30h, затем частное снова поделить на 10 и т.д. Кстати, я на форуме видел что-то подобное. Но неужели мелкомягкие не предусмотрели для этого дела какой-нибудь функции?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата(CMOS @ 20.05.2006 14:19)
Как в вывести числа в Ассемблере? <...> Но неужели мелкомягкие не предусмотрели для этого дела какой-нибудь функции?
Во-первых, при чем здесь ассемблер и "мелкомягкие"? Вместо того, чтоб возмущаться, лучше бы назвал компилятор, которым пользуешься. MASM? Существует ассемблер НЕ только от MicroSoft... Возьми, например, TASM (или FASM, или NASM), и попробуй на нем сделать что-то...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


Когда я вспоминал Майкрософтовцов я имел ввиду прерывания >21h.
Компилятор TAsm.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


wsprintf вроде имя этой функции. туда передается указатель на выходной буфер, на формат. строку... там не только числа в строку можно превратить. вобщем МСДН!


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


Цитата(FreeMan @ 23.05.2006 19:18) *

wsprintf вроде имя этой функции. туда передается указатель на выходной буфер, на формат. строку... там не только числа в строку можно превратить. вобщем МСДН!

Ты сейчас какой компилятор имел ввиду? Виндозовский?
Работаю под 16 бит в TAsm-e строго!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 1
Пол: Мужской

Репутация: -  0  +


Цитата(CMOS @ 20.05.2006 18:19) *

Как в вывести числа в Ассемблере? Можно, конечно, взять число поделить на 10, к остатку прибавить 30h, затем частное снова поделить на 10 и т.д. Кстати, я на форуме видел что-то подобное. Но неужели мелкомягкие не предусмотрели для этого дела какой-нибудь функции?


А что тут сложного. Всё очень просто как 2x2. Напрмер, имеется значение в bl и переменная cnt - byte:


mov al, bl
aam ;корректируем значение в ax деля число на 10. (частное в al, остаток в ah)
or 3030h ;преобразуем число в символ таблицы ASCII путём "дорисовки" символа <3>
mov cnt, ah
mov cnt+1, al



Думаю тут всё просто и понятно.

Цитата(CMOS @ 20.05.2006 18:19) *

Как в вывести числа в Ассемблере? Можно, конечно, взять число поделить на 10, к остатку прибавить 30h, затем частное снова поделить на 10 и т.д. Кстати, я на форуме видел что-то подобное. Но неужели мелкомягкие не предусмотрели для этого дела какой-нибудь функции?


Забыл сказать: для простого вывода на монитор числа просто после помещения нужного значения в dl прибавляем к нему 30h (add dl, 30h).

Ну сейчас похоже и всё smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


Да пробовал я это раньше. Работает только с байтами. Для слов подогнать не смог.
Ладно, вспомним старую добрую математику. Так надежней. Вот код (для 3х значных чисел), если кого интересует:
Код
mov ax, x
mov d, 100
mov cx, 3
repeat:
    mov dl, d
    div dl

    mov dl, al
    add dl, 30h
    mov al, ah
    mov ah, 0
    push ax
    mov ah, 2
    int 21h
    mov dl, 10
    
    mov ah, 0
    mov al, d
    div dl
    mov d, al
    pop ax
loop repeat
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


А вот вывод 16-ричных чисел, даже попроще:

Код
mov       eax,01234DEADh
mov       cl,8
@1: rol       eax,4
push      eax
and       al,0Fh
cmp       al,0Ah
sbb       al,69h
das
int       029h
pop       eax
loop      @1
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


Почитай


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 23.08.2017 22:40
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"