![]() |
|
|
![]()
|
|
| Anna_Lebedeva |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 20.5.2007 Репутация: нет Всего: нет |
Ребята помогите пожалуйста обработать ошибки в программе(ввод пустых строк,ввод не чисел).У меня программа не обрабатывает никаких ошибок.
Также если не сложно сделайте повторный запрос на ввод. Помогите больше не на кого надеяться!!!!!!!! Вот листинг программы. dosseg .model small .stack 100h .data ;************************* ;РАЗДЕЛ ДАННЫХ cr equ 13 lf equ 10 nextln db cr,lf,'$' txt1 db lf,cr,'Input numbers quantity: $' txt2 db lf,cr,'Input N$' txt3 db ' number: $' txt4 db lf,cr,lf,cr,'Result:',lf,cr,'$' txt5 db '; $' txt6 db lf,cr,'No numbers!$' error db ? error1 db cr,lf,cr,lf,'ERROR! Wrong number! (-32768...32768)',cr,lf,'$' error2 db cr,lf,cr,lf,'ERROR! Wrong numbers quantity! (2...30)',cr,lf,'$' ;------------------------ maxlen equ 7 dbuff db maxlen dblen db ? dbstr db maxlen+1 dup(?) fact dw 10 number dw ? mnumber equ 30 ;------------------------ divis dw 10 snumber db 5 dup(?),'$' ;------------------------ cnt dw ? array dw maxlen dup(?) ;------------------------ var db ? ;-------------------------------------------------------- ;НАЧАЛО ПРОГРАММЫ .code mov ax,@data mov ds,ax mov dx,offset txt1 call sprint call dinput cmp dblen,0 je exit cmp error,0 jne exit cmp number,1 jbe m1 cmp number,mnumber ja m1 mov ax,number mov cnt,ax call input cmp dblen,0 je exit call result jmp exit ;--------------- m1: mov dx,offset error2 ;загружаем адрес сообщения об ошибке call sprint exit: ;ЗАВЕРШЕНИЕ ПРОГРАММЫ mov ah,4ch int 21h ;-------------------------------------------------------- ;=======ПОДПРОГАММЫ======= ;РАЗДЕЛ ПОДПРОГРАММ result proc near ;подпрограмма вывода результатов mov var,1 mov cx,cnt dec cx mov si,offset array res2: test word ptr [si],1 ;проверяем четность числа по состоянию младшего бита jz res3 test word ptr [si+2],1 jnz res3 mov var,2 jmp res4 res3: add si,2 ;переходим к следующему числу в массиве (увеличиваем адрес) loop res2 res4: mov dx,offset txt4 ;загружам адрес строки call sprint mov cx,cnt mov si,cnt dec si shl si,1 add si,offset array mov dx,offset txt5 xor bx,bx res7: mov ax,[si] ;загружаем число из массива cmp var,1 jne res5 cmp ax,0 jge res6 call dprint call sprint inc bx jmp res6 res5: cmp ax,0 ;проверяем знак числа jl res6 call dprint call sprint inc bx res6: sub si,2 ;переходим к предыдующему числу в массиве (уменьшаем адрес) loop res7 or bx,bx jnz res0 mov dx,offset txt6 call sprint res0: ret ;выход из подпрограммы result endp input proc near ;подпрограмма ввода последовательности чисел mov cx,cnt mov si,offset array inp1: mov dx,offset txt2 ;загружам адрес строки call sprint mov ax,cnt sub ax,cx inc ax call dprint mov dx,offset txt3 call sprint call dinput cmp dblen,0 je inp0 cmp error,0 jne inp1 mov ax,number mov [si],ax add si,2 loop inp1 inp0: ret ;выход из подпрограммы input endp dprint proc near ;подпрограмма печати числа push cx dx si cmp ax,0 jge dpr4 neg ax push ax mov ah,2 mov dl,'-' int 21h pop ax dpr4: mov cx,5 ;загружаем количество получаемых цифр-символов из числа mov si,offset snumber+4 dpr1: xor dx,dx ;обнуляем регистр div divis add dl,'0' mov [si],dl dec si loop dpr1 mov cx,4 mov si,offset snumber dpr2: cmp byte ptr [si],'0' ;сравниваем символ с '0' jne dpr3 inc si loop dpr2 dpr3: mov dx,si ;загружаем адрес, с которого будет выводится число call sprint pop si dx cx ret dprint endp dinput proc near ;подпрограмма ввода одного числа push cx si mov error,1 mov ah,0ah mov dx,offset dbuff int 21h mov cl,dblen cmp cl,0 je din1 xor ch,ch mov si,offset dbstr mov number,0 cmp byte ptr[dbstr],'-' jne din2 inc si dec cx or cx,cx jz din3 din2: mov ax,number ;загружаем текущее полученное число mul fact mov number,ax or dx,dx jnz din3 mov al,[si] sub al,'0' cmp al,9 ja din3 xor ah,ah add number,ax jc din3 inc si loop din2 cmp number,32768 ja din3 cmp byte ptr[dbstr],'-' jne din1 neg number din1: mov error,0 ;очищаем признак ошибки din3: cmp error,0 ;проверяем наличие ошибки je din0 mov dx,offset error1 call sprint din0: pop si cx ;восстанавливаем регистры из стека ret dinput endp sprint proc near ;подпрограмма печати строки mov ah,9 int 21h ret sprint endp end ;КОНЕЦ ПРОГРАММЫ Это сообщение отредактировал(а) Anna_Lebedeva - 2.6.2007, 19:00 |
|||
|
||||
| geek2600 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 19.11.2006 Репутация: нет Всего: 1 |
немного не понял проблемы на счёт ввода пустых строк.Достасочно проверить первый символ введенной строки с 0x0.
lea eax,input mov ecx,0h cmp dword ptr[eax],ecx Или я не правильно понял проблему? |
|||
|
||||
| geek2600 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 19.11.2006 Репутация: нет Всего: 1 |
а на счёт проверки буква это или число-у тебя пропущенна одна команда:
mov al,'0' jb error error-это метка при возникновении ошибки |
|||
|
||||
| geek2600 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 19.11.2006 Репутация: нет Всего: 1 |
опиши мне подробно что должна делать эта программа и я откомпилирую,отлажу и отправлю тебе.
|
|||
|
||||
| geek2600 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 19.11.2006 Репутация: нет Всего: 1 |
Ну вот я к этому сообщению прекрипил архив:исходник+EXE.
Присоединённый файл ( Кол-во скачиваний: 5 )
TASM.rar 2,26 Kb |
|||
|
||||
| geek2600 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 19.11.2006 Репутация: нет Всего: 1 |
ну как?
|
|||
|
||||
| geek2600 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 19.11.2006 Репутация: нет Всего: 1 |
||||
|
||||
| geek2600 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 19.11.2006 Репутация: нет Всего: 1 |
Короче качай этот!!!!!!!!!!!!!!!!!!!!!!!!!Напиши как работает.
Присоединённый файл ( Кол-во скачиваний: 10 )
TASM.rar 2,54 Kb |
|||
|
||||
![]()
|
| Правила форума "Asm для Windows/DOS" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для Windows/Dos | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |