Вверх ↑
Этот топик читают: Гость
Ответов: 574
Рейтинг: 1
#1: 2007-06-03 23:33:27 ЛС | профиль | цитата
Дали задачу в колледже: найти количество чисел в массиве, кратных k. У меня программа выдаёт 10, а это число элементов массива, хотя там всего 5 кратных. В качестве количества выступает переменная a. А ищу числа кратные 2м. По программе это видно. Азы Асма, помогите, пожалуйста!

code_1077.txt
карма: 0

0
файлы: 1code_1077.txt [630B] [738]
Ответов: 9906
Рейтинг: 351
#2: 2007-06-04 00:47:08 ЛС | профиль | цитата
Там легче правильные строки искать, чем неправильные
...
begin:
mov ax,[bx]
test ax,1
jnz no
inc a
no:
inc bx
inc bx
loop begin
...
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#3: 2007-06-04 11:07:27 ЛС | профиль | цитата
   inc  bx
   inc  bx
неужели это работает быстрее, чем
add bx,2[/code]
:?: Или вам так преподают? 8-)
карма: 27
0
Разработчик
Ответов: 26300
Рейтинг: 2146
#4: 2007-06-04 13:09:20 ЛС | профиль | цитата
Dilma, я дико извиняюсь, что влез, но хочу ответить на заданный тобой вопрос. С точки зрения архитектуры процессора, команда inc -- регистровая команда, а add -- арифметическая, и у процессора задействуется АЛУ, а это дополнительное количество циклов, даже при конвеерном методе обработки. Следовательно, команда add медленнее команды inc, и даже, двух команд inc.
карма: 22

0
Ответов: 9906
Рейтинг: 351
#5: 2007-06-04 13:15:37 ЛС | профиль | цитата
nesco писал(а):
inc -- регистровая команда

смотри внимательней
nesco писал(а):
Следовательно

проблемы с логикой
карма: 9

0
Разработчик
Ответов: 26300
Рейтинг: 2146
#6: 2007-06-04 13:25:34 ЛС | профиль | цитата
Galkov, вот
Ассемблер. Урок 17 писал(а):
Команда inc
Команда inc (от английского increment) увеливает значение своего параметра на 1. В качестве параметра может выступать как регистр (кроме сегментного), так и ячейка памяти.

Вот пример:

;Увеличение значения регистра al на 1.
inc al
Эта команда работает быстрее, чем просто прибавление единицы к значению соответствующего регистра или ячейки памяти (например, с помощью команды add). Именно команду inc и надо использовать для увеличения содержимого параметра на 1.

карма: 22

0
Ответов: 9906
Рейтинг: 351
#7: 2007-06-04 13:51:46 ЛС | профиль | цитата
1)
Galkov писал(а):
смотри внимательней

inc a это не тоже самое, что inc al

2) мало ли что пишут на заборах - читать надо нормативную документацию. На конкретный проц
Конечно там черт ногу сломает, с их конвейеризацией.
Но масштаб и тенденции уловимы из любого
Есть к меня древний NG, который сообщает для 486 - и add и inc одинаково по скорости выполняются: один тик для регистровых и 3 для памяти.
Плюс накладные расходы работы с памятью, которые нормальный человек посчитать не в состоянии.
Но они одинаковы в обоих случаях (add и inc) - одно чтение + одна запись
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#8: 2007-06-04 14:06:47 ЛС | профиль | цитата
nesco писал(а):
а add -- арифметическая, и у процессора задействуется АЛУ, а это дополнительное количество циклов, даже при конвеерном методе обработки

дополнительное это сколько? Кроме того производительность команды измеряется в тактах процессора. Приведенные команды(inc и add) в случае с регистрами на процах типа Intel выполняются за один такт. Однако как правильно было отмечено все слишком сильно зависит от платформы и скорей всего в большинстве случаев комбинация из двух inc будет менее производительной.

Вот потому люди и изобрели ЯВУ, чтобы не заморачиваться по этому поводу.
И HiAsm, чтобы этот ЯВУ не слвсем
карма: 27
0
Разработчик
Ответов: 26300
Рейтинг: 2146
#9: 2007-06-04 14:07:19 ЛС | профиль | цитата
Galkov, видишь, что получается. Кто-то читат вот такие описания и дает народу заведомо ложные знания. Туфта получается...
карма: 22

0
Ответов: 9906
Рейтинг: 351
#10: 2007-06-04 14:30:43 ЛС | профиль | цитата
А мне показалось, что ты просто не въехал, что a - это память а не регистр
Ideal в Tasm, и Fasm - понятнее, имхо: inc [a]
карма: 9

0
Разработчик
Ответов: 26300
Рейтинг: 2146
#11: 2007-06-04 14:50:44 ЛС | профиль | цитата
Galkov, да все правильно тебе показалось. Если операции c регистрами inc и add выполняютяся за один тик, то с памятью за большее количество тиков (зависит от платформы). И, в любо случае, при равном количестве тиков на одну команду два inc'a будут медленнее одного add.
карма: 22

0
Ответов: 574
Рейтинг: 1
#12: 2007-06-04 17:42:02 ЛС | профиль | цитата
Galkov писал(а):
Там легче правильные строки искать, чем неправильные


СПАСИБО!
карма: 0

0
12
Сообщение
...
Прикрепленные файлы
(файлы не залиты)