Помощь - Поиск - Пользователи - Календарь
Полная версия: Вывод чисел
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
CMOS
Как в вывести числа в Ассемблере? Можно, конечно, взять число поделить на 10, к остатку прибавить 30h, затем частное снова поделить на 10 и т.д. Кстати, я на форуме видел что-то подобное. Но неужели мелкомягкие не предусмотрели для этого дела какой-нибудь функции?
volvo
Цитата(CMOS @ 20.05.2006 14:19)
Как в вывести числа в Ассемблере? <...> Но неужели мелкомягкие не предусмотрели для этого дела какой-нибудь функции?
Во-первых, при чем здесь ассемблер и "мелкомягкие"? Вместо того, чтоб возмущаться, лучше бы назвал компилятор, которым пользуешься. MASM? Существует ассемблер НЕ только от MicroSoft... Возьми, например, TASM (или FASM, или NASM), и попробуй на нем сделать что-то...
CMOS
Когда я вспоминал Майкрософтовцов я имел ввиду прерывания >21h.
Компилятор TAsm.
FreeMan
wsprintf вроде имя этой функции. туда передается указатель на выходной буфер, на формат. строку... там не только числа в строку можно превратить. вобщем МСДН!
CMOS
Цитата(FreeMan @ 23.05.2006 19:18) *

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

Ты сейчас какой компилятор имел ввиду? Виндозовский?
Работаю под 16 бит в TAsm-e строго!
CRASH
Цитата(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
CMOS
Да пробовал я это раньше. Работает только с байтами. Для слов подогнать не смог.
Ладно, вспомним старую добрую математику. Так надежней. Вот код (для 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
Malice
А вот вывод 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
FreeMan
Почитай
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.