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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2009, 23:45   #1
Варвара
Новичок
Джуниор
 
Регистрация: 15.12.2009
Сообщений: 2
По умолчанию как ввести с клавиатуры двузначные и отрицательные числа - Assembler

Пожалуйста!!! помогите с дз...

Задан одномерный массив натуральных чисел. Массив вводится с клавиатуры. Размерность больше 10; необходимо наличие как положительных, так и отрицательных чисел. Найти сумму ненулевых элементов в этом массиве. Результат вывести на экран.

очень сроооочно...

хотя бы подскажите, как ввести с клавиатуры двузначные и отрицательные числа...

Последний раз редактировалось Варвара; 16.12.2009 в 00:15.
Варвара вне форума Ответить с цитированием
Старый 16.12.2009, 00:38   #2
Stepler
Форумчанин
 
Аватар для Stepler
 
Регистрация: 03.02.2008
Сообщений: 213
По умолчанию

Напрямую никак! Числа нужно вводить как строку символов а потом их из строки переводить в числовой формати, для отрицательних чисел их нужно в дополнительний код переводить, или почитай про арифметические операции над числами в формате ASCII но это тоже не из легких методов, плюс в том что числа видно в отладчике так как они есть в жизни в десятичной системе, минус то что муторно это легко ошибится и постоянно делать коррекцию результата после каждой операции... Вобщем легких путей нет, муторно это... Да и вобще ручной ввод чисел на ассемблере не простое дело!
Пишу программы на заказ, контакты под аватаром!
Отзывы тут
Stepler вне форума Ответить с цитированием
Старый 16.12.2009, 00:55   #3
Олвин
Экспериментатор
Форумчанин
 
Аватар для Олвин
 
Регистрация: 16.04.2008
Сообщений: 218
По умолчанию

Зачем с клавиатуры? Не надо мучить программиста и пользователя! Заполняем массив рандомайзом...
Для создания сложных вещей не нужны сложные интерфейсы. (с) Линус Торвальдс
Олвин вне форума Ответить с цитированием
Старый 16.12.2009, 10:10   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Зачем с клавиатуры?
не учите плохому!
в задании же ясно сказано:
Цитата:
Массив вводится с клавиатуры.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.12.2009, 10:45   #5
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

За ввод с клавиатуры отвечает функция 0ah int 21h:
INT 21 - BUFFERED KEYBOARD INPUT
AH = 0AH
DS:DX = ADDRESS OF BUFFER
FIRST BYTE OF BUFFER MUST HAVE MAX LENGTH
ON RETURN SECOND BYTE HAS ACTUAL LENGTH

Но она возвращает по адресу в DS:DX текстовую строку, которую нужно будет посимвольно разобрать и преобразовать в число со знаком. Согласен со Stepler - муторное это дело.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 20.12.2009, 14:29   #6
Варвара
Новичок
Джуниор
 
Регистрация: 15.12.2009
Сообщений: 2
По умолчанию

.model small
.stack 100h
.data

MaxLen db 5
Len db 0
buff db 5 dup (0)
minus db 0
mas db 10 dup (0)
sum db 0
min db 7Fh

ErrInpMsg db 'Error Input!!!',13,10,'$'
InpMsg db 'Input '
Count db 0,' element (-128..127) :',13,10,'$'
Otvet db 'Otevet: $'

.code
start:
mov ax,@data
mov ds,ax
mov es,ax
xor ax,ax

call input
call Do
call output

mov ah,8
int 21h

mov ax,4c00h
int 21h

input proc
xor di,di
mov cx,10
inputLoop:
call inputEl
inc di
loop inputLoop
ret
endp

inputEl proc
push cx
inputElMain:
mov mas[di],0
call InputMsg
mov ah,0Ah
mov dx,offset MaxLen
int 21h

mov dl,10
mov ah,2
int 21h

cmp Len,0
je errInputEl

mov minus,0
xor bx,bx
mov bl,Len
mov si,offset Len
add si,bx
mov bl,1


xor cx,cx
mov cl,Len
inputElLoop:
std
lodsb
call checkSym
cmp ah,1
je errInputEl
cmp ah,2
je nextSym
sub al,'0'
mul bl
test ah,ah
jnz errInputEl
add mas[di],al
jo errInputEl
js errInputEl

mov al,bl
mov bl,10
mul bl
test ah,ah
jz ElNextCheck
cmp ah,3
jne errInputEl
ElNextCheck:
mov bl,al
jmp nextSym
errInputEl:
call ErrorInput
jmp inputElMain
nextSym:
loop inputElLoop
cmp minus,0
je exitInputEl
neg mas[di]
exitInputEl:
pop cx
ret
endp

checkSym proc
cmp al,'-'
je minusSym
cmp al,'9'
ja errCheckSym
cmp al,'0'
jb errCheckSym
jmp exitCheckGood
minusSym:
cmp si,offset Len
je exitWithMinus
errCheckSym:
mov ah,1
jmp exitCheckSym
exitWithMinus:
mov ah,2
mov minus,1
cmp Len,1
je errCheckSym
jmp exitCheckSym
exitCheckGood:
xor ah,ah
exitCheckSym:
ret
endp

ErrorInput proc
mov dx,offset ErrInpMsg
mov ah,9
int 21h
ret
endp

InputMsg proc
mov ax,di
add al,'0'
mov Count,al
mov ah,9
mov dx,offset InpMsg
int 21h
ret
endp

DoEl proc
mov ah,min
cmp mas[di],ah
jnl notNewMin
mov ah,mas[di]
mov min,ah
notNewMin:
cmp mas[di],-5
jl notSum
cmp mas[di],15
jg notSum
mov ah,mas[di]
add sum,ah
notSum:
ret
endp

Do proc
xor di,di
mov cx,10
DoLoop:
call DoEl
inc di
loop DoLoop
ret
endp

output proc
mov di,offset Otvet+11
mov minus,0
mov bl,10
mov al,sum
imul min
test ax,ax
jns notMinusOut
mov minus,1
neg ax
notMinusOut:
div bl
xchg ah,al
add al,'0'
std
stosb
sub al,'0'
xchg ah,al
xor ah,ah
test al,al
jz CheckForMinus
jmp notMinusOut
CheckForMinus:
cmp minus,0
je endOutput
mov al,'-'
std
stosb
endOutput:
mov ah,9
mov dx,offset Otvet
int 21h
ret
endp

end start
Варвара вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Random. отрицательные и положительные числа Seran4ek Общие вопросы Delphi 10 18.03.2014 22:16
Ввести имя файла с клавиатуры,открыть если существует,перименовать и переместить его mulatoschka1990 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 23.10.2009 16:18
как ввести числа с клавиатуры и запомнить их в переменные mandarinka27 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 18.05.2009 17:03
двузначные числа которые при умножении на 3 будут заканчиваться на цифру 4 Ases_51 Паскаль, Turbo Pascal, PascalABC.NET 4 13.01.2008 11:37