Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2008, 00:22   #1
AsmBeginer
Пользователь
 
Регистрация: 09.01.2008
Сообщений: 12
По умолчанию Перевод из строки в число и обратно

Здравствуйте. Приведите, пожалуйста, пример исходника на асме, как строчное (символьное) представление числа перевести в действительное число, чтоб можно было совершать над ним действия, а потом опять перевести в строчное. Если можно, асм под ДОС.
AsmBeginer вне форума Ответить с цитированием
Старый 02.03.2008, 15:15   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

посмотри вот это
rpy3uH вне форума Ответить с цитированием
Старый 03.03.2008, 14:41   #3
AsmBeginer
Пользователь
 
Регистрация: 09.01.2008
Сообщений: 12
По умолчанию

я извиняюсь, я имел ввиду по ДОС.
или подскажите, вот чтобы перевести строчное в численное, нужно от строчного отнять 48? А наоборот, чтоб получить из численного строчное, нужно прибавить 48?
AsmBeginer вне форума Ответить с цитированием
Старый 03.03.2008, 15:40   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Если ты кодиш на MASM то можеш вызывать dwtoa. Она как раз это и делает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.03.2008, 11:31   #5
AsmBeginer
Пользователь
 
Регистрация: 09.01.2008
Сообщений: 12
По умолчанию

Stilet, посмотрел. Понял как сделать. Действительно, нужно отнимать и прибавлять 48, или символ '0', который кадируется как 048 или 30h. Это я посмотрел в реализации dwtoa. Правда, сам алгоритм пока не понял, уж больно он "накручен" и по моему, в нем есть лишние строки )
AsmBeginer вне форума Ответить с цитированием
Старый 04.03.2008, 12:29   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Хм. Вот у меня завалялась старая лаба, перевода чисел до 100 на асме в строку.
Код:
         mov esi, offset Caption
	 mov eax, 82 ; Это число которое нужно перевести
	 mov ecx, 10
	 div cl
	 add ax,'00'
	 mov [esi],ax
Я не претендую (ессно) на аплодисменты, но может как идея прокатит.

Пардон, я тут точнее вспомнил и слегка поменял код )
I'm learning to live...

Последний раз редактировалось Stilet; 04.03.2008 в 12:55.
Stilet вне форума Ответить с цитированием
Старый 21.05.2010, 11:30   #7
Rikki-Tikki
Пользователь
 
Аватар для Rikki-Tikki
 
Регистрация: 02.10.2009
Сообщений: 15
По умолчанию

Цитата:
Сообщение от AsmBeginer Посмотреть сообщение
я извиняюсь, я имел ввиду по ДОС.
или подскажите, вот чтобы перевести строчное в численное, нужно от строчного отнять 48? А наоборот, чтоб получить из численного строчное, нужно прибавить 48?
а если я работаю на ТАСМе.
если отнять 30h, мы получаем численное значение - в какой системе счисления?
Rikki-Tikki вне форума Ответить с цитированием
Старый 21.05.2010, 12:57   #8
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Rikki-Tikki
ASCII кодировка цифр '0' = 30h, '1' = 31h, '2'= 32h, ..., '9'=39h отнимаешь от символа 30h и получаешь его числовое значение;
в двоичной системе счисления есть только символы '0' и '1', а '3', '4', ..., '9' нет;
в восмеричной есть символы от '0' до '7', а '8' и '9' нет;
в шестнадцатеричной к символам от '0' до '9' добавляются символы 'A'=41h, 'B'=42h, 'C'=43h, 'D'=44h, 'E'=45h, 'F'=46h от этих символов нужно отнимать уже 37h или 57h если они будут записаны маленькими буквами 'a'=61h, ..., 'f'=66h

Последний раз редактировалось Mikl___; 21.05.2010 в 13:44.
Mikl___ вне форума Ответить с цитированием
Старый 21.05.2010, 14:09   #9
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Код:
;преобразование числа из ах в десятичную строку по адресу es:di
;ax - число
;es:di - адрес буфера приемника
printdec proc

	push cx	;сохраняем регистры
	push dx
	push bx
	mov bx,10	;основание системы
	XOR CX,CX	;в сх будет количество цифр в десятичном числе
@@m1:	XOR dx,dx       ;обнудяем dx
	DIV bx		;делим число на степени 10
	PUSH DX		;и сохраняем остаток от деления(коэффициенты при степенях) в стек
	INC CX		;увеличиваем количество символов в числе
	TEST AX,AX	;преобразовали все число?
	JNZ @@m1	;если нет, то продолжить
@@m2:	POP AX		;восстанавливаем остаток от деления
	ADD AL,'0'	;преобразовываем число в ASCII символ
	STOSb		;сохраняем в буфер
	LOOP @@m2		;все цифры
	pop bx		;восстанавливаем регистры
	POP dx
	POP cx
	RET
printdec endp
Код:
;-----------------------------------------------------------------------
;Преобразование строки в число
;на входе ds:si ссылается на ASCIIZ строку, которую нужно преобразовать
; на выходе в ax - число.
;-----------------------------------------------------------------------
str2dw:
	xor dx,dx	;сумма
@lp1:	xor ax,ax
	lodsb		;берем cимвол
	test al,al	;если это нулев байт, то заканчиваем
	jz @ex
	cmp al,'9'	;Если это не цифра, то пропускаем
	jnbe @lp1
	cmp al,'0'      ;Если это не цифра, то пропускаем
	jb @lp1
	sub ax,'0'	;получаем цифровое значение
	shl dx,1	;умножаем сумму на 10
	add ax, dx
	shl dx, 2
	add dx, ax	;прибавляем текущее значение
	jmp @lp1
@ex:	mov ax,dx
	ret
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 21.05.2010, 14:41   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

alexcoder
Вот это перл!
Код:
shl dx,1	;умножаем сумму на 10
	add ax, dx
	shl dx, 2
	add dx, ax	;прибавляем текущее значение
Где вы такое откопали, признавайтесь! не понятно как, но работает!, молодца!
ax:= dx*2 + ax; dx:=dx*8; dx:=dx*8+dx*2+ax Какой у Вас право изощренный ум! Я в шоке!
эквивалентно: lea eax=[eax+edx*2] lea edx=[eax+edx*8]
"Классический" вариант
Код:
	xor dx,dx	;сумма
	mov ah,0
@lp1:	lodsb		;берем cимвол
	test al,al	;если это нулев байт, то заканчиваем
	jz @ex
	sub al,'0'	;получаем цифровое значение
	cmp al,9
	ja @lp1
	imul dx,10	;умножаем сумму на 10
	add dx, ax	;прибавляем текущее значение
	jmp @lp1

Последний раз редактировалось Mikl___; 21.05.2010 в 15:22.
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пребразовать string-строку в число и обратно. - Как? Avaj C++ Builder 16 03.02.2011 19:03
Как убрать перевод строки? Biowulf86 Помощь студентам 2 25.03.2008 11:05
Перевод строки в функцию кетчуп Помощь студентам 6 23.11.2007 17:04
Извлечь число из строки и присвоить его переменной. Adamant Общие вопросы C/C++ 3 12.11.2007 07:24
Перевод строки в матрицу Chepa Общие вопросы Delphi 14 28.01.2007 00:13