Страница: 1 |
Вопрос: Как сделать ввод числа?
Добавлено: 12.09.08 06:55
Автор вопроса: Morpheus | Web-сайт: xury.zx6.ru
Сабж.
В принципе, я хотел сделать через чтение строки в память, запихивание её в регистр по кускам в 4 буквы и там через строки типа:
and eax, 000000FFh
получать значения по одной цифре, потом делать поправку на ASCII код... и.. потом поразрядно прибавлятью... жуть короче. Но могу и так.
А есть выход попроще? Желательно без вызова функций си :)
Мне надо прочитать целое беззнакоыое число в регистр eax. Можно дробное знаковое, но не обязательно ;-)
Заранее благодарен.
п.с. Пишу на NASM под Линухом
Ответить
Номер ответа: 2Автор ответа: mc-black
ICQ: 308-534-060 Вопросов: 20Ответов: 1860
Web-сайт: mc-black.narod.ru/dzp.htm Профиль | | #2
Добавлено: 19.09.08 15:09
; #########################################################################
; --------------------------------------
; This procedure was written by Iczelion
; --------------------------------------
.386
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive
include \MASM32\INCLUDE\kernel32.inc
.code
; #########################################################################
a2dw proc uses ecx edi edx esi String :DWORD
;----------------------------------------
; Convert decimal string into dword value
; return value in eax
;----------------------------------------
xor ecx, ecx
mov edi, String
invoke lstrlen, String
.while eax != 0
xor edx, edx
mov dl, byte ptr [edi]
sub dl, "0" ; subtrack each digit with "0" to convert it to hex value
mov esi, eax
dec esi
push eax
mov eax, edx
push ebx
mov ebx, 10
.while esi > 0
mul ebx
dec esi
.endw
pop ebx
add ecx, eax
pop eax
inc edi
dec eax
.endw
mov eax, ecx
ret
a2dw endp
; #########################################################################
end
Ответить
Страница: 1 |
Поиск по форуму