include IO.ASM data segment Big db 'Error! U entered more than 100 symbols! Enter again plz$' X db 101 dup (?) Src db 'Old text: $' Rule db 'Rule: $' New db 'New text: $' data ends stack segment stack db 128 dup (?) stack ends code segment assume cs: code, ds: data, ss: stack start: mov ax, data mov ds, ax ;Ââîä òåêñòà Retry: outch '>' mov cx, 1 sub si, si Next: inch X[si] cmp X[si], '.' je EndInp cmp cx, 64h jae NdLess inc cx inc si jmp Next NdLess: lea dx, Big outstr flush newline jmp Retry EndInp: mov X[si], '$' lea dx, Src outstr lea dx, x outstr newline lea ax, x push ax call Prop lea dx, Rule outstr outint ax newline cmp ax, 1 jne LRule2 lea ax, x push ax call Rule1 jmp End4 Art3as (15:29:44 01/05/2010) LRule2: lea ax, x push ax call Rule2 End4: lea dx, New outstr lea dx, x outstr newline finish ;Function checks the property ;ax=1 - true. ax=2 - false Prop proc push bp mov bp, sp push bx push si sub si, si mov bx, [bp+4] CheckD: cmp [bx][si], byte ptr '0' jb No cmp [bx][si], byte ptr '9' ja No cmp si, 0 jne Ok Next2: inc si cmp byte ptr [bx][si], '$' jne Next2 sub si, 1 mov al, [bx][si] jmp CheckD Ok: cmp al, [bx] je No mov ax, 1 jmp End1 No: mov ax, 2 End1: pop si pop bx pop bp ret 2*2 Prop endp Rule1 proc push bp mov bp, sp push bx push si push cx sub si, si mov bx, [bp+4] Next3: cmp [bx][si], byte ptr 'a' jb No2 cmp [bx][si], byte ptr 'z' ja No2 mov cx, 'a' sub [bx][si], cx mov cx, 'A' add [bx][si], cx No2: inc si cmp [bx][si], '$' jne Next3 pop cx pop si pop bx pop bp ret 2*2 Rule1 endp Rule2 proc push bp mov bp, sp push bx push si push cx push ax sub si, si mov bx, [bp+4] Next4: cmp byte ptr [bx][si+1], '$' je End5 mov al, [bx][si+1] cmp al, [bx][si] jne Not1 mov cx, si Retry1: mov byte ptr [bx][si], al inc si mov al, [bx][si+1] cmp byte ptr [bx][si+1], '$' je GG jmp Retry1 GG: mov byte ptr [bx][si], al mov si, cx jmp Next4 Not1: inc si jmp Next4 End5: pop ax pop cx pop si pop bx pop bp ret 2*2 Rule2 endp code ends end start