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

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

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

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

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

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

тут все ясно что неверно
вы можете дать полный рабочий код с примером, так от руки настаиваю на своем варианте

Код:
clc
shift:	
	rcr [esi+edx],1
	lea edx,edx+4        
	loop shift
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 11.11.2009, 16:49   #32
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Код:
.intel_syntax noprefix
.global avg
.type avg, @function

avg:
	push ebx
	push esi	
	push edi
	push ecx

	mov ebx,[esp+20]
	mov edi,[esp+24]
	mov esi,[esp+28]
	mov ecx,[esp+32]	
	
	clc

cycle:
	mov eax, [edi+4*ecx-4]	
	adc eax, [ebx+4*ecx-4]
	mov [esi+4*ecx-4], eax
	loop cycle
	
	xor edx, edx	
	mov ecx, [esp+32]

shift:		
	mov eax, [esi+edx]
	bt eax,0
        jc next
	shr eax,1        
	mov [esi+edx],eax		
	add edx,4 	       
	loop shift
	jmp end

next:
	shr eax,1
	or eax,0x80000000	
	mov [esi+edx],eax
	add edx,4
	loop shift

end:
	mov eax,esi
	pop esi
        pop edi
	pop ebx
	pop ecx
	ret
NiCola999 вне форума Ответить с цитированием
Старый 11.11.2009, 17:06   #33
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

не знаю что вы пишите вот проверил на delphi все работает
Код:
  var mas:array [0..2] of LongWord;
begin
  mas[2]:=0;
  mas[1]:=1;
  mas[0]:=2;
asm
  lea edi,mas
  mov ecx,3
  clc
@1:
    rcr dword ptr [edi],1
    lea edi,edi+4
  loop @1

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

незнаю как у тебя там на делфи, у меня не работает так
в общем я тут еще подумал и вот что получилось
теперь выдает правильный ответ...

Код:
.intel_syntax noprefix
.global avg
.type avg, @function

avg:
	push ebx
	push esi	
	push edi
	push ecx

	mov ebx,[esp+20]
	mov edi,[esp+24]
	mov esi,[esp+28]
	mov ecx,[esp+32]	
	
	clc /* clear CARY(set 0)*/

cycle:
	mov eax, [edi+4*ecx-4]	
	adc eax, [ebx+4*ecx-4]
	mov [esi+4*ecx-4], eax
	loop cycle
	
	xor edx, edx	
	mov ecx, [esp+32]
	xor ebx, ebx
shift:		
	mov eax, [esi+edx]
	bt eax,0
        jc next
	shr eax,1
	mov [esi+edx],eax		
	add edx,4 
	       
	loop shift
	jmp end

next:
	shr eax,1
	cmp ecx,1
	jz next2
        mov edi, [esi+edx+4]        
        shr edi,1
	or edi,0x80000000	
	mov [esi+edx],eax
	mov [esi+edx+4], edi
	inc ebx
	add edx,8
	loop shift

next2:
	shr eax,1
	mov [esi+edx],eax
	add edx,4
	loop shift

end:
	mov eax,esi
	pop esi
        pop edi
	pop ebx
	pop ecx
	ret
тут я проверяю младший бит и устанавливаю его значение в cf затем в next делаю сдвиг следующего элемента и ставлю его старший бит в 1, и перехожу к следующему элементу.

вопрос add edx,8 не выйдет запредел массива ? может уменьшить ecx ?

Последний раз редактировалось NiCola999; 11.11.2009 в 17:22.
NiCola999 вне форума Ответить с цитированием
Старый 11.11.2009, 17:38   #35
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

нет этот алгоритм не работает, т.к я не проверяю здесь следующий элемент на младший бит...
NiCola999 вне форума Ответить с цитированием
Старый 12.11.2009, 07:57   #36
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

Цитата:
Сообщение от NiCola999 Посмотреть сообщение
нет этот алгоритм не работает, т.к я не проверяю здесь следующий элемент на младший бит...
в твоем коде в цикле написано
add edx,4 в моем lea edx,edx+4
одна команда портит флаги др нет

Ты скинул код, под какой компилятор GAS?
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru

Последний раз редактировалось airyashov; 12.11.2009 в 07:59.
airyashov вне форума Ответить с цитированием
Старый 12.11.2009, 19:05   #37
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

компилятор GCC ассемблер 80386
в общем задачу я решил, вот если интересно

Код:
.intel_syntax noprefix
.global avg
.type avg, @function

avg:
	push ebx
	push esi	
	push edi
	push ecx

	mov ebx,[esp+20]
	mov edi,[esp+24]
	mov esi,[esp+28]
	mov ecx,[esp+32]	
	
	clc

cycle:
	mov eax, [edi+4*ecx-4]	
	adc eax, [ebx+4*ecx-4]
	mov [esi+4*ecx-4], eax
	loop cycle

	xor edx, edx	
	mov ecx, [esp+32]
	xor ebx, ebx	
shift:		
	mov eax, [esi+edx]

	cmp ebx,1
	je shiftCary

	bt eax,0
        jc next

	shr eax,1
	mov [esi+edx],eax		
	add edx,4 	       
	loop shift
	jmp end
      
next:
	shr eax,1
	mov ebx,1
	mov [esi+edx],eax
	add edx,4
	loop shift

shiftCary:
	shr eax,1
	or eax,0x80000000
	mov [esi+edx],eax
	mov ebx,0
	add edx,4
	loop shift

end:
	mov eax,esi
	pop esi
        pop edi
	pop ebx
	pop ecx
	ret
всем спасибо за помощь
NiCola999 вне форума Ответить с цитированием
Старый 20.07.2011, 16:26   #38
Hottabych
Форумчанин
 
Регистрация: 13.01.2008
Сообщений: 140
По умолчанию

Всем доброго времени суток!
Чтоб новую тему не создавать пишу сюда.
Реализую RSA, нужны 2 функции сложения/умножения длинных чисел, т.е. передаем указатель1, длину1, указатель2, длину2, указатель3, длину3, 3-результат, ну или что-то в этом роде.
Пишу на делфях, асму знаю плохо, поэтому если вдруг кто-то поделится кодом буду премного благодарен.
Hottabych вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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