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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2009, 15:45   #21
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

Код:
ongavg:
            push ebx
            push edx
            push esi
            push ecx

# загрузка аргументов функции
            mov ebx, [esp+20] # *a
            mov edx, [esp+24] # *b
            mov esi, [esp+28]  # *c
            mov ecx, [esp+32] # size (size_a = size_b)

            clc  # clear cary
cycle:
          mov eax, [ebx+4*ecx-4]  # сохранение каждого элемента первого массива в eax для сложения       
          
          adc eax, [edx+4*ecx-4]  # сложением с каждым элементов второго массива с учетом cary
          mov [esi+4*ecx-4],eax   # в массив c кладется результат
          loop cycle # ecx --//не уверен что loop не заденет флаг CF

          mov ecx, [esp+32] # size (size_a = size_b)
cycle1:
          rcr dword ptr [esi+4*ecx-4],1 
          loop cycle1 # ecx --
          
          mov eax,esi
          pop ebx
          pop edx
          pop esi
          pop ecx
          ret
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 30.10.2009, 15:46   #22
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

не заденет
спасибо
NiCola999 вне форума Ответить с цитированием
Старый 30.10.2009, 15:57   #23
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

точно не заденет, если loop эквивалент
dec
jnz
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 30.10.2009, 16:37   #24
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

а если быть точнее то loop эквивалент
Код:
         mov edi,0 ; не обязательно edi, любой другой не занятый
cycle:
         cmp ecx,edi
         jz end
       ; тут что-то делается
         jmp cycle
end:
         ; действия после завершения цикла
NiCola999 вне форума Ответить с цитированием
Старый 30.10.2009, 16:44   #25
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Нет. Как сказал airyashov, loop эквивалентен
Код:
dec ecx
jnz metka
только на флаги не влияет вроде.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 30.10.2009 в 16:47.
Goodwin98 вне форума Ответить с цитированием
Старый 11.11.2009, 11:59   #26
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Приветствую еще раз=), в общем я не совсем правильно делал.
допустим такой пример
1, 0, 0xffffffff
1, 0, 1

после сложения(ADC) получается такой массив
2, 1, 0

дальше начинается сдвиг элементов с учетом переполнения ОТ ПРЕДЫДУЩЕГО элемента
CF = 0
a[0] >> 1 CF = 2>>1 = 1, CF = 0
a[1] >> 1 CF = 1>>1 = 0, CF = 1
a[2] >> 1 CF = 0>>1 = 0 и бит из CF переходит в старший бит, т.е получается 0x80000000
итого получается
1 0 0x80000000

подскажите нормальный алгоритм...
есть небольшая идея, но реализовать пока не получилось
CF будет в 1 когда младший бит числа равен 1
Надо проверять младший бит если он равен 1 CF = 1 сдвигать это число затем переходить к следующему элементу и делать ИЛИ с 0x80000000 (установка в 1 старшего бита)
либо просто устанавливать CF в единицу и на следующей итерации цикла сдвигать с RCR

Последний раз редактировалось NiCola999; 11.11.2009 в 15:57.
NiCola999 вне форума Ответить с цитированием
Старый 11.11.2009, 14:25   #27
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

Цитата:
Сообщение от NiCola999 Посмотреть сообщение
П
a[2] >> 1 CF = 0>>1 = 0 и бит из CF переходит в старший бит, т.е получается 0xffffffff
с какой это радости так получается должно быть 0x80000000
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 11.11.2009, 15:57   #28
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

да , я ошибся 0x80000000, алгоритм подскажи
лучше всего будет проверить младший бит btr eax,0 , в CF установится его значение
потом на следующей итерации сдвиг делать с помощью rcr, вот как сделать второе

Последний раз редактировалось NiCola999; 11.11.2009 в 16:17.
NiCola999 вне форума Ответить с цитированием
Старый 11.11.2009, 16:23   #29
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

rcr крутит биты через CF, так что младший сразу в CF после окажется
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 11.11.2009, 16:37   #30
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

вот что у меня получилось...
в esi хранится указатель на массив суммы (2 1 0)
Код:

shift:	
	mov eax, [esi+edx] ;загрузка arr[edx] в eax
	bt eax,0  ; CF = младший бит eax
        jc next ; перейти на next если CF = 1
	shr eax,1 ; сдвиг без учета CF
	mov [esi+edx],eax ; положить результат в arr[edx]
	add edx,4  ; перейти к сл элементу        
	loop shift
	jmp end

next:
        shr eax,1
	or eax,0x80000000
	mov [esi+edx],eax
	add edx,4
	loop shift
результат
1
80000000
0
почему он считает что CF=1 на втором элементе?
после сдвига двойки поулчается 1 в CF не должно ничего попасть

Последний раз редактировалось NiCola999; 11.11.2009 в 16:47.
NiCola999 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поменять большие буквы на маленькие и маленькие на большие в си++ Барби Помощь студентам 4 08.04.2008 01:25
csv-файл большие числа nevadimka Microsoft Office Excel 1 14.03.2008 10:25
Большие числа Лубышев Помощь студентам 6 27.02.2008 22:57
Большие комплексные числа xoz Общие вопросы Delphi 0 24.02.2008 03:12