Другие языки программирования и технологии

Ввод чисел в ASM

Подскажите, пожалуйста, как работать в ассемблере с введенной строкой работать дальше как с десятичным числом? Ну то есть нужно что-то вроде Ascii2Dec.Заранее спасибо
PUBLICS2L

COMMENT |

Подпрограмма преобразования строки в число. Числа -
длинные целые (LongInt в Паскале, long в Cи, DWORD в ассемблере) .

(C) 1992 А. Ильин
|
;==============================================================================
S2Lprocnear

COMMENT |

Преобразует строку, которая должна содержать текстовое представление
десятичного целого числа (возможно, со знаком) без пробелов в начале и
внутри, в численное представление (DWORD или LongInt).

Преобразование продолжается либо до конца строки, либо до первого отличного
от цифры символа (если строка начинается с нецифрового символа, в результате
получится 0).

Вход: DS:SI = адрес начала исходной строки,
CX= длина строки в байтах.

Выход: CF = 0 - Ошибок нет, DX:AX содержит преобразованное число;
CF = 1 - Ошибка в строке, SI указывает на следующий за ошибочным
символ, DX:AX = 0.

Портит: AX, BX, CX, DX, DI, SI;
очищает флаг Direction.

Ограничения: -2147483648 не считается правильным числом.
|
jcxzS2L@A
xorax, ax
cwd; DX := 0
xordi, di
cmpbyte ptr ds:[si], '+'
jeS2L@1
cmpbyte ptr ds:[si], '-'
jneS2L@2
incdi; set flag for negative number
S2L@1:
incsi
deccx
jcxzS2L@A
S2L@2:
movbl, ds:[si]
subbl, 3Ah
addbl, 0Ah
jnbS2L@3
testdh, 0F0h
jneS2L@A
pushbx; BL = next digit
shlax, 1
rcldx, 1
pushdx
pushax; DX:AX * 2
shlax, 1
rcldx, 1
shlax, 1
rcldx, 1; DX:AX * 8
popbx
addax, bx
popbx
adcdx, bx; DX:AX * 10
popbx
xorbh, bh
addax, bx; add next digit
adcdx, 0
jsS2L@A; overflow
incsi
loopS2L@2
S2L@3:
decdi; negative ?
jnzS2L@4
notax; convert to negative
notdx
addax, 1
adcdx, 0
S2L@4:
clc; conversion OK
ret
S2L@A:
xorax, ax
cwd
stc; error occured
ret

S2Lendp
Алексей Макаров
Алексей Макаров
40 192
Лучший ответ
ввод с клавы 22h или 1h это строка помешаемая куда-то там и чёта-там хранит адресс и смешение этой строки
Андрей Мацкевич можно чуть подробнее? желательно с кодом.