Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/26: Рейтинг темы: голосов - 26, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 30.05.2010
Сообщений: 10
1

Проверка Деления на два (Четность Чисел)

04.06.2010, 18:07. Показов 5116. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача: "Найти в массиве чисел суммы элементов, индексы которых четны и нечетны и вывести эти суммы на экран "Вот пример программы.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
.model small
.stack  100h
.data
mas db 1,2,3,2,1
      string db 0ah,0dh,'symma chetnih elementov: ','$'
    size=5
.code
.486
start:
mov     ax,@data
mov     bp,@data
mov     ds,ax
xor     ax,ax;сумма
xor     bp,bp;сумма
lea bx, mas;начало первой строки
xor si,si;смещение в строке
mov si,1
m1:
add ax,[bx+si];прибавляем к сумме э-т массива нечетный по индексу
add si,2
cmp si,size;если M, значит просуммировали все элементы
jnz m1
push ax;сохранить сумму
lea dx,string
mov ah,09h
int 21h
pop dx;восстановить сумму
add dl,'0'
mov ah,2
int 21h;вывести сумму
mov     ax,4c00h
int     21h
end     start
В программе реализована сумма только четных элементов. Соответственно меня строки
Assembler
1
2
3
4
5
6
mov si,1
m1:
add ax,[bx+si];прибавляем к сумме э-т массива нечетный по индексу
add si,2
cmp si,size;если M, значит просуммировали все элементы
jnz m1
на вот эти
Assembler
1
2
3
4
5
6
mov si,2
m1:
add ax,[bx+si];прибавляем к сумме э-т массива нечетный по индексу
add si,2
cmp si,size;если M, значит просуммировали все  элементы
jnz m1
ссоответственно два цикла выберают либо суммы элементов с четными или с нечетными индэксами(верхняя с четными).
Дак вот как в один сделатть цикл. т.е. Проверка если si div 2 <> 0 то нечетное и пушить в стек суммы нечетных. (Т.е. если номер нечетный прибавляем элемент к сумме)
Если четный si div 2 = 0 то суммируем элемент со второй суммой.
В итоге на выходе
Сумма элементов с четными индексами = #
Сумма элементов с нечетными индексами = #

Добавлено через 4 часа 25 минут
кароче говоря, подправьте цикл чтобы он сразу две суммы нахадил.. я пока не разобрался... регистров получается не хватает
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2010, 18:07
Ответы с готовыми решениями:

Проверка целых чисел на четность
Добрый день! Написал код, но допустил ошибки. Подскажите, что нужно исправить. #include &lt;stdio.h&gt;...

Проверка на четность первых 15-ти однобайтовых чисел
Добрый вечер форумчане. Я студент заочник блаблабла... задали задание по ассемблеру, познакомился с...

Проверка чисел на чётность или наоборот, дальнейший вывод
Написать программу, в которой вводятся 3 числа: А,В,С. Если среди них имеется хотя бы одно четное...

Проверка на четность
Значит задача следующая вывести на экран только четные значения функции. Функцию я задал...

4
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
04.06.2010, 20:03 2
регистров их много..
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
xor     ax,ax;сумма чет
xor     bp,bp;сумма нечет
lea bx, mas;начало первой строки
xor si,si;смещение в строке начинается с 0
;mov si,1
m1:
test si, 1 ;четный элемент или нет
jz    chet
add bp, [bx + si] ;прибавляем к сумме э-т массива нечетный по индексу
jmp nextsi
chet:
add ax,[bx+si];прибавляем к сумме э-т массива четный по индексу
nextsi:
inc si
cmp si, size
jnz m1
в конце цикла в ax,bp - суммы
0
1 / 1 / 0
Регистрация: 30.05.2010
Сообщений: 10
05.06.2010, 04:27  [ТС] 3
Да их -t в дебаге все так то можно посмотреть. А как насчёт использования одних и тех же регистров. Т.е. запушили в регистры значения потом вывели их потом почистели регистры потом в те же уже другие данные записываем... так можно?
p.s. это просто вопрос, не нужно кода слать больше...
0
Эксперт Java
4091 / 3825 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
05.06.2010, 10:35 4
не совсем понятен смысл вопроса...
с регистрами можно делать все что угодно...
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
05.06.2010, 14:50 5
почему бы не хранить результаты в переменных?
Assembler
1
2
summ_even dw 0
summ_odd dw 0
массив байтовый, так что во избежание переполнения лучше расширять регистры до 16 бит, например
Assembler
1
2
3
 lodsb
 cbw
 add summ_even, ax
на экран я так понял ты выводишь только одну цифру, а что если сумма больше 9?
лучше воспользоваться такой процедурой:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 ; в ax число 
outDec proc
  xor cx, cx
next_div:
  xor dx, dx
  div ten
  push dx
  inc cx
  or ax, ax
  jnz next_div
  mov  ax, 0200h
outSym:
  pop  dx
  add  dl, '0'
  int  21h
  loop  outSym
  ret
 ten dw 10
outDec endp
0
05.06.2010, 14:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2010, 14:50
Помогаю со студенческими работами здесь

Проверка на четность
Есть восьмизначное число, проверить входят ли в запись этого числа четные цифры. Как реализовать...

Проверка на четность
Написать программу которая проверяет число на четность

Проверка на чётность
Продемонстрируйте для заданного числа 𝑛 проверку его четности (𝑛 &amp; 1). для этого запишите...

проверка на четность и знак
если ли в асм стандартно как проверить на четность и знак ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru