Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/22: Рейтинг темы: голосов - 22, средняя оценка - 4.77
NarkoZZ
1 / 1 / 0
Регистрация: 30.05.2010
Сообщений: 10
1

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

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

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

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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2010, 18:07
Ответы с готовыми решениями:

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

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

Проверка на четность числа
Здраствуйте. Только начал изучать асм и возник вопрос: как проверить число находящееся в регисте на...

Проверка числа на четность/нечетность
Здравствуйте. У меня возникла небольшая проблема с кодом. Задача следующая: Перемножить три...

Проверка числа на четность
почему у меня не переходит по метке четности тоесть Evenn?у меня он идет линейно. В чем может быть...

4
turbanoff
Эксперт Java
4029 / 3764 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
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
NarkoZZ
1 / 1 / 0
Регистрация: 30.05.2010
Сообщений: 10
05.06.2010, 04:27  [ТС] 3
Да их -t в дебаге все так то можно посмотреть. А как насчёт использования одних и тех же регистров. Т.е. запушили в регистры значения потом вывели их потом почистели регистры потом в те же уже другие данные записываем... так можно?
p.s. это просто вопрос, не нужно кода слать больше...
0
turbanoff
Эксперт Java
4029 / 3764 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
05.06.2010, 10:35 4
не совсем понятен смысл вопроса...
с регистрами можно делать все что угодно...
0
vital792
2005 / 1277 / 60
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2010, 14:50

Проверка на четность числа
Доброго времени суток. Нужно написать проверку числа на четность Что делаю не так? Всегда пишет,...

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru