Другие языки программирования и технологии
Ввод чисел в 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
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
ввод с клавы 22h или 1h это строка помешаемая куда-то там и чёта-там хранит адресс и смешение этой строки
Андрей Мацкевич
можно чуть подробнее? желательно с кодом.
Похожие вопросы
- После ввода числа определить слово. PHP.
- Набираю в TURBO Pascal самую обычную программу (решение заданных чисел) но почему то при вводе числа 3,14(и всех дробей)
- даны 3 разл целых числа a,b,c используя оператор GOTO составить программу для ввода чисел в порядке убывания
- НАПИСАТЬ ПРОГРАММУ В ПАСКАЛЬ! Нахождение суммы чисел в матрице, ввод чисел осуществить из файла matrix.txt вывод на экран.
- Помогите составить прогу в паскале: А в степени N, чтобы высчитывала ответ при вводе числа и её степени.Заранее спасиб
- Как на паскале написать код программы,которая при вводе числа,выводит его словами?
- Система ввода правильного числа в С++
- Какой ЯП лучше в освоении? ASM или ЯП высокого уровня?
- С++ Проверка на некорректный ввод значения переменной
- Язык ввода