Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ассемблер, програмка на ассемблере 
:(
    Опции темы
Anna_Lebedeva
Дата 2.6.2007, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
geek2600
Дата 3.6.2007, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 19.11.2006

Репутация: нет
Всего: 1



немного не понял проблемы на счёт ввода пустых строк.Достасочно проверить первый символ введенной строки с 0x0.
lea eax,input
mov ecx,0h
cmp dword ptr[eax],ecx
Или я не правильно понял проблему?
PM MAIL   Вверх
geek2600
Дата 4.6.2007, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 19.11.2006

Репутация: нет
Всего: 1



а на счёт проверки буква это или число-у тебя пропущенна одна команда:
mov al,'0'
jb error
error-это метка при возникновении ошибки
PM MAIL   Вверх
geek2600
Дата 4.6.2007, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 19.11.2006

Репутация: нет
Всего: 1



опиши мне подробно что должна делать эта программа и я откомпилирую,отлажу и отправлю тебе.
PM MAIL   Вверх
geek2600
Дата 4.6.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 19.11.2006

Репутация: нет
Всего: 1



Ну вот я к этому сообщению прекрипил архив:исходник+EXE.

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  TASM.rar 2,26 Kb
PM MAIL   Вверх
geek2600
Дата 4.6.2007, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 19.11.2006

Репутация: нет
Всего: 1



ну как?
PM MAIL   Вверх
geek2600
Дата 4.6.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 19.11.2006

Репутация: нет
Всего: 1



А вот еще лучше.Качай его.

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  TASM.rar 2,56 Kb
PM MAIL   Вверх
geek2600
Дата 4.6.2007, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 19.11.2006

Репутация: нет
Всего: 1



Короче качай этот!!!!!!!!!!!!!!!!!!!!!!!!!Напиши как работает.

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  TASM.rar 2,54 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.