Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.01.2012, 18:51   #1
vbh
Новичок
Джуниор
 
Регистрация: 05.11.2011
Сообщений: 1
Радость Помгите найти ошибку.

Помогите найти ошибку: в программе организован ввод 3-х строк и символа, если символа нет в строке содержимое массива сдвигается, а на первое место записывается символ. Программа работает, но если ввести в Строку1 - строку 0-вой длины (просто нажать Enter), то программа виснет. Если во 2-й и 3-й строке ввести 0-строку то всё работает правильно. Где ошибка?
Код:
.model small 
.data 

message1 db 'Symbol: $' 
message2 db 0ah,0dh,'Stroka1: $' 
message3 db 0ah,0dh,'Stroka2: $' 
message4 db 0ah,0dh,'Stroka3: $' 

mes1 dw 0
mes2 dw 0
mes3 dw 0

two1 db 11 dup(?), '$'
two2 db 11 dup(?), '$'
two3 db 11 dup(?), '$'
three db 1 dup(?), '$'

.stack 256h 
.code 

INPUT proc near
Xor di,di 
m1: 
mov ah,0 
Int 16h
cmp al,0 
Jne m3 
mov ah,0
int 16h
jmp m1
m3:
cmp dx,1 
Je m4 
cmp al,13 
Je quit
m4:
cmp al,33 
Jle m1 
mov [bx+di],al
Inc di 
mov ah,2 
mov dl,al 
Int 21h 
loop m1 
quit:
Ret 
INPUT endp 

MESSAGE proc near 
push ax 
push cx 
mov ah,09h 
Int 21h 
pop cx 
pop ax 
Ret 
MESSAGE endp 

main: 

mov ax,@data 
mov ds,ax 

Lea dx,message1 ;ввод
call MESSAGE 

Lea bx, three 
mov cx,1 
mov dx,1 
call INPUT 

Lea dx,message2 
call MESSAGE 

Lea bx, two1 
mov cx,9
Xor dx,dx 
call INPUT
 
mov mes1,di

Lea dx,message3
call MESSAGE 

Lea bx, two2 
mov cx,9
Xor dx,dx 
call INPUT
 
mov mes2,di 

Lea dx,message4 
call MESSAGE 

Lea bx, two3 
mov cx,9
Xor dx,dx 
call INPUT
 
mov mes3,di  ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

xor ax,ax               ; этот кусок кода повторяется 3 раза, но для разных массивов
mov cx,mes1
mov si,mes1
mov al, three[0]
leb11:
mov   bl, two1[si]
cmp bl, al
je leb31
dec     cx  
dec     si
jcxz    leb21        
jmp     leb11        
leb21:
mov cx,mes1
mov si,mes1
leb41:
mov bl,two1[si]
inc si
mov two1[si], bl
dec     si
dec     cx  
dec     si
jcxz    leb51       
jmp     leb41      
leb51:
mov two1[0], al
leb31:

xor ax,ax
mov cx,mes2
mov si,mes2
mov al, three[0]
leb12:
mov   bl, two2[si]
cmp bl, al
je leb32
dec     cx  
dec     si
jcxz    leb22        
jmp     leb12        
leb22:
mov cx,mes1
mov si,mes1
leb42:
mov bl,two2[si]
inc si
mov two2[si], bl
dec     si
dec     cx  
dec     si
jcxz    leb52       
jmp     leb42      
leb52:
mov two2[0], al
leb32:
 
xor ax,ax
mov cx,mes3
mov si,mes3
mov al, three[0]
leb13:
mov   bl, two3[si]
cmp bl, al
je leb33
dec     cx  
dec     si
jcxz    leb23        
jmp     leb13        
leb23:
mov cx,mes1
mov si,mes1
leb43:
mov bl,two3[si]
inc si
mov two3[si], bl
dec     si
dec     cx  
dec     si
jcxz    leb53       
jmp     leb43      
leb53:
mov two3[0], al
leb33:
 
Lea dx,message2   ;вывод
call MESSAGE 
Lea dx, two1
call MESSAGE

Lea dx,message3 
call MESSAGE 
Lea dx, two2
call MESSAGE

Lea dx,message4
call MESSAGE 
Lea dx, two3 
call MESSAGE     ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

mov ah,0 
int 16h
mov ax,4c00h 
Int 21h 
end main

Последний раз редактировалось vbh; 01.01.2012 в 19:06.
vbh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти ошибку Яська Помощь студентам 1 04.04.2010 17:23
Найти ошибку stanBRY Общие вопросы C/C++ 17 29.03.2010 23:16
Найти ошибку Uvaroff Помощь студентам 3 13.01.2010 01:45
Помгите найти ошибку (MV C++) JOFRIF Общие вопросы C/C++ 8 08.10.2009 03:28
найти ошибку rUs_LAN Общие вопросы C/C++ 8 14.05.2009 12:02