global _start
section .bss
strA resb 255
section .data
msgNot db "String is Wrong"
msgOk db "String is Good"
section .text
_start:
mov eax, 3
mov ebx, 0
mov ecx, strA
mov edx, 255
int 0x80
xor ebx, ebx
mov edx, strA ; адрес первого элемента строки
doCheck:
mov bl, [edx] ; символ в bl
inc edx ; указатель на следующий символ
cmp bl, 0x0 ; проверка на пустоту ячейки (если вышли из написаной строки и не было неправильных сисволов то заканчивает работу)
je printOk
cmp bl, '0'
jb mstk
cmp bl, '9'
ja mstk
jmp doCheck
mstk:
cmp bl, ' '
je prbl
cmp bl, ','
je zpt
cmp bl, '-'
je numAfMP
cmp bl, '+'
je numAfMP
jmp printNOT
prbl:
mov bl, [edx]
inc edx
cmp bl, ' '
je LastPrbl
cmp bl, '-'
je prblAndPrblORminusORplus
cmp bl, '+'
je prblAndPrblORminusORplus
cmp bl, ','
je zpt
jmp numAfprbll
numAfMP:
mov bl, [edx]
inc edx
numAfprbll:
cmp bl, '0'
jae prblNum
jmp printNOT
prblNum:
cmp bl, '9'
ja printNOT
jmp doCheck
prblAndPrblORminusORplus:
mov bl, [edx]
inc edx
cmp bl, '0'
jb printNOT
cmp bl, '9'
ja printNOT
jmp doCheck
zpt:
mov bl, [edx]
inc edx
cmp bl, '-'
je numAfMP
cmp bl, '+'
je numAfMP
cmp bl, ' '
je LastPrbl
jmp numAfprbll
LastPrbl:
mov bl, [edx]
inc edx
cmp bl, '-'
je numAfMP
cmp bl, '+'
je numAfMP
jmp numAfprbll
printNOT:
mov eax, 4
mov ebx, 1
mov ecx, msgNot
mov edx, 15
int 0x80
jmp exit
printOk:
mov eax, 4
mov ebx, 1
mov ecx, msgOk
mov edx, 14
int 0x80
exit:
mov eax, 1
xor ebx, ebx ;может ошибка, чтоб выйти нужно убрать маркер ошибки
int 0x80