[asm] не работает прога

Vitaminru

Люди! Я не могу решить такую задачу.
Дан текст(непустая последовательность литер содержащий не более 100 элементов, с точкой в качестве признака конца текста.
Требуется написать программу на языке Ассемблера. Программа вводит с клавиатуры текст и записывает его в память ЭВМ. Программа определяет, обладает ли текст заданным свойством: Текст начинается латинской буквой и окончивается латинской буквой. Проверку оформить как процедуру COND с парамерами: BX - адрес начала массива с текстом , CX — количество литер в тексте. Результат процедуры: 1 —если условие выполнено и 2 --- если не выполнено, поместить в AX. Если текст обладет заданным свойством, то преобразоватьт текст следующим образом: Заменить каждую заглавную латинскую букву на следующую по алфавиту букву( A на B, B на C, C на D ......Z заменять на A). Преобразование оформить как процедуру RULE1 с параметрами: BX —адрет начала массива с текстом , CX — количество литер в тексте. Иначе преобразовть текст следующим образом : Удвоить каждую литеру
текста. Преобрзование оформить как процедуру RULE2 с параметрами: BX -адрес начала массива с текстом, CX — количество литер в тексте. После преобразования вывести на экран дисплея преобразонный текст, а также номер примененого правила.
Пытался решить вот, так, но что-то не получается,пожалуйста помогите:
INCLude io.asm
stack segment stack
     dw 128 dup (?)
stack ENDS
data segment
    X db 200 dup (?)
    Y dw 255 dup (0)
    n dw 0
    n1 db 0
    n2 db 0
    n3 db 0
    temp dw ?
data ENDS
code segment
     assume ss:stack, DS:data, cs:code
    
cond PROC
PUSH BX
PUSH DX
MOV CX, 0
mov n3, 0
mov temp, bx
outint cx
newline
     condL : INCH DL
CMP DL, '.'
JE condd
MOV BYTE PTR [BX], DL
     inc bx
inc cx
jmp condl ;input

condd :
     push bx
mov bx, temp
mov dl, byte ptr [bx]
     mov n1, 'A'
mov n2, 'a'
condl1 :
cmp dl, n1
je condl2
inc n1
cmp n1, 'Z'
jna condl1
    
condl3 :
cmp dl, n2
je condl2
inc n2
cmp n2, 'z'
jna condl3
jmp condl4
condl2 :
newline
  inc n3
condl4 : pop bx
mov byte ptr dl, [bx-1]
newline
mov n1, 'A'
mov n2, 'a'

condl5 :
cmp dl, n1
je condl6
inc n1
cmp n1, 'Z'
jna condl5
    
condl7 :
cmp dl, n2
je condl6
inc n2
cmp n2, 'z'
jna condl7
jmp condl8

condl6 :
  inc n3
condl8 :

cmp n3, 2
jne condl9
mov ax, 1
jmp condfin
condl9 : mov ax, 2
condfin : mov dl, n3
mov dh, 0
POP DX
POP BX

RET
cond ENDP
    
ruLe1 proc
push AX
push BX
push CX
push DX
ruLe1L : cmp byte ptr [BX], 'Z'
ja ruLe1L1
     cmp byte ptr [BX], 'A'
jb ruLe1L1
cmp byte ptr [BX], 'Z'
je ruLe1L2
add byte ptr [BX], 1
ruLe1L1 : inc BX;
     loop ruLe1L
jmp ruLe1fin
ruLe1L2 : mov byte ptr [BX], 'A'
jmp ruLe1L1
ruLe1fin :
pop DX
pop CX
pop BX
pop AX
ret
ruLe1 endp
ruLe2 PROC
PUSH DI
PUSH SI
PUSH AX
PUSH DX
PUSH BX
PUSH CX
outch '7'
newline

push cx
push bx
     mov ax, cx
add ax, ax
dec ax
mov si, cx
rule2L1: mov dl, byte ptr[bx]
mov byte ptr[bx+si], dl
inc bx
loop rule2L1

pop bx
pop cx
mov si, 0
mov di, cx
;12345678
rule2l2: mov dl, byte ptr[bx+di]
mov byte ptr[bx+si], dl
mov byte ptr[bx+si+1], dl
add si, 2
inc di
outch dl
newline
  
     loop rule2L2
    
     POP CX
add cx, cx
outint cx
newline
POP BX
POP DX
POP AX
POP SI
POP DI
RET
ruLe2 ENDP
start:
     mov AX,data
     mov DS,AX
     lea BX, x
     newline
     call cond
outch '='
outint ax
     newline
     cmp AX, 1
     je torule1
     call ruLe2
     jmp L1
torule1 :
     call ruLe1
L1 : newline
outint cx
newline
L2 : mov dl, byte ptr [BX]
outch dl
inc BX
loop L2
newline
     OUTInt aX
newline
 finish
code ends
 end start

tashka

такие вещи лучше постить на ФДСном форуме, к тому времени когда вмкашники переезжают в ГЗ, они забывают ассемблер.

evgen5555

Что именно не получается?
Оставить комментарий
Имя или ник:
Комментарий: