Всем доброго вечера!
Написал процедуру для перевода целого положительного числа в строку, но у меня программа крушится на операции деления (
div). Что у меня не так? Вот весь код:
Код:
; ********************************************************
; П Р О Ц Е Д У Р А
; ********************************************************
; -------------------------------------------------------{
; Название: UnsignedNumberToString()
; Описание: Преобразование 32-битного числа в строку
; Вход: EAX - 32-битное число
; Выход: EDI - указатель на строку
; ECX - количество символов в строке
; --------------------------------------------------------
UnsignedNumberToString:
mov EDI,string1
mov ECX,0
mov EBX,10
UnsignedNumberToString__Label_Div:
div EBX
add EDX,48
mov [EDI],byte DL
inc EDI
inc ECX
cmp EAX,0
jz UnsignedNumberToString__Label_NoDiv
jmp UnsignedNumberToString__Label_Div
UnsignedNumberToString__Label_NoDiv:
cmp ECX,1
jz UnsignedNumberToString__Label_NoBuild
jmp UnsignedNumberToString__Label_Build
UnsignedNumberToString__Label_Build:
mov ESI,string1
mov EDI,string2
mov EBX,0
UnsignedNumberToString__Label_Build_Copy:
mov EDX,ECX
sub EDX,EBX
sub EDX,1
add ESI,EBX
add EDI,EDX
mov AL,byte [ESI]
mov [EDI],byte AL
inc EBX
cmp ECX,EBX
jz UnsignedNumberToString__Label_BuildComplete
jmp UnsignedNumberToString__Label_Build_Copy
UnsignedNumberToString__Label_BuildComplete:
mov EDI,string2
jmp UnsignedNumberToString__Label_End
UnsignedNumberToString__Label_NoBuild:
mov EDI,string1
UnsignedNumberToString__Label_End:
ret
; -------------------------------------------------------}
; ********************************************************
; Д А Н Н Ы Е
; ********************************************************
UnsignedNumberToString__Data:
string1 db 0,0,0,0,0,0,0,0,0,0,0
string2 db 0,0,0,0,0,0,0,0,0,0,0