اطلاعیه

Collapse
No announcement yet.

تولید اعداد رمز تصادفی 8 بیتی

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    تولید اعداد رمز تصادفی 8 بیتی

    با عرض سلام خدمت اساتید بزرگوار.
    کسی از اساتید میتونه کمک کنه ؟؟ , که چه طور میشه با استفاده از میکرو و به زبان اسمبلی با هر بار فشردن کلید یک رمز تصادفی 8 بیتی ایجاد به طوری که بشه اون رو روی 8 سون سگمنت نمایش داد؟؟
    مرسی.

    #2
    پاسخ : تولید اعداد رمز تصادفی 8 بیتی

    ---
    اگر روزی بفهمی همه چیزایی که از بچگی تا حالا بهت گفتن بی اساس یا دروغه چه حالی میشی؟
    کارمندان نابکار، از دزدان و آشوبگران بیشتر به کشور آسیب ميآ‌رسانند

    دیدگاه


      #3
      پاسخ : تولید اعداد رمز تصادفی 8 بیتی

      تابع rand در زبان سی هست که اعداد شبه تصادفی تولید میکنه، کامپایلش کن خروجی اسمبلیش رو بدست بیار
      گذشت خصلت مردان است

      دیدگاه


        #4
        پاسخ : تولید اعداد رمز تصادفی 8 بیتی

        این تابع مال کدویژن هست، یکم تغیرش دادم:
        کد:
        unsigned char rand(void) {
         static unsigned char _seed = 1;
         _seed = _seed * 0x41C64E6D + 30562;
         return _seed;
        }
        با avr-gcc خروجیش میشه این، یکم تغیرش دادم:
        کد:
        .text
        
        ; return: r24
        rand:
        	lds r25,_seed
        	ldi r24,low(109)
        	mul r25,r24
        	mov r24,r0
        	clr r1
        	subi r24,low(-(98))
        	sts _seed,r24
        	ret
        
        .data
        
        _seed: .byte	1
        اینم مال avr-libc، یکم تغیرش دادم:
        کد:
        unsigned char rand(void) {
         static unsigned char ctx = 1;
         
        #if 1
         ctx = ctx * 1103515245 + 12345;
        #else
         if (ctx == 0)
          ctx = 123;
         ctx = 16807 * (ctx % 127773) - 2836 * (ctx / 127773);
        #endif
         
         return ctx;
        }
        اینم خروجی اسمبلیش بازم با تغییر:
        کد:
        .text:
        
        #if 1
        
        rand:
        	lds r25,ctx
        	ldi r24,low(109)
        	mul r25,r24
        	mov r24,r0
        	clr r1
        	subi r24,low(-(57))
        	sts ctx,r24
        	ret
        
        #else
        
        rand:
        	lds r24,ctx
        	clr r1
        	cpse r24,r1
        	rjmp .L2
        	ldi r24,low(123)
        	sts ctx,r24
        .L2:
        	lds r22,ctx
        	ldi r23,low(0)
        	ldi r24,low(0)
        	ldi r25,low(0)
        	ldi r18,low(29)
        	ldi r19,low(-13)
        	ldi r20,low(1)
        	ldi r21,low(0)
        	call __divmodsi4
        	ldi r24,low(-89)
        	mul r22,r24
        	mov r24,r0
        	clr r1
        	sts ctx,r24
        	ret
        
        __divmodsi4:
        	mov r0,r21
        	bst r25,7
        	brtc .+4
        	com r0
        	rcall __divmodsi4_neg1
        	sbrc r21,7
        	rcall __divmodsi4_neg2
        	rcall __udivmodsi4
        	sbrc r0,7
        	rcall __divmodsi4_neg2
        	brtc __divmodsi4_exit
        
        __divmodsi4_neg1:
        	com r25
        	com r24
        	com r23
        	neg r22
        	sbci r23,0xFF
        	sbci r24,0xFF
        	sbci r25,0xFF
        	ret
        
        __divmodsi4_neg2:
        	com r21
        	com r20
        	com r19
        	neg r18
        	sbci r19,0xFF
        	sbci r20,0xFF
        	sbci r21,0xFF
        
        __divmodsi4_exit:
        	ret
        
        __udivmodsi4:
        	ldi r26,0x21
        	mov r1,r26
        	sub r26,r26
        	sub r27,r27
        	movw r30,r26
        	rjmp __udivmodsi4_ep
        
        __udivmodsi4_loop:
        	adc r26,r26
        	adc r27,r27
        	adc r30,r30
        	adc r31,r31
        	cp r26,r18
        	cpc r27,r19
        	cpc r30,r20
        	cpc r31,r21
        	brcs __udivmodsi4_ep
        	sub r26,r18
        	sbc r27,r19
        	sbc r30,r20
        	sbc r31,r21
        
        __udivmodsi4_ep:
        	adc r22,r22
        	adc r23,r23
        	adc r24,r24
        	adc r25,r25
        	dec r1
        	brne __udivmodsi4_loop
        	com r22
        	com r23
        	com r24
        	com r25
        	movw r18,r22
        	movw r20,r24
        	movw r22,r26
        	movw r24,r30
        	ret
        
        #endif
        
        .data:
        
        ctx: .bute 1
        گذشت خصلت مردان است

        دیدگاه


          #5
          پاسخ : تولید اعداد رمز تصادفی 8 بیتی

          برای تولید اعداد شبه تصادفی عموما از روابطی استفاده میشه که مقدار اولیش رو شما (مثلا مقدار یک تایمر) تعیین میکنی. هم کامپایلرها این روابط رو دارند و هم با استفاده از گوگل میتونی این روابط رو پیدا کنی

          دیدگاه


            #6
            پاسخ : تولید اعداد رمز تصادفی 8 بیتی

            کد:
            unsigned long seed;
            .
            .
            .
            void my_rand(void)
            {
             seed = (seed*1664525)+1013904223;
            }
            مقدار اولیه seed رو باید از یه جای شبه تصادفی به دست بیاری. مثلاً از ولتاژ ADC نویز یه پین که رو هواست. یا مقدار یه تایمر که داره برا خودش می شماره.
            بیایید با Google آشتی کنیم!

            دیدگاه

            لطفا صبر کنید...
            X